อัลกอริทึม Binary Search เป็นวิธีที่มีประสิทธิภาพในการค้นหาค่าเฉพาะในอาร์เรย์ที่เรียงลำดับ วิธีนี้จะแบ่งอาร์เรย์ออกเป็นส่วนเล็กๆ และเปรียบเทียบค่าที่ตำแหน่งกึ่งกลางของช่วงการค้นหากับค่าเป้าหมายอย่างต่อเนื่อง หากค่าตรงกันจะพบค่าที่ต้องการ มิฉะนั้น อัลกอริทึมจะยังคงจำกัดช่วงการค้นหาให้แคบลงและทำกระบวนการซ้ำจนกว่าจะพบค่าหรือไม่มีองค์ประกอบให้ตรวจสอบอีกต่อไป
ขั้นตอน:
- เริ่มต้นช่วงการค้นหา: เริ่มต้นด้วยการเลือกช่วงการค้นหาจากตำแหน่งแรก
left
ไปยังตำแหน่งสุดท้ายright
ของอาร์เรย์ - ค้นหาจุดกึ่งกลาง: คำนวณจุดกึ่งกลางโดยหาค่าเฉลี่ย
left
และตำแหน่งที่เหมาะสม นี่คือจุดกึ่งกลางของช่วงการค้นหา - เปรียบเทียบค่า: เปรียบเทียบค่าที่จุดกึ่งกลางกับค่าเป้าหมาย
- จับผลการเปรียบเทียบ: ถ้าค่าที่จุดกึ่งกลางตรงกับค่าเป้าหมาย ส่งคืนตำแหน่งนี้ หากค่าที่จุดกึ่งกลางน้อยกว่าค่าเป้าหมาย ให้อัปเดตตำแหน่งด้านซ้ายเป็นตรงกลาง + 1 เพื่อค้นหาด้านขวา หากค่าที่จุดกึ่งกลางมากกว่าค่าเป้าหมาย ให้อัปเดตตำแหน่งด้านขวาเป็นตรงกลาง- 1 เพื่อค้นหาครึ่งซ้าย
- ทำซ้ำ: ทำซ้ำขั้นตอนที่ 2 ถึง 4 จนกว่าจะพบค่าหรือไม่มีองค์ประกอบให้ตรวจสอบ
left > right
อีก
ข้อดีและข้อเสีย
ข้อดี:
- ประสิทธิภาพที่มีประสิทธิภาพ: ความซับซ้อนของเวลาของอัลกอริทึมคือ O(log n) ทำให้มีประสิทธิภาพสูงในการจัดการชุดข้อมูลขนาดใหญ่
- มีประสิทธิภาพสำหรับชุดข้อมูลขนาดใหญ่: การค้นหาแบบไบนารีมีประสิทธิภาพในการลดจำนวนองค์ประกอบเพื่อตรวจสอบชุดข้อมูลขนาดใหญ่ได้อย่างรวดเร็ว
ข้อเสีย:
- ใช้ได้กับอาร์เรย์ที่เรียงลำดับเท่านั้น: อัลกอริทึมใช้งานได้กับอาร์เรย์ที่เรียงลำดับเท่านั้น
- จำนวนขั้นตอนที่เปลี่ยนแปลงได้: จำนวนขั้นตอนที่จำเป็นในการค้นหาค่าขึ้นอยู่กับตำแหน่งในอาร์เรย์ และอาจใช้หลายขั้นตอนสำหรับค่าที่ใกล้ถึงจุดสิ้นสุด
ตัวอย่าง: Binary Search เพื่อค้นหาค่า 12 ในอาร์เรย์ที่เรียงลำดับใน PHP
คำอธิบายของตัวอย่าง
- เราเริ่มต้นด้วยช่วงการค้นหาเริ่มต้นจากตำแหน่งแรก
left = 0
ถึงตำแหน่งสุดท้ายright = 6
ของอาร์เรย์ - เราคำนวณจุดกึ่งกลาง(กลาง) โดยเฉลี่ยตำแหน่งซ้ายและขวา
mid = 3
. ค่ากลางคือ 12 - เราเปรียบเทียบค่าที่
mid(12
) กับค่าเป้าหมาย(12) และพบการจับคู่ เราจึงส่งคืนตำแหน่งที่ 3 - อัลกอริทึมสิ้นสุดลง และเราแสดงผลลัพธ์ "พบค่า 12 ที่ตำแหน่ง 3"