Binary search เป็นวิธีที่รวดเร็วในการหาค่าเป้าหมายในลิสต์ที่เรียงลำดับแล้ว คุณตรวจดูค่าตรงกลาง ตัดค่าที่เหลือทิ้งไปครึ่งหนึ่ง แล้วทำซ้ำ ถ้าลิสต์ไม่ได้เรียงลำดับ ตรรกะนี้จะใช้ไม่ได้
สำหรับลิสต์ที่เรียงจากน้อยไปมาก กฎนั้นง่ายมาก: ถ้าค่าตรงกลางน้อยกว่าค่าเป้าหมาย ให้ค้นหาทางขวา ถ้ามากกว่า ให้ค้นหาทางซ้าย เพราะช่วงข้อมูลถูกลดลงประมาณครึ่งหนึ่งทุกครั้ง Binary search จึงใช้เวลา
Binary search ทำงานอย่างไรกับลิสต์ที่เรียงแล้ว
ใช้ลิสต์ที่เรียงแล้วนี้:
สมมติว่าค่าเป้าหมายคือ
เริ่มจากช่วงทั้งหมด ค่าตรงกลางคือ เนื่องจาก ทุกค่าทางซ้ายของ จึงตัดทิ้งได้ และการค้นหาจะดำเนินต่อในช่วง
ตอนนี้ค่าตรงกลางคือ เนื่องจาก ทุกค่าทางขวาของ จึงตัดทิ้งได้ ทำให้ช่วงกลายเป็น
ตอนนี้ค่าตรงกลางคือ ดังนั้นการค้นหาจึงหยุด แนวคิดสำคัญไม่ได้มีแค่ว่าพบค่าเป้าหมายเท่านั้น แต่คือในเวลาเพียงสองครั้งของการเปรียบเทียบ ช่วงตัวเลือกถูกลดจาก ค่าเหลือเพียง
ทำไม Binary search จึงเป็น
การเปรียบเทียบแต่ละครั้งจะตัดตัวเลือกที่เหลือออกไปประมาณครึ่งหนึ่ง หลังจากหนึ่งขั้นตอน จะเหลือประมาณ รายการ หลังจากสองขั้นตอน จะเหลือประมาณ รายการ หลังจาก ขั้นตอน ขนาดที่เหลือจะประมาณ
การค้นหาจะจบเมื่อปริมาณนี้มีค่าประมาณ ดังนั้นจำนวนขั้นตอนจึงเป็นไปตาม
เมื่อนำ ทั้งสองข้าง จะได้ว่า
นี่คือเหตุผลที่ Binary search ขยายขนาดได้ดี การค้นหาแบบเชิงเส้นอาจต้องตรวจมากถึง ครั้ง แต่ Binary search ต้องตรวจเพียงเท่าที่จำเป็นเพื่อหารช่วงให้เล็กลงครึ่งหนึ่งไปเรื่อย ๆ
ตัวอย่างโค้ด Binary search
นี่คือเวอร์ชันแบบวนซ้ำมาตรฐานใน Python:
ต้องการความช่วยเหลือในการแก้โจทย์?
อัปโหลดคำถามของคุณแล้วรับคำตอบแบบทีละขั้นตอนที่ผ่านการตรวจสอบในไม่กี่วินาที
เปิด GPAI Solver →