การค้นหาแบบสองทิศทาง (อังกฤษ: Bidirectional Search) คือวิธีหนึ่งที่ใช้สำหรับการค้นหาข้อมูลภายในกราฟระบุทิศทาง โดยมีจุดประสงค์เป็นการหาวิถีสั้นสุดจากจุดเริ่มต้นไปยังจุดสิ้นสุดบนกราฟ หลักการค้นหาที่เป็นเอกลักษณ์ของวิธีการนี้ก็คือเราจะทำการค้นหาจากจุดเริ่มไปยังจุดสิ้นสุดและจากจุดสิ้นสุดกลับมายังจุดเริ่มต้นไปพร้อมๆกัน และเมื่อการค้นหามาบรรจบพร้อมกันที่จุดๆหนึ่งระหว่างกลางก็จะถือเป็นอันสิ้นสุด นอกจากนี้การค้นหาแบบสองทิศทางนี้ยังสามารถนำเอาไปประยุกต์รวมเข้ากับการค้นหาแบบอื่นๆเพื่อให้ได้ประสิทธิภาพที่ดียิ่งขึ้นได้ ตัวอย่างของวิธีการค้นหาที่สามารถนำเอามาประยุกต์กับการค้นหาแบบสองทิศทางเช่น การค้นตามแนวกว้าง, การค้นแบบดีที่สุด, ขั้นตอนวิธีเอสตาร์เป็นต้น ทั้งนี้ก็เพื่อเพิ่มประสิทธิภาพในการค้นหาให้ดีที่สุดนั่นเอง
การค้นหาแบบสองทิศทางนั้นโดยนิยามแล้วก็คือขั้นตอนวิธีที่ใช้หลักการซึ่งคล้ายกับขั้นตอนวิธีแบ่งแยกเพื่อเอาชนะ(อังกฤษ: Divide and conquer)ในกรณีที่เราทราบตำแหน่งของเป้าหมายที่จะค้นหาแล้ว แทนที่จะค่อยๆเริ่มจากจุดเริ่มต้นไปยังจุดปลายเราจะทำการค้นหาจากจุดปลายย้อนกลับมาหาจุดเริ่มต้นไปพร้อมๆกันแทน ด้วยวิธีนี้ความเร็วในการค้นหาของแต่ละเส้นทางจะอยู่ที O (bd/2) เมื่อ b{\displaystyle b} คือจำนวนการแตกกิ่งก้าน (Branching factor) และ d{\displaystyle d} คือระยะทางทั้งหมดจากจุดเริ่มต้นไปยังจุดสิ้นสุด ซึ่งเมื่อนำระยะเวลาการค้นหามารวมกันแล้วก็ยังถือว่าได้ลดเวลาในการค้นหาลงไปอย่างมากหากเทียบกับการค้นหาแบบปกติ O (bd)
อย่างไรก็ตามแม้ว่าวิธีการนี้จะดูเหมือนว่าสามารถที่จะลดเวลาการค้นหาไปได้อย่างมากก็ตาม ข้อเสียของมันก็ยังมีอยู่หลายข้อด้วยกันคือ
ด้วยสาเหตุทั้งปวงที่กล่าวมาทำให้การนำเอาวิธีการค้นหาแบบสองทิศทางไปใช้งานจริงนั้นจึงยุ่งยากพอสมควร
Ira Pohlคือบุคคลแรกที่ออกแบบและนำเอาการค้นหาแบบสองทิศทางมาใช้ในปีค.ศ.1971 เริ่มแรกนั้นขั้นตอนวิธีดังกล่าวไม่มีประสิทธิภาพมากนักคือการค้นหาจากสองทางมักจะพลาดไม่ได้มาบรรจบกันทำให้ได้ผลลัพธ์ที่ผิดพลาด ต่อมาในปีค.ศ.1983 Des Champeaux ได้ออกแบบขั้นตอนวิธีใหม่เพื่อเข้ามาใช้แก้ปัญหาดังกล่าวด้วยวิธีแบบBHFFA(Bidirectional heuristic front to front algorithm)แต่ก็ทำให้เกิดปัญหาในเรื่องพื้นที่หน่วยความจำ ต่อมาในปีค.ศ.1984 PohlและPolitowiskyได้นำเสนอทางออกอีกแบบที่เขาเรียกว่า D-node retargetingขึ้นมาซึ่งสามารถช่วยแก้ปัญหาที่มีมาแต่เดิมรวมถึงเรื่องของหน่วยความจำได้อย่างมีประสิทธิภาพกว่าเก่า
หลังจากนั้นวิธีการค้นหาแบบสองทิศทางก็ได้ผ่านการปรับปรุงเรื่อยมาอีกหลายครั้งจนถึงล่าสุดคือปีค.ศ.2009โดยWimและHenk ซึ่งได้คิดค้นออกแบบการค้นหาแบบสองทิศทางของเอสตาร์ที่ได้รับการปรังปรุงให้ค้นหาได้อย่างมีประสิทธิภาพยิ่งขึ้น
จากกราฟด้านบนเราจะสามารถมองเห็นการทำงานคร่าวๆได้โดย หากเราสมมติให้ วงกลมแต่ละวงคือปมของกราฟโดยที่แต่ละปมจะเก็บค่าตำแหน่งของปมนั้นๆเอาไว้ เส้นเชื่อมที่หนาจะหมายถึงค่าใช้จ่ายที่มากกว่าในการเดินทางผ่าน ส่วนปมที่ถูกทาด้วยสีฟ้าจะหมายถึงเป็นปมที่ถูกเลือกและปมสีแดงคือจุดที่คาดว่าการค้นหาจากสองทิศทางมาบรรจบกัน เส้นประใช้แสดงขอบเขตของการค้นหาแยกแต่ละฝั่งเอาไว้ ในแง่ของการนำเอาไปใช้งานจริงนั้น การค้นหาแบบสองทิศทางมักจะถูกนำไปรวมเข้ากับขั้นตอนวิธีแบบอื่นเสียมากกว่า ทั้งนี้ก็เพื่อให้ได้ผลลัพธ์ออกมาตามแต่ที่ต้องการ