วิธีค้นหาข้อมูลแบบทวิภาค (binary search)

วิธีค้นหาข้อมูลแบบทวิภาค (binary search) จะใช้ค้นหาในข้อมูลที่มีการเรียงลำดับแล้ว โดยนำข้อมูลมาแบ่งครึ่ง จากนั้นให้พิจารณาว่าข้อมูลที่ต้องการค้นหาอยู่ฝั่งใด แล้วก็ทำการแบ่งครึ่งและค้นหาไปเรื่อยๆ วิธีการนี้จะช่วยลดขั้นตอนการทำงานได้มาก

ตัวอย่างข้อมูลที่มีการเรียงลำดับแล้วในงานทั่วไป เช่น พจนานุกรมที่มีการเรียงรายการของคำและความหมาย ถ้ารู้คำเราก็จะสามารถหาความหมายได้, สมุดโทรศัพท์ที่มีการเรียงลำดับรายการชื่อ, ที่อยู่ และเบอร์โทรศัพท์ หากรู้ชื่อก็จะหาเบอร์โทรศัพท์และที่อยู่ได้อย่างรวดเร็ว

ขั้นตอนวิธี : การค้นหาข้อมูลแบบทวิภาค
ข้อมูลเข้า : รายการ L ที่มีข้อมูลการเรียงลำดับจากน้อยไปหามาก
ข้อมูลออก : ค่าดัชนี i ในรายการ L ที่บอกตำแหน่งของ target

ขั้นตอนวิธี
1. ให้ n <- จำนวนข้อมูลในรายการ L
2. ให้ left <- 1
3. ให้ right <-n
4. ทำซ้ำ ขณะที่ left <= right
4.1 ให้ mid <- (left + right)/2 ปัดเศษทิ้ง
4.2 ให้ x <- ข้อมูลลำดับที่ mid ในรายการ A
4.3 ถ้า x = target แล้ว ให้คืนค่าดัชนี i เท่ากับ mid และจบการทำงาน
4.4 ถ้า x < target แล้ว ให้ left <- mid + 1
4.5 ถ้า x > target แล้ว ให้ right <- mid – 1
5. คืนคำตอบว่า ไม่พบข้อมูล target ในรายการ L

ตัวอย่างที่ 1 วิธีค้นหาข้อมูลแบบทวิภาค

กำหนดให้ L = {20, 16, 8 , 7, 6, 10, 11, 13,14, 22, 15, 17, 28, 29, 30, 4, 2, 21} และ target = 13

ขั้นตอนที่ 1 เรียงลำดับข้อมูลจากน้อยไปหามาก และกำหนดค่าดัชนี i ของข้อมูลในรายการ L

i123456789101112131415161718
L2467810111314151617202122282930

ขั้นตอนที่ 2 แสดงขั้นตอนวิธีค้นหาข้อมูล target = 13 กำหนดให้ n = 18

รอบที่leftrightmidxผลการเปรียบเทียบกับ target
1118914มากกว่า
21847น้อยกว่า
358610น้อยกว่า
478711น้อยกว่า
588813คืนค่าดัชนี i = 8

ถาม-ตอบ
1. มีการทำงานทั้งหมดกี่รอบ
2. ในรอบที่ 2 ค่ากลาง mid เท่ากับเท่าไร
3. ในรอบที่ 3 ผลการเปรียบเทียบคืออะไร
4. ถ้ากำหนดให้ target = 14 จะมีการทำงานทั้งหมดกี่รอบ
5. ถ้ากำหนดให้ target = 7 จะทำงานทั้งหมดกี่รอบ

ตัวอย่างที่ 2 วิธีค้นหาข้อมูลแบบทวิภาค

กำหนดให้ L = L = {“RM”,”Jin”,”SUGA”,”V”,”Jong kook”,”J-Hope”,”Jimin”,} และ target = Jong kook

ขั้นตอนที่ 1 เรียงลำดับข้อมูลจากน้อยไปหามาก และกำหนดค่าดัชนี i ของข้อมูลในรายการ L

i1234567
LJ-HopeJiminJinJong kookRMSUGAV

ขั้นตอนที่ 2 แสดงขั้นตอนวิธีค้นหาข้อมูล target = Jong kook กำหนดให้ n = 7

รอบที่leftrightmidxผลการเปรียบเทียบกับ target
1174Jong kookคืนค่าดัชนี i = 4

วิธีค้นหาข้อมูลแบบทวิภาค (binary search) เป็นวิธีที่มีประสิทธิภาพดีมาก และเป็นแนวคิดหลักในการพัฒนาระบบฐานข้อมูล