ในสาขาวิทยาการคอมพิวเตอร์ การค้นหาแบบทวิภาค (อังกฤษ: binary search, half-interval search, logarithmic search,[2] หรือ binary chop) เป็นขั้นตอนวิธีเพื่อหาตำแหน่งของค่าเป้าหมายในแถวลำดับที่ได้มีการเรียงลำดับข้อมูลแล้ว ขั้นตอนวิธีจะการเปรียบเทียบค่าเป้าหมายกับค่าของสมาชิกที่อยู่ตรงกลางของแถวลำดับ ถ้าทั้งสองมีค่าเท่ากันแสดงว่าพบค่าเป้าหมายที่ต้องการ ซึ่งจะทำการคืนค่าตำแหน่งหรือในที่นี้คือ ดัชนี (index) กลับไป มิฉะนั้นถ้าค่าเป้าหมายมีค่าน้อยกว่าค่าของสมาชิกตรงกลางของแถวลำดับ ก็จะทำขั้นตอนวิธีนี้อีกครั้งแต่เปลี่ยนมาค้นหาในแถวลำดับย่อยครึ่งหนึ่งที่มีจุดสิ้นสุดที่ตรงกลางของแถวลำดับหลัก หรือถ้าค่าเป้าหมายมีค่ามากกว่าแล้วจะค้นหาในแถวลำดับย่อยเช่นกันแต่ย้ายจุดเริ่มต้นมาที่ตรงกลางของแถวลำดับหลัก และดำเนินการค้นหาวนซ้ำไปเรื่อย ๆ จนกว่าจะพบค่าเป้าหมาย เมื่อการค้นหาดำเนินการจนแถวลำดับย่อยไม่มีสมาชิกอยู่ แสดงว่าไม่มีสมาชิกในแถวลำดับตัวใดที่มีค่าเท่ากับค่าเป้าหมาย และคืนค่าว่าไม่พบค่าเป้าหมาย
ตัวอย่างการค้นหาแบบทวิภาค โดยมี 7 เป็นค่าเป้าหมาย | |
ประเภท | ขั้นตอนวิธีการค้นหา |
---|---|
โครงสร้างข้อมูล | แถวลำดับ |
ประสิทธิภาพเมื่อเกิดกรณีแย่ที่สุด | () |
ประสิทธิภาพเมื่อเกิดกรณีดีที่สุด | () |
ประสิทธิภาพเมื่อเกิดกรณีทั่วไป | () |
ปริมาณความต้องการพื้นที่เมื่อเกิดกรณีแย่ที่สุด | () |
ในกรณีแย่ที่สุด การค้นหาแบบทวิภาคจะดำเนินงานโดยมีความซับซ้อนของเวลาในรูปลอการิทึม ซึ่งจะมีค่า เมื่อ คือจำนวนแถวลำดับของข้อมูล การค้นหาแบบทวิภาคจะใช้เวลาดำเนินงานน้อยกว่า ยกเว้นในกรณีที่แถวลำดับมีจำนวนน้อย อย่างไรก็ตาม แถวลำดับนั้นจะต้องมีการเรียงลำดับข้อมูลก่อนจึงจะสามารถดำเนินการค้นหาแบบทวิภาคได้ นอกจากการค้นหาแบบทวิภาคแล้ว ยังมีโครงสร้างข้อมูลเฉพาะแบบอื่น ๆ ที่ถูกออกแบบมาเพื่อให้สามารถค้นหาได้อย่างรวดเร็ว เช่น ตารางแฮช ซึ่งสามารถนำมาใช้ในการค้นหาข้อมูลได้มีประสิทธิภาพกว่าการค้นหาแบบทวิภาค อย่างไรก็ตาม การค้นหาแบบทวิภาคยังคงสามารถใช้แก้ปัญหาได้อย่างกว้างขวางมากกว่า เช่น การใช้ในการหาข้อมูลที่มีขนาดเล็กที่สุดหรือใหญ่ที่สุดตัวถัดไปจากค่าเป้าหมายในแถวลำดับ ถึงแม้ข้อมูลนั้นจะไม่ปรากฏในแถวลำดับก็ตาม
การค้นหาแบบทวิภาคมีหลากหลายรูปแบบ โดยเฉพาะอย่างยิ่ง ต้นไม้ค้นหาแบบทวิภาคและต้นไม้แบบบีซึ่งเป็นโครงสร้างข้อมูลที่อ้างอิงมาจากการค้นหาแบบทวิภาค
ที่ช่วยเพิ่มความเร็วในการค้นหาแบบทวิภาคสำหรับข้อมูลที่มีค่าเดียวกันในหลายแถวลำดับ การเรียงซ้อนแบบเศษส่วนช่วยแก้ปัญหาเกี่ยวกับ และด้านอื่น ๆ จำนวนมากได้อย่างมีประสิทธิภาพ นอกจากนั้นยังมี ที่ช่วยขยายขอบเขตการค้นหาแบบทวิภาคได้อย่างไม่จำกัด และการค้นหาแบบทวิภาคจะแบ่งครึ่งชุดข้อมูลที่ต้องการค้นหา ดังนั้นจึงจัดให้การค้นหาแบบทวิภาคเป็นขั้นตอนวิธีแบ่งแยกและเอาชนะ และขั้นตอนวิธีการค้นหา
ขั้นตอนวิธี
การค้นหาแบบทวิภาคสามารถดำเนินการได้ในแถวลำดับที่มีการเรียงลำดับข้อมูลแล้ว โดยจะเริ่มจากการเปรียบเทียบค่าของข้อมูลที่อยู่ตรงกลางของแถวลำดับกับค่าเป้าหมาย หากข้อมูลตรงกลางนั้นมีค่าเท่ากับค่าเป้าหมาย จะทำการคืนค่าตำแหน่งในแถวลำดับของข้อมูลนั้น แต่หากข้อมูลตรงกลางมีค่าน้อยกว่าค่าเป้าหมาย การค้นหาแบบทวิภาคจะถูกดำเนินการต่อไปกับแถวลำดับครึ่งหลัง ในทำนองเดียวกัน หากข้อมูลตรงกลางมีค่ามากกว่าค่าเป้าหมาย การค้นหาก็จะถูกดำเนินการในแถวลำดับครึ่งหน้า ด้วยขั้นตอนวิธีนี้ทำให้สามารถกำจัดข้อมูลได้ครึ่งหนึ่งเสมอในทุกการวนซ้ำ[7]
การวนซ้ำ
กำหนดให้แถวลำดับ มีสมาชิก ตัว โดยแต่ละตัวมีค่าหรือ ซึ่งถูกเรียงลำดับข้อมูลเพื่อให้ มีดัชนีของต้นแถวลำดับ และดัชนีปลายแถวลำดับ และกำหนดค่าเป้าหมาย ซับรูทีนต่อไปนี้ใช้การค้นหาแบบทวิภาคเพื่อหาดัชนีตำแหน่งของ ใน [7]
- กำหนดให้ และ
- ถ้า แล้วการค้นหาจะสิ้นสุดลง และคืนค่าว่าค้นหาไม่สำเร็จ
- กำหนดให้ (ตำแหน่งกึ่งกลางของแถวลำดับที่สนใจ) มีค่าเท่ากับฟังก์ชันพื้นของ หรือหมายถึงจำนวนเต็มที่มากที่สุดที่มีค่าน้อยกว่าหรือเท่ากับ
- ถ้า แล้วกำหนดให้ และกลับไปยังขั้นตอนที่ 2
- ถ้า แล้วกำหนดให้ และกลับไปยังขั้นตอนที่ 2
- ถ้า แสดงว่าการค้นหาเสร็จสิ้น คืนค่า
ขั้นตอนการวนซ้ำนี้จะติดตามขอบเขตการค้นหาด้วยตัวแปร และ และสามารถแสดงผลในรูปรหัสเทียมได้ดังตัวอย่างด้านล่าง โดยชื่อตัวแปรที่ใช้จะคงเดิมเหมือนตัวอย่างด้านบน floor
คือ ฟังก์ชันพื้น และ unsuccessful
แทนค่าเฉพาะที่สื่อถึงความล้มเหลวของการค้นหา[7]
function binary_search(A, n, T) is L := 0 R := n − 1 while L ≤ R do m := floor((L + R) / 2) if A[m] < T then L := m + 1 else if A[m] > T then R := m − 1 else: return m return unsuccessful
ในอีกทางเลือกหนึ่ง ขั้นตอนวิธีนี้อาจใช้ค่าฟังก์ชันเพดานของ ซึ่งจะทำให้ผลลัพธ์เปลี่ยนแปลงไปหากค่าเป้าหมายปรากฏในแถวลำดับมากกว่า 1 ครั้ง
ขั้นตอนทางเลือก
ในขั้นตอนวิธีด้านบนอาศัยการตรวจสอบในทุก ๆ การวนซ้ำว่าค่ากลาง () มีค่าเท่ากับค่าเป้าหมายที่ต้องการ () หรือไม่ กระบวนการบางอย่างได้ละเว้นวิธีการตรวจสอบนี้ในแต่ละการวนซ้ำ ทำให้ขั้นตอนวิธีนั้นจะทำการตรวจสอบนี้เฉพาะเมื่อการวนซ้ำครั้งนั้นเหลือสมาชิกเพียงตัวเดียว (เมื่อ ) ส่งผลให้ใช้เวลาน้อยลงในระหว่างรอบการวนซ้ำ เนื่องจากชุดเปรียบเทียบจะถูกกำจัดทิ้งหนึ่งชุดในหนึ่งรอบการวนซ้ำ ในขณะที่มีจำนวนรอบการวนซ้ำเพิ่มขึ้นเพียงหนึ่งครั้งโดยเฉลี่ยเท่านั้น
ได้ตีพิมพ์กระบวนการแรกที่ละเว้นวิธีการตรวจสอบนี้ในปีค.ศ. 1962- กำหนดให้ และ
- เมื่อ
- กำหนดให้ (ตำแหน่งกึ่งกลางของแถวลำดับที่สนใจ) มีค่าเท่ากับฟังก์ชันเพดานของ หรือหมายถึงจำนวนเต็มที่น้อยที่สุดที่มีค่ามากกว่าหรือเท่ากับ
- ถ้า แล้วกำหนดให้
- มิฉะนั้น ถ้า แล้วกำหนดให้
- เมื่อ การค้นหาจะเสร็จสิ้นลง ถ้า แล้วจะคืนค่า มิฉะนั้นจะคืนค่าว่าไม่สำเร็จ
เมื่อ ceil
คือฟังก์ชันเพดาน รหัสเทียมของกระบวนการนี้ คือ:
function binary_search_alternative(A, n, T) is L := 0 R := n − 1 while L != R do m := ceil((L + R) / 2) if A[m] > T then R := m − 1 else: L := m if A[L] = T then return L return unsuccessful
สมาชิกที่ซ้ำกัน
การค้นหาแบบทวิภาคอาจคืนค่าดัชนีใด ๆ ของสมาชิกที่มีค่าเท่ากับค่าเป้าหมาย ถึงแม้ในแถวลำดับจะมีสมาชิกที่มีค่าซ้ำกัน ยกตัวอย่างเช่น ถ้าแถวลำดับที่ต้องการค้นหาคือ และค่าเป้าหมายคือ แล้วขั้นตอนวิธีอาจคืนค่าที่ถูกต้องได้ทั้งตำแหน่งที่ 4 (ดัชนีที่ 3) หรือตำแหน่งที่ 5 (ดัชนีที่ 4) ซึ่งกระบวนการปกติมักจะคืนค่าตำแหน่งที่ 4 (ดัชนีที่ 3) แต่ก็ไม่ใช่เสมอไปที่ค่าที่ถูกคืนจะเป็นตำแหน่งแรกของสมาชิกที่ซ้ำกัน อย่างไรก็ตาม ในบางครั้งการหาค่าเป้าหมายที่มีสมาชิกที่ซ้ำกันในแถวลำดับก็จำเป็นที่จะต้องหาสมาชิกขอบซ้ายสุดหรือขวาสุด ในตัวอย่างข้างต้น สมาชิกซ้ายสุดที่มีค่าเท่ากับ 4 คือสมาชิกตำแหน่งที่ 4 และสมาชิกขวาสุดที่มีค่าเท่ากับ 4 คือสมาชิกตำแหน่งที่ 5 ซึ่งการค้นหาโดยใช้ขั้นตอนทางเลือกจะคืนค่าดัชนีของสมาชิกขวาสุด (ถ้ามี)[9]
กระบวนการหาสมาชิกซ้ายสุด
ในการจะหาสมาชิกซ้ายสุดสามารถทำได้ดังนี้:
- กำหนดให้ และ
- เมื่อ
- กำหนดให้ (ตำแหน่งกึ่งกลางของแถวลำดับที่สนใจ) มีค่าเท่ากับฟังก์ชันพื้นของ หรือหมายถึงจำนวนเต็มที่มากที่สุดที่มีค่าน้อยกว่าหรือเท่ากับ
- ถ้า แล้วกำหนดให้
- มิฉะนั้น ถ้า แล้วกำหนดให้
- คืนค่า
ถ้า และ แล้ว คือสมาชิกซ้ายสุดที่มีค่าเท่ากับ ในกรณีที่ไม่มีสมาชิกใดในแถวลำดับที่มีค่าเท่ากับ จะถือว่าเป็นอันดับของ ในแถวลำดับ หรือคือจำนวนสมาชิกทั้งหมดในแถวลำดับที่มีค่าน้อยกว่า
เมื่อ floor
คือฟังก์ชันพื้น รหัสเทียมของกระบวนการนี้ คือ:
function binary_search_leftmost(A, n, T): L := 0 R := n while L < R: m := floor((L + R) / 2) if A[m] < T: L := m + 1 else: R := m return L
กระบวนการหาสมาชิกขวาสุด
ในการจะหาสมาชิกขวาสุดสามารถทำได้ดังนี้:
- กำหนดให้ และ
- เมื่อ
- กำหนดให้ (ตำแหน่งกึ่งกลางของแถวลำดับที่สนใจ) มีค่าเท่ากับฟังก์ชันพื้นของ หรือหมายถึงจำนวนเต็มที่มากที่สุดที่มีค่าน้อยกว่าหรือเท่ากับ
- ถ้า แล้วกำหนดให้
- มิฉะนั้น ถ้า แล้วกำหนดให้
- คืนค่า
ถ้า และ แล้ว คือสมาชิกขวาสุดที่มีค่าเท่ากับ ในกรณีที่ไม่มีสมาชิกใดในแถวลำดับที่มีค่าเท่ากับ จะเป็นจำนวนสมาชิกทั้งหมดในแถวลำดับที่มีค่ามากกว่ากว่า
เมื่อ floor
คือฟังก์ชันพื้น รหัสเทียมของกระบวนการนี้ คือ:
function binary_search_rightmost(A, n, T): L := 0 R := n while L < R: m := floor((L + R) / 2) if A[m] > T: R := m else: L := m + 1 return R - 1
การหาคู่ที่ใกล้เคียง
กระบวนการด้านต้นจะดำเนินการหาคู่ที่ถูกต้องซึ่งคือตำแหน่งของสมาชิกที่มีค่าเท่ากับค่าเป้าหมายเท่านั้น อย่างไรก็ตาม การขยายขอบเขตการค้นหาแบบทวิภาคเพื่อดำเนินการหาคู่ที่ใกล้เคียงก็สามารถทำได้โดยง่าย เพราะการค้นหาแบบทวิภาคจะดำเนินการในแถวลำดับที่เรียงลำดับแล้ว ยกตัวอย่างเช่น การค้นหาแบบทวิภาคสามารถใช้เพื่อคำนวณอันดับ (จำนวนสมาชิกที่มีค่าน้อยกว่า) สมาชิกก่อนหน้า (predecessor) สมาชิกตามหลัง (successor) และเพื่อนบ้านใกล้สุดของค่าที่กำหนด ซึ่ง หรือคือการหาจำนวนสมาชิกระหว่างค่าสองค่าก็สามารถดำเนินการได้ด้วยการหาอันดับ 2 ครั้ง[11]
- การหาอันดับสามารถดำเนินการได้ด้วยกระบวนการหาสมาชิกซ้ายสุด โดยจะคืนค่าจำนวนสมาชิกที่มีค่าน้อยกว่าค่าเป้าหมาย[11]
- การหาสมาชิกก่อนหน้าสามารถดำเนินการได้ด้วยการหาอันดับ ถ้าอันดับของค่าเป้าหมายคือ แล้วอันดับของสมาชิกก่อนหน้าคือ
- การหาสมาชิกตามหลังสามารถดำเนินการได้ด้วยกระบวนการหาสมาชิกขวาสุด ถ้ากระบวนการนั้นคืนค่า แล้วอันดับของสมาชิกตามหลังคือ
- เพื่อนบ้านใกล้สุดของค่าเป้าหมายอาจเป็นสมาชิกก่อนหน้าหรือสมาชิกตามหลังก็ได้ ขึ้นอยู่กับว่าค่าไหนใกล้เคียงค่าเป้าหมายมากกว่ากัน
- การหาขอบเขตสามารถทำได้อย่างตรงไปตรงมา โดยเมื่อรู้อันดับของค่าทั้งสอง (สมาชิกก่อนหน้าและสมาชิกตามหลัง) แล้ว จำนวนสมาชิกที่มีค่ามากกว่าหรือเท่ากับค่าสมาชิกก่อนหน้าและน้อยกว่าค่าสมาชิกตามหลังจะเป็นผลต่างระหว่างอันดับของค่าทั้งสอง การนับแบบนี้สามารถมีค่าเพิ่มขึ้นหรือลดลง 1 ค่าได้ขึ้นอยู่กับว่าจุดปลายของขอบเขตควรถูกพิจารณาเป็นส่วนหนึ่งของขอบเขตหรือไม่ และแถวลำดับมีข้อมูลที่เข้าคู่กับจุดปลายเหล่านั้นหรือไม่[13]
ประสิทธิภาพ
ในแง่ของจำนวนการเปรียบเทียบ ประสิทธิภาพของการค้นหาแบบทวิภาคสามารถวิเคราะห์ได้จากการดูการทำงานของต้นไม้แบบทวิภาค โดยปมรากของต้นไม้คือค่ากลางของแถวลำดับ ค่ากลางของครึ่งแถวล่างคือปมลูกด้านซ้ายของราก และค่ากลางของครึ่งแถวบนคือปมลูกด้านขวาของราก ส่วนที่เหลือของต้นไม้ก็มีโครงสร้างที่คล้ายคลึงกับรูปแบบที่กล่าวไปด้านต้น คือ เริ่มจากปมราก การตัดสินใจว่าจะผ่านต้นไม้ย่อยด้านซ้ายหรือขวาจะขึ้นอยู่กับว่า ค่าเป้าหมายมีค่าน้อยหรือมากกว่าปมที่กำลังตัดสินใจอยู่[14]
ในกรณีที่แย่ที่สุด การค้นหาแบบทวิภาคจะถูกวนซ้ำทั้งหมด รอบการเปรียบเทียบ เมื่อ คือสัญลักษณ์ที่แสดงถึงฟังก์ชันพื้นที่ให้ผลลัพธ์เป็นจำนวนเต็มที่มากที่สุดที่น้อยกว่าหรือเท่ากับอาร์กิวเมนต์ (argument) และ คือ เนื่องจากกรณีที่แย่ที่สุดจะเกิดขึ้นเมื่อการค้นหาดำเนินการไปถึงชั้นล่างสุดของต้นไม้ ซึ่งต้นไม้แบบทวิภาคจะมีทั้งหมด ชั้นเสมอ
กรณีที่แย่ที่สุดอาจเกิดขึ้นได้เช่นกันในกรณีที่ค่าเป้าหมายไม่อยู่ในแถวลำดับ ถ้า มีค่าน้อยกว่ากำลังของสองอยู่หนึ่งค่า แล้วกรณีนี้จะเป็นจริงเสมอ มิฉะนั้น การค้นหาอาจวนซ้ำ รอบเมื่อการค้นหาดำเนินการไปถึงชั้นล่างสุดของต้นไม้ อย่างไรก็ตาม หากการค้นหาสิ้นสุดที่ชั้นที่ลึกที่สุดเป็นอันดับสองของต้นไม้ แล้วการค้นหาจะวนซ้ำทั้งหมด รอบ ซึ่งน้อยกว่าจำนวนการวนซ้ำของกรณีที่แย่ที่สุดอยู่หนึ่งครั้ง[15]
หากสมมุติให้สมาชิกทุกตัวมีโอกาสที่จะถูกค้นหาเท่ากัน แล้วการค้นหาแบบทวิภาคจะวนซ้ำทั้งหมด รอบโดยเฉลี่ย เมื่อค่าเป้าหมายมีอยู่ในแถวลำดับ ซึ่งจะประมาณเท่ากับ รอบ ถ้าค่าเป้าหมายไม่อยู่ในแถวลำดับ แล้วการค้นหาแบบทวิภาคจะวนซ้ำ รอบโดยเฉลี่ย โดยสมมุติให้ขอบเขตระหว่างและนอกเหนือจากสมาชิกมีโอกาสที่จะถูกค้นหาเท่ากัน[14]
ในกรณีที่ดีที่สุด หรือเมื่อค่าเป้าหมายคือค่ากลางของแถวลำดับ ตำแหน่งของค่าเป้าหมายจะถูกคืนค่าหลังจากการวนซ้ำเพียงหนึ่งรอบ
ในแง่ของการวนซ้ำ ไม่มีขั้นตอนวิธีการค้นหาใดที่ทำการค้นหาโดยการเปรียบเทียบสมาชิกในแถวลำดับแล้วจะมีประสิทธิภาพทั้งในกรณีเฉลี่ยและกรณีที่แย่ที่สุดดีกว่าการค้นหาแบบทวิภาค ต้นไม้ตัดสินใจแสดงให้เห็นว่าการค้นหาแบบทวิภาคมีจำนวนชั้นน้อยที่สุดเท่าที่จะเป็นไปได้เมื่อจำนวนชั้นที่อยู่สูงกว่าชั้นล่างสุดทั้งหมดของต้นไม้ถูกเติมเต็มหมดแล้ว มิฉะนั้น ขั้นตอนวิธีการค้นหาสามารถกำจัดสมาชิกในหนึ่งการวนซ้ำได้เล็กน้อย ซึ่งจะเป็นการเพิ่มจำนวนการวนซ้ำที่จำเป็นทั้งในกรณีเฉลี่ยและกรณีที่แย่ที่สุด และนั่นจะเป็นกรณีสำหรับขั้นตอนวิธีการค้นหาแบบอื่น ๆ ที่อาศัยการเปรียบเทียบสมาชิก ถึงแม้ว่าขั้นตอนวิธีการค้นหาอื่นอาจดำเนินการได้เร็วกว่าสำหรับค่าเป้าหมายบางค่า แต่ประสิทธิภาพโดยเฉลี่ยก็ยังคงน้อยกว่าการค้นหาแบบทวิภาค เนื่องจากการค้นหาแบบทวิภาคจะมีการแบ่งครึ่งแถวลำดับเสมอ ดังนั้นจึงจะมั่นใจได้ว่าขนาดของแถวลำดับย่อยที่ถูกแบ่งทั้งสองแถวจะมีค่าใกล้เคียงกันมากที่สุด[14] อย่างไรก็ตาม การค้นหาแบบทวิภาคจะสามารถดำเนินการได้ในแถวลำดับที่มีการเรียงลำดับแล้วเท่านั้น
ความซับซ้อนด้านพื้นที่
การค้นหาแบบทวิภาคจำเป็นต้องใช้พอยน์เตอร์ (pointer) 3 อันในการเก็บตำแหน่งที่อยู่ของตัวแปร โดยอาจเป็นดัชนีของแถวลำดับ หรือพอยน์เตอร์ไปยังตำแหน่งที่อยู่หน่วยความจำ โดยไม่คำนึงถึงขนาดของแถวลำดับ ดังนั้น ความซับซ้อนด้านพื้นที่ของการค้นหาแบบทวิภาคคือ ในรูปแบบการคำนวณ
แหล่งที่มาของกรณีเฉลี่ย
จำนวนการวนซ้ำโดยเฉลี่ยของการค้นหาแบบทวิภาคขึ้นอยู่กับความน่าจะเป็นที่สมาชิกแต่ละตัวในแถวลำดับจะถูกค้นหา กรณีเฉลี่ยจะแตกต่างกันไปสำหรับการค้นหาที่สำเร็จและไม่สำเร็จ สำหรับการค้นหาที่สำเร็จจะถูกอนุมานว่าสมาชิกแต่ละตัวในแถวลำดับมีโอกาสที่จะถูกค้นหาเท่ากัน สำหรับการค้นหาที่ไม่สำเร็จจะถูกอนุมานว่าช่วงระหว่างและนอกเหนือจากสมาชิกมีโอกาสที่จะถูกค้นหาเท่ากัน กรณีเฉลี่ยสำหรับการค้นที่สำเร็จคือจำนวนการวนซ้ำเพื่อค้นหาสมาชิกทุกตัวในครั้งเดียว หารด้วย ซึ่งก็คือจำนวนสมาชิกในแถวลำดับ ส่วนกรณีเฉลี่ยสำหรับการค้นหาที่ไม่สำเร็จคือจำนวนการวนซ้ำเพื่อค้นหาสมาชิกในทุกช่วงในครั้งเดียว หารด้วยจำนวน ช่วง[14]
การค้าหาที่สำเร็จ
ในต้นไม้แบบทวิภาค การค้นหาที่สำเร็จสามารถถูกอธิบายได้ด้วยเส้นทางจากรากถึงปมเป้าหมาย เรียกว่า เส้นทางภายใน (internal path) ความยาวของเส้นทางจะเท่ากับจำนวนขอบ (เส้นเชื่อมต่อระหว่างปม) ที่เส้นทางเดินทางผ่าน เมื่อกำหนดให้เส้นทางที่สอดคล้องนั้นมีความยาว จำนวนการวนซ้ำในการค้นจะเท่ากับ โดยนับการวนซ้ำรอบแรกด้วย ความยาวของเส้นทางภายในจะเท่ากับผลรวมของความยาวของเส้นทางภายในที่เฉพาะ เนื่องจากจะมีเพียงหนึ่งเส้นทางที่เดินทางจากรากไปยังปมเดี่ยวใด ๆ ดังนั้น เส้นทางภายในแต่ละเส้นจะเป็นตัวแทนของการค้นหาสมาชิกแต่ละตัวโดยเฉพาะ ถ้ามีสมาชิกทั้งหมด ตัว (ซึ่ง จะเป็นจำนวนเต็มบวก) และความยาวของเส้นทางภายในคือ แล้วจำนวนการวนซ้ำโดยเฉลี่ยสำหรับการค้นหาที่สำเร็จคือ โดยจำนวนการวนซ้ำ 1 ครั้งที่ถูกบวกเข้าไปเพิ่มคือการวนซ้ำครั้งแรก[14]
เนื่องจากการค้นหาแบบทวิภาคคือขั้นตอนวิธีที่ดีที่สุดในการค้นหาแบบเปรียบเทียบ ปัญหานี้จะถูกลดลงเหลือเพียงการคำนวณความยาวของเส้นทางภายในที่น้อยที่สุดของต้นไม้แบบทวิภาคทั้งหมดที่มีปม ปม ซึ่งจะเท่ากับ:[17]
ตัวอย่างเช่น ในแถวลำดับที่มีสมาชิก 7 ตัว หากค่าเป้าหมายคือราก การค้นหาจะต้องใช้การวนซ้ำหนึ่งครั้ง หากเป็นสมาชิกที่อยู่ล่างรากหนึ่งชั้นจะต้องใช้การวนซ้ำสองครั้ง และสมาชิกสี่ตัวล่างสุดจะต้องใช้การวนซ้ำสามครั้ง ในกรณีนี้ ความยาวของเส้นทางภายในคือ:[17]
จากสมการการคำนวณกรณีเฉลี่ย จำนวนการวนซ้ำโดยเฉลี่ยจะเท่ากับ และผลรวม สามารถเขียนให้อยู่ในรูปอย่างง่ายได้ดังนี้:[14]
แทนค่าสมการ ในสมการ :[14]
สำหรับจำนวนเต็ม สมการด้านบนนี้คือสมการของกรณีเฉลี่ยสำหรับการค้นหาที่สำเร็จ
การค้าหาที่ไม่สำเร็จ
การค้นหาที่ไม่สำเร็จสามารถถูกอธิบายได้โดยการแผ่ขยายต้นไม้ด้วยปมภายนอก (external nodes) ซึ่งจะเกิดเป็นต้นไม้ทวิภาคแบบแผ่ขยาย (extended binary tree) ถ้าปมภายในหรือปมที่ปรากฏในต้นไม้มีปมลูกน้อยกว่า 2 ปม แล้วปมลูกเพิ่มเติมหรือปมภายนอกจะถูกเพิ่มในต้นไม้เพื่อให้ปมภายในแต่ละปมมีปมลูกครบ 2 ปม ด้วยวิธีการนี้แล้วจะทำให้การค้นหาที่ไม่สำเร็จสามารถถูกอธิบายได้ด้วยเส้นทางไปยังปมภายนอกที่มีพ่อแม่เป็นปมเดี่ยวเดียวที่มีอยู่ในการวนซ้ำครั้งสุดท้าย เส้นทางภายนอกคือเส้นทางจากรากสู่ปมภายนอก ซึ่งความยาวของเส้นทางภายนอกนั้นจะเท่ากับผลรวมของความยาวของเส้นทางภายนอกที่เฉพาะ ถ้ามีสมาชิกทั้งหมด ตัว (ซึ่ง จะเป็นจำนวนเต็มบวก) และความยาวของเส้นทางภายนอกคือ แล้วจำนวนการวนซ้ำโดยเฉลี่ยสำหรับการค้นหาที่ไม่สำเร็จคือ โดยจำนวนการวนซ้ำ 1 ครั้งที่ถูกบวกเข้าไปเพิ่มคือการวนซ้ำครั้งแรก สมการความยาวของเส้นทางภายนอกถูกหารด้วย แทนที่จะเป็น เพราะมีเส้นทางภายนอกทั้งหมด เส้น ซึ่งคือช่วงระหว่างและนอกเหนือจากสมาชิกในแถวลำดับ[14]
เช่นเดียวกับการค้นหาที่สำเร็จ ปัญหานี้จะถูกลดลงเหลือเพียงการคำนวณความยาวของเส้นทางภายนอกที่น้อยที่สุดของต้นไม้แบบทวิภาคทั้งหมดที่มีปม ปม สำหรับต้นไม้แบบทวิภาคทั้งหมด ความยาวของเส้นทางภายนอกเท่ากับความยาวของเส้นทางภายในบวกด้วย [17] แทนค่าสมการ :[14]
แทนค่าสมการ ในสมการ สมการของกรณีเฉลี่ยสำหรับการค้นหาที่ไม่สำเร็จคือ:[14]
ประสิทธิภาพของขั้นตอนทางเลือก
ในการวนซ้ำแต่ละครั้งของขั้นตอนการค้นหาแบบทวิภาคด้านบนจะมีการเปรียบเทียบหนึ่งหรือสองครั้ง คือการเปรียบเทียบว่าค่าตรงกลางเท่ากับค่าเป้าหมายหรือไม่ในแต่ละการวนซ้ำ สมมุติให้สมาชิกแต่ละตัวในแถวลำดับมีโอกาสที่จะถูกค้นหาเท่ากัน การวนซ้ำแต่ละครั้งจะมีการเปรียบเทียบทั้งหมด 1.5 ครั้งโดยเฉลี่ย ตัวแปรของขั้นตอนวิธีจะตรวจสอบว่าค่าตรงกลางมีค่าเท่ากับค่าเป้าหมายหรือไม่ในตอนท้ายของการค้นหา ซึ่งทำให้ตัวเปรียบเทียบถูกกำจัดทิ้งไปครึ่งหนึ่งโดยเฉลี่ยในแต่ละการวนซ้ำ สิ่งนี้จะช่วยลดเวลาที่ใช้ในการค้นหาต่อจำนวนการวนซ้ำหนึ่งรอบในคอมพิวเตอร์ส่วนมาก อย่างไรก็ตาม การค้นหานี้จะมีจำนวนการวนซ้ำมากที่สุดอย่างแน่นอน โดยเฉลี่ยแล้วจำนวนการวนซ้ำจะเพิ่มขึ้นหนึ่งครั้ง แต่เนื่องจากการวนเปรียบเทียบจะทำทั้งหมด ครั้งในกรณีที่แย่ที่สุด ประสิทธิภาพที่เพิ่มขึ้นเล็กน้อยในแต่ละการวนซ้ำจึงไม่สามารถทดแทนจำนวนการวนซ้ำที่เพิ่มขึ้นได้ (ยกเว้นในกรณีที่ มีค่ามาก ๆ)[18]
ระยะเวลาดำเนินการและแคชที่ใช้
ในการวิเคราะห์ประสิทธิภาพของการค้นหาแบบทวิภาคจะต้องพิจารณาระยะเวลาที่ใช้ในการเปรียบเทียบสมาชิกสองตัว สำหรับจำนวนเต็มและสตริง (string) ระยะเวลาที่ใช้ในการดำเนินการจะเพิ่มขึ้นแปรผันตรงกับความยาวของการเข้ารหัสสมาชิกหรือก็คือจำนวนบิตของสมาชิก ตัวอย่างเช่น การเปรียบเทียบคู่ของจำนวนเต็มเฉพาะค่าบวกขนาด 64 บิทจะอาศัยการเปรียบเทียบเป็นสองเท่าของการเปรียบเทียบคู่ของจำนวนเต็มเฉพาะค่าบวกขนาด 32 บิท กรณีที่แย่ที่สุดจะเกิดขึ้นเมื่อจำนวนเต็มทั้งสองมีค่าเท่ากัน ซึ่งระยะเวลาดำเนินการนี้จะยิ่งมากอย่างมีนัยสำคัญเมื่อความยาวของการเข้ารหัสสมาชิกมีค่ามาก เช่น การเปรียบเทียบข้อมูลชนิดจำนวนเต็มขนาดใหญ่หรือสตริงแบบยาว ซึ่งจะทำให้การเปรียบเทียบข้อมูลมีราคาแพง นอกจากนั้น การเปรียบเทียบค่าของจำนวนจุดลอยตัว (การแทนจำนวนจริงแบบดิจิทัลที่พบเห็นบ่อยที่สุด) จะแพงกว่าการเปรียบเทียบจำนวนเต็มและสตริงแบบสั้น
ในสถาปัตยกรรมคอมพิวเตอร์ส่วนมาก หน่วยประมวลผลกลางจะมีแคชของฮาร์ดแวร์แยกจากแรม เนื่องจากอยู่ในหน่วยประมวลผลกลาง แคชจะเข้าถึงได้รวดเร็วกว่าแต่ก็กักเก็บข้อมูลได้น้อยกว่าแรม ดังนั้น หน่วยประมวลผลกลางส่วนมากจะกักเก็บตำแหน่งหน่วยความจำ (memory location) ที่ถูกเข้าถึงเมื่อไม่นานมานี้และที่อยู่ใกล้เคียงกัน ยกตัวอย่างเช่น เมื่อเข้าถึงสมาชิกของแถวลำดับ สมาชิกนั้นอาจถูกกักเก็บควบคู่ไปกับสมาชิกที่อยู่ใกล้เคียงกับมันในแรม ทำให้สามารถเข้าถึงสมาชิกที่มีดัชนีใกล้เคียงกัน ( ) ได้อย่างรวดเร็ว ในแถวลำดับที่มีการเรียงลำดับแล้ว การค้นหาแบบทวิภาคสามารถกระโดดไปยังตำแหน่งหน่วยความจำที่อยู่ไกลได้ถ้าแถวลำดับนั้นมีขนาดใหญ่ ต่างจากขั้นตอนวิธีอื่น เช่น และ ในตารางแฮช ซึ่งเข้าถึงสมาชิกได้ตามลำดับเท่านั้น ในระบบส่วนใหญ่ สิ่งนี้อาจเพิ่มระยะเวลาดำเนินการของการค้นหาแบบทวิภาคในแถวลำดับขนาดใหญ่ได้เล็กน้อย
การค้าหาแบบทวิภาคเปรียบเทียบกับการค้นหาแบบอื่น
การใช้การค้นหาแบบทวิภาคในการดำเนินการเพิ่มและลบสมาชิกในแถวลำดับที่มีการเรียงลำดับไว้แล้วนับเป็นวิธีการที่ไม่มีประสิทธิภาพ เนื่องจากใช้เวลาถึง ในการดำเนินการแต่ละครั้ง นอกจากนั้นแล้ว แถวลำดับที่มีการเรียงลำดับแล้วยังมีการใช้หน่วยความจำที่ซับซ้อน โดยเฉพาะเมื่อสมาชิกถูกเพิ่มเข้าไปในแถวลำดับบ่อย ๆ [21] ดังนั้นจึงมีโครงสร้างข้อมูลอื่น ๆ ที่สามารถดำเนินการเพิ่มและลบได้มีประสิทธิภาพมากกว่า การค้นหาแบบทวิภาคสามารถใช้เพื่อการดำเนินการหาคู่ที่ถูกต้องและการตรวจสอบการเป็นสมาชิกของเซต (ตรวจสอบว่าค่าเป้าหมายอยู่ในกลุ่มสมาชิกข้อมูลหรือไม่) ซึ่งถึงแม้โครงสร้างข้อมูลอื่น ๆ จะสามารถดำเนินการหาคู่ที่ถูกต้องและตรวจสอบการเป็นสมาชิกของเซตได้รวดเร็วกว่าการค้นหาแบบทวิภาค แต่การค้นหาแบบทวิภาคสามารถใช้หาคู่ที่ใกล้เคียงได้อย่างมีประสิทธภาพในขณะที่การค้นหาแบบอื่น ๆ ไม่สามารถทำได้ ซึ่งการค้นหาแบบทวิภาคใช้เวลา โดยไม่คำนึงถึงชนิดของโครงสร้างข้อมูล นอกจากนั้น ยังมีการดำเนินการบางอย่าง เช่น การหาค่าที่มากและน้อยที่สุด ที่สามารถดำเนินการได้อย่างมีประสิทธิภาพในแถวลำดับที่มีการเรียงลำดับแล้ว[11]
การค้นหาเชิงเส้น
[24]ขั้นตอนวิธีการเรียงลำดับทั้งหมดมีพื้นฐานมาจากการเปรียบเทียบค่าของสมาชิก เช่น ควิกซอร์ต และการเรียงลำดับแบบผสาน ซึ่งใช้การเปรียบเทียบทั้งหมด ในกรณีที่แย่ที่สุด[25] การค้นหาแบบทวิภาคสามารถใช้หาคู่ที่ใกล้เคียงได้อย่างมีประสิทธภาพในขณะที่การค้นหาเชิงเส้นไม่สามารถทำได้ นอกจากนั้น การดำเนินการ เช่น การหาสมาชิกที่มีค่ามากและน้อยที่สุด สามารถทำได้อย่างมีประสิทธิภาพในแถวลำดับที่มีการเรียงลำดับแล้วเท่านั้น[26]
เป็นขั้นตอนวิธีการค้นหาที่เรียบง่าย โดยจะใช้วิธีการตรวจสอบข้อมูลทุก ๆ ตัวจนกว่าจะเจอค่าเป้าหมาย การค้นหาเชิงเส้นสามารถทำได้ในรายการโยง (linked list) ซึ่งสามารถดำเนินการเพิ่มหรือลบสมาชิกได้รวดเร็วกว่าแถวลำดับ การค้นหาแบบทวิภาคดำเนินการการค้นหาในแถวลำดับได้รวดเร็วกว่าการค้นหาเชิงเส้น (ยกเว้นแถวลำดับที่มีขนาดสั้น) แต่แถวลำดับนั้นจะต้องมีการเรียงลำดับมาก่อนต้นไม้
ต้นไม้ค้นหาแบบทวิภาค คือโครงสร้างข้อมูลต้นไม้แบบทวิภาคที่มีการดำเนินการโดยอาศัยหลักการของการค้นหาแบบทวิภาค ระเบียนในต้นไม้สามารถถูกค้นหาได้โดยใช้ขั้นตอนวิธีที่คล้ายกับการค้นหาแบบทวิภาค โดยใช้เวลาโดยเฉลี่ยในรูปฟังก์ชันอัลกอริทึม การเพิ่มและลบข้อมูลในต้นไม้ค้นหาแบบทวิภาคก็ใช้เวลาโดยเฉลี่ยในรูปฟังก์ชันอัลกอริทึมเช่นเดียวกัน ซึ่งวิธีนี้จะใช้เวลาน้อยกว่าเวลาในรูปแบบเชิงเส้นที่ใช้ในการเพิ่มหรือลบข้อมูลในแถวลำดับที่มีการเรียงลำดับแล้ว และต้นไม้แบบทวิภาคยังสามารถดำเนินการทุกอย่างได้เหมือนกับที่สามารถทำในแถวลำดับที่มีการเรียงลำดับแล้ว รวมไปถึงการหาขอบเขตและค่าที่ใกล้เคียง[27]
อย่างไรก็ตาม ต้นไม้ค้นหาแบบทวิภาคมักจะมีความไม่สมดุลระหว่างสองข้าง ทำให้มีประสิทธิภาพในการค้นหาน้อยกว่าการค้นหาแบบทวิภาคเล็กน้อย สิ่งนี้ยังนำไปใช้ได้กับต้นไม้ค้นหาแบบทวิภาคที่มีโครงสร้างปรับสมดุลเองได้ หรือคือต้นไม้ค้นหาแบบทวิภาคที่สามารถทำให้ปมของตนเองมีความสมดุลได้ เพราะ ต้นไม้ที่มีจำนวนชั้นน้อยที่สุดเท่าที่จะเป็นไปได้แทบจะไม่ถูกสร้างขึ้นมาเลย นอกเหนือจากต้นไม้ค้นหาแบบทวิภาคที่มีโครงสร้างปรับสมดุลเองได้แล้ว ต้นไม้มักจะมีความไม่สมดุลอย่างรุนแรงเนื่องจากมีจำนวนปมภายในที่มีปมลูกครบสองปมน้อยมาก ทำให้ระยะเวลาในการค้นหาโดยเฉลี่ยและในกรณีที่แย่ที่สุดใกล้เคียงกับเวลาที่ใช้ในกรณีที่มีการเปรียบเทียบ ครั้ง นอกจากนั้นต้นไม้ค้นหาแบบทวิภาคยังใช้พื้นที่เก็บข้อมูลมากกว่าแถวลำดับที่เรียงลำดับแล้ว[29]
ต้นไม้ค้นหาแบบทวิภาคจะยืมหน่วยความจำภายนอกของฮาร์ดดิสก์เพื่อใช้ในการค้นหาแบบรวดเร็วเนื่องจากต้นไม้ค้นหาแบบทวิภาคสามารถจัดโครงสร้างในระบบแฟ้มข้อมูลได้ ซึ่งต้นไม้แบบบีคือการสรุปวิธีการการจัดระเบียบต้นไม้นี้ โดยต้นไม้แบบบีมักถูกใช้ในการจัดระเบียบพื้นที่จัดเก็บข้อมูลระยะยาว เช่น ฐานข้อมูล และแฟ้มข้อมูล[30][31]
แฮชชิง
โดยปกติแล้วสำหรับการใช้แถวลำดับแบบจับคู่ ตารางแฮช ซึ่งคือโครงสร้างข้อมูลที่เชื่อมโยงคีย์กับ โดยใช้ฟังก์ชันแฮช จะสามารถนำแถวลำดับแบบจับคู่ไปใช้ได้รวดเร็วกว่าการค้นหาแบบทวิภาคในแถวลำดับระเบียนที่มีการเรียงลำดับแล้ว[32] การใช้ตารางแฮชส่วนมากใช้เวลาโดยเฉลี่ยแบบถัวเฉลี่ย อย่างไรก็ตาม แฮชชิงไม่สามารถใช้ในการหาคู่ที่ใกล้เคียง เช่น การคำนวณหาค่าที่น้อยที่สุดตัวถัดไป ค่าที่มากที่สุดตัวถัดไป และคีย์ที่ใกล้เคียงที่สุดได้ เนื่องจากหากการค้นหาไม่สำเร็จจะมีการคืนค่าได้เพียงว่าค่าเป้าหมายนั้นไม่มีอยู่ในระเบียนใด ๆ ดังนั้น การค้นหาแบบทวิภาคจึงถือเป็นวิธีการที่ดีที่สุดสำหรับการหาคู่ประเภทนั้น เนื่องจากใช้เวลาในรูปฟังก์ชันลอการิทึมเท่านั้น นอกจากนั้น การดำเนินการบางอย่าง เช่น การหาสมาชิกที่มีค่ามากหรือน้อยที่สุด สามารถทำได้อย่างมีประสิทธิภาพในแถวลำดับที่มีการเรียงลำดับแล้ว แต่ไม่สามารถทำได้ในตารางแฮช
ขั้นตอนวิธีการตรวจสอบการเป็นสมาชิกของเซต
ปัญหาที่เกี่ยวข้องกับการค้นหาคือ การตรวจสอบการเป็นสมาชิกของเซต ขั้นตอนวิธีที่มีฟังก์ชันการค้นหา เช่น การค้นหาแบบทวิภาค สามารถนำมาใช้ในการตรวจสอบการเป็นสมาชิกของเซตได้ นอกจาการค้นหาแบบทวิภาคแล้วยังมีขั้นตอนวิธีอื่น ๆ ที่เหมาะสมกับการตรวจสอบการเป็นสมาชิกของเซตโดยเฉพาะมากกว่า คือโครงสร้างข้อมูลที่เรียบง่ายและเป็นประโยชน์ดีสุดเมื่อขอบเขตของคีย์มีจำกัด โดยแถวลำดับบิตจะเก็บข้อมูลโดยใช้พื้นที่น้อยที่สุดในรูปแบบของบิต ซึ่งบิตแต่ละตัวก็จะเป็นตัวแทนของคีย์แต่ละตัวในขอบเขตของคีย์ แถวลำดับบิตมีการดำเนินการที่รวดเร็วมาก โดยใช้เวลาเพียง เท่านั้น [36] นอกจากแถวลำดับบิตแล้ว Judy1 ของแถวลำดับจูดี้ก็ยังสามารถจัดเก็บคีย์ขนาด 64 บิตได้อย่างมีประสิทธิภาพ
สำหรับผลลัพธ์ที่ใกล้เคียง ตัวกรองของบลูม หรือคือโครงสร้างข้อมูลที่เกี่ยวกับความเป็นไปได้ซึ่งอาศัยการแฮชชิง จะกักเก็บเซตของคีย์โดยการเข้ารหัสคีย์ซึ่งจะอาศัย และฟังก์ชันแฮชหลายฟังก์ชัน ส่วนมากแล้ว ตัวกรองของบลูมจะใช้พื้นที่กักเก็บข้อมูลน้อยกว่าแถวลำดับบิตในขณะที่ก็ใช้เวลาดำเนินการไม่ได้นานกว่า โดยหากอาศัยฟังก์ชันแฮชทั้งหมด ฟังก์ชัน การตรวจสอบการเป็นสมาชิกของเซตจะใช้เวลาดำเนินการเพียง เท่านั้น อย่างไรก็ตาม ตัวกรองของบลูมยังคงมีปัญหาเรื่องผลบวกลวงอยู่
โครงสร้างข้อมูลอื่น
ยังมีโครงสร้างข้อมูลอื่น ๆ อีกที่มีการปรับปรุงจากการค้นหาแบบทวิภาคทั้งในด้านการค้นหาและการดำเนินการอื่น ๆ ที่สามารถทำได้ในแถวลำดับที่มีการเรียงลำดับแล้ว ตัวอย่างเช่น โครงสร้างข้อมูลแบบเฉพาะด้าน เช่น
และ สามารถดำเนินการค้นหา การหาคู่ที่ใกล้เคียง และการดำเนินการอื่น ๆ ที่สามารถทำได้ในแถวลำดับที่มีการเรียงลำดับแล้ว ได้อย่างมีประสิทธิภาพมากกว่าการค้นหาแบบทวิภาค โครงสร้างข้อมูลแบบเฉพาะด้านเหล่านี้สามารถดำเนินการได้รวดเร็วกว่า เพราะใช้ประโยชน์จากคุณสมบัติของคีย์ที่มีแอททริบิวต์ (attribute) บางอย่าง (โดยปกติจะเป็นคีย์ที่เป็นจำนวนเต็มที่มีขนาดเล็ก) ดังนั้นสำหรับคีย์ที่ไม่มีแอททริบิวต์เหล่านั้นก็จะทำให้ใช้เวลาและพื้นที่จัดเก็บข้อมูลมากขึ้น ตราบใดที่คีย์นั้นสามารถจัดลำดับได้ การดำเนินการเหล่านี้ก็สามารถดำเนินการได้โดยไม่ต้องคำนึงถึงคีย์ ซึ่งจะมีประสิทธิภาพอย่างต่ำเทียบเท่ากับประสิทธิภาพในแถวลำดับที่มีการเรียงลำดับไว้แล้ว โครงสร้างข้อมูลบางอย่าง เช่น แถวลำดับจูดี้ สามารถใช้วิธีการหลายอย่างร่วมกันเพื่อลดปัญหาที่ได้กล่าวไปในขณะที่ก็ยังคงประสิทธิภาพและความสามารถในการดำเนินการหาคู่ที่ใกล้เคียงไว้อยู่การค้นหาแบบอื่น
การค้นหาแบบทวิภาคอย่างมีเอกรูป
การค้นหาแบบทวิภาคอย่างมีเอกรูปจะเก็บค่าผลต่างระหว่างดัชนีของค่ากลางในการวนซ้ำครั้งปัจจุบันและดัชนีของค่ากลางในการวนซ้ำครั้งต่อไป ซึ่งต่างจากการค้นหาแบบทวิภาคที่เก็บค่าดัชนีของขอบเขตบนและล่าง โดย[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] แล้วค่ากลาง () คือ 6 ในขณะที่ค่ากลางของแถวลำดับย่อยฝั่งซ้ายหรือ ([1, 2, 3, 4, 5]) คือ 3 และค่ากลางของแถวลำดับย่อยฝั่งขวาหรือ ([7, 8, 9, 10, 11]) คือ 9 การค้นหาแบบทวิภาคอย่างมีเอกรูปจะเก็บค่า 3 เนื่องจากดัชนีค่ากลางตัวต่อไปทั้งสองต่างก็มีผลต่างกับ 6 เท่ากัน[40] เพื่อที่จะลดพื้นที่ที่ใช้ในการค้นหา ขั้นตอนวิธีจะบวกหรือลบผลต่างดังกล่าวจากดัชนีของค่ากลางตัวปัจจุบัน การค้นหาแบบทวิภาคอย่างมีเอกรูปอาจดำเนินการได้รวดเร็วเมื่อถูกใช้ในระบบที่ไม่สามารถคำนวณค่ากลางได้อย่างมีประสิทธิภาพนัก เช่น ใน [41]
ที่เก็บค่าผลต่างนี้จะถูกคำนวณไว้ล่วงหน้า ตัวอย่างเช่น ถ้าแถวลำดับที่กำลังถูกค้นหาคือการค้นหาแบบเอกซ์โพเนนเชียล
การค้นหาแบบเอกซ์โพเนนเชียลขยายขอบเขตจากการค้นหาแบบทวิภาคทำให้สามารถดำเนินการได้ในรายการที่ไม่จำกัดขอบเขต โดยจะเริ่มต้นจากการค้นหาสมาชิกตัวแรกที่ดัชนีอยู่ในรูปกำลังของสองและมีค่ามากกว่าค่าเป้าหมาย จากนั้นจึงกำหนดดัชนีของค่านั้นให้เป็นขอบเขตบน และเริ่มดำเนินการค้นหาแบบทวิภาค การค้นหาสมาชิกตัวแรกที่ตรงตามเงื่อนไขจะมีการวนซ้ำทั้งหมด ครั้ง ก่อนที่จะเริ่มการค้นหาแบบทวิภาคซึ่งจะมีการวนซ้ำสูงสุด ครั้ง เมื่อ คือตำแหน่งของค่าเป้าหมาย การค้นหาแบบเอกซ์โพเนนเชียลสามารถทำงานได้ในรายการที่มีการจำกัดขอบเขตเช่นกัน แต่จะมีประสิทธิภาพดีกว่าการค้นหาแบบทวิภาคก็ต่อเมื่อค่าเป้าหมายอยู่ใกล้กับบริเวณเริ่มต้นของแถวลำดับ
การค้นหาโดยการประมาณช่วง
การค้นหาโดยการประมาณช่วงใช้การประมาณตำแหน่งของค่าเป้าหมายโดยพิจารณาจากสมาชิกที่มีค่าสูงสุดและต่ำสุดในแถวลำดับ และขนาดของแถวลำดับ แตกต่างจากการค้นหาแบบก่อนหน้าที่ใช้การคำนวณค่ากลางเป็นหลัก เนื่องจากอาศัยหลักการที่ว่า ค่ากลางมักไม่ใช่การคาดการณ์ที่ดีที่สุดในหลายกรณีที่เป็นไปได้ เช่น ในกรณีที่ค่าเป้าหมายอยู่ใกล้เคียงกับค่าปลายสุดของแถวลำดับ[43]
ฟังก์ชันการประมาณช่วงที่นิยมใช้กัน คือ คือแถวลำดับ คือขอบเขตล่างและขอบเขตบนตามลำดับ และ คือค่าเป้าหมาย จะได้ว่าค่าเป้าหมายจะอยู่ห่างจาก และ เป็นระยะประมาณ เมื่อใช้การประมาณค่าในช่วงเชิงเส้นในแถวลำดับที่มีการแจกแจงของสมาชิกแบบเอกรูปหรือใกล้เคียงกับเอกรูป การค้นหาโดยการประมาณช่วงจะทำการเปรียบเทียบทั้งหมด ครั้ง[43][44]
กำหนดให้ในการทำงานจริง การค้นหาโดยการประมาณช่วงจะดำเนินการช้ากว่าการค้นหาแบบทวิภาคในแถวลำดับที่มีขนาดเล็ก เนื่องจากการค้นหาโดยการประมาณช่วงจะต้องมีการคำนวณเพิ่มเติม แต่เมื่อขนาดแถวลำดับเพิ่มขึ้น อัตราการเพิ่มขึ้นของความซับซ้อนของเวลาในการค้นหาโดยการประมาณช่วงจะช้ากว่าการค้นหาแบบทวิภาค อย่างไรก็ตาม สิ่งนี้สามารถชดเชยได้ในกรณีที่แถวลำดับมีขนาดใหญ่มากเท่านั้น[43]
การเรียงซ้อนแบบเศษส่วน
การเรียงซ้อนแบบเศษส่วน คือเทคนิคที่ใช้ในการเพิ่มความเร็วในการค้นหาแบบทวิภาคสำหรับข้อมูลที่มีค่าเดียวกันในหลายแถวลำดับที่มีการเรียงลำดับแล้ว การค้นหาแยกกันในแต่ละแถวลำดับจะใช้เวลา เมื่อ คือจำนวนแถวลำดับทั้งหมด การเรียงซ้อนแบบเศษส่วนจะลดเวลาการดำเนินการนั้นเหลือเพียง โดยอาศัยการเก็บข้อมูลเกี่ยวกับสมาชิกแต่ละตัวและตำแหน่งของมันในแถวลำดับอื่นลงไปในแถวลำดับแต่ละอัน
แต่เดิม การเรียงซ้อนแบบเศษส่วนถูกพัฒนามาเพื่อแก้ปัญหาเกี่ยวกับการทำเหมืองข้อมูล และในอินเทอร์เน็ตโพรโทคอล
ได้อย่างมีประสิทธิภาพ ปัจจุบันการเรียงซ้อนแบบเศษส่วนยังถูกนำไปประยุกต์ใช้ในด้านอื่น ๆ อีก เช่น ในการประยุกต์ใช้ในกราฟ
การค้นหาแบบทวิภาคถูกนำมาใช้กับกราฟบางประเภท โดยค่าเป้าหมายนั้นจะถูกเก็บในรูปของโหนดแทนสมาชิกในแถวลำดับ ต้นไม้ค้นหาแบบทวิภาคคือหนึ่งในตัวอย่างนั้น เมื่อโหนดของต้นไม้ถูกตรวจสอบ ขั้นตอนวิธีจะได้รู้ว่าโหนดนั้นคือเป้าหมายหรือไม่ หรือค่าเป้าหมายจะอยู่ในต้นไม้ย่อยต้นไหน อย่างไรก็ตาม การค้นหาแบบทวิภาคสามารถนำไปใช้ได้ในกราฟอื่นได้อีก เช่น ในกราฟแบบไม่มีทิศทางและถ่วงน้ำหนักเชิงบวก (an undirected, positively weighted graph) ขั้นตอนวิธีจะทราบจากการตรวจสอบโหนดใด ๆ ว่า โหนดนั้นมีค่าเท่ากับค่าเป้าหมายหรือไม่ ถ้าไม่แล้วเส้นเชื่อม (incident edge) ใดที่เป็นเส้นทางที่สั้นที่สุดจากโหนดที่กำลังตรวจสอบอยู่ไปยังโหนดเป้าหมาย เช่นเดียวกัน ต้นไม้ค้นหาแบบทวิภาคจะพิจารณาเส้นเชื่อมไปยังต้นไม้ย่อยฝั่งซ้ายและฝั่งขวาเมื่อโหนดที่กำลังตรวจสอบอยู่มีค่าไม่เท่ากับค่าเป้าหมาย สำหรับกราฟแบบไม่มีทิศทางและถ่วงน้ำหนักเชิงบวกทุกกราฟ ในกรณีที่แย่ที่สุด ขั้นตอนวิธีจะใช้การตรวจสอบทั้งหมด ครั้งจนกว่าจะเจอโหนดเป้าหมาย
Noisy binary search
ขั้นตอนวิธีของ Noisy binary search ถูกใช้แก้ปัญหาในกรณีที่ขั้นตอนวิธีไม่สามารถเปรียบเทียบค่าของสมาชิกในแถวลำดับได้อย่างน่าเชื่อถือ ในการเปรียบเทียบแต่ละคู่สมาชิกนั้นมีโอกาสที่ขั้นตอนวิธีจะเปรียบเทียบได้ผลลัพธ์ที่ไม่ถูกต้อง Noisy binary search สามารถค้นหาตำแหน่งที่ถูกต้องของเป้าหมายได้โดยมีความน่าจะเป็นที่ควบคุมความน่าเชื่อถือของผลลัพธ์ที่ได้ ทุก ๆ Noisy binary search จะต้องมีการเปรียบเทียบอย่างน้อย ครั้งโดยเฉลี่ย โดยที่ คือ และ คือ ความน่าจะเป็นที่กระบวนการนั้นจะคืนค่าตำแหน่งเป้าหมายที่ไม่ถูกต้อง ปัญหา noisy binary search เช่น คือการถาม ที่แตกต่างกันเพื่อทายวัตถุหรือตัวเลขนั้น โดยคำตอบที่ได้รับจากคำถามนั้นอาจไม่ใช่คำตอบที่ถูกต้อง
การค้นหาแบบทวิภาคควอนตัม
การดำเนินการค้นหาแบบทวิภาคในคอมพิวเตอร์แบบดั้งเดิมจะใช้การวนซ้ำทั้งหมด ครั้งในกรณีที่แย่ที่สุด สำหรับการค้นหาแบบทวิภาคจะมีการตรวจสอบทั้งหมด ครั้ง (แทนจำนวนการวนซ้ำในกระบวนการดั้งเดิม) แต่ตัวประกอบคงที่ (constant factor) จะมีค่าน้อยกว่าหนึ่ง ทำให้มีค่าความซับซ้อนของเวลาน้อยลงเมื่อทำงานใน กระบวนการของการค้นหาแบบทวิภาคควอนตัมที่แท้จริง หรือคือกระบวนการที่จะคืนค่าผลลัพธ์ที่ถูกต้องเสมอ จะต้องมีการตรวจสอบอย่างน้อย ครั้งในกรณีที่แย่ที่สุด เมื่อ คือ ลอการิทึมธรรมชาติ กระบวนการของการค้นหาแบบทวิภาคควอนตัมที่แท้จริงบางอันดำเนินการตรวจสอบทั้งหมด ครั้งในกรณีที่แย่ที่สุด ในทางตรงกันข้าม คือขั้นตอนวิธีควอนตัมที่ดีที่สุดสำหรับการค้นหาสมาชิกในรายการแบบไม่มีลำดับ โดยใช้การตรวจสอบทั้งหมด ครั้ง
ประวัติ
แนวคิดเรื่องการเรียงลำดับข้อมูลในรายการเพื่อการค้นหาที่รวดเร็วขึ้นถูกคิดค้นตั้งแต่ในยุคโบราณ ตัวอย่างที่เก่าแก่ที่สุดที่เป็นที่รู้จักกันคือ แผ่นจารึก Inakibit-Anu ในอาณาจักรบาบิโลนในช่วง 200 ปีก่อนคริสตศักราช แผ่นจารึกประกอบด้วยตัวเลขส่วนกลับของมันซึ่งถูกเรียงลำดับตาม ทำให้การค้นหาข้อมูลเฉพาะทำได้ง่ายขึ้น นอกจากนั้น รายการชื่อหลายรายการที่ถูกเรียงลำดับตามตัวอักษรตัวแรกของชื่อถูกค้นพบที่หมู่เกาะอีเจียน คาทอลิก ซึ่งคือพจนานุกรมภาษาละตินที่เขียนเสร็จในปีค.ศ. 1286 คือผลงานชิ้นแรกที่มีการอธิบายกฎการเรียงลำดับคำศัพท์ตามลำดับตัวอักษร ตรงข้ามกับการเรียงเพียงสองสามตัวอักษรแรก[9]
500 ตัวและในปีค.ศ. 1946 [9] ในปีค.ศ. 1957 ได้ตีพิมพ์วิธีการแรกสำหรับการค้นหาโดยการประมาณช่วง[9] ขั้นตอนวิธีการค้นหาแบบทวิภาคที่ถูกตีพิมพ์ทุกอันล้วนแต่ทำงานได้ในแถวลำดับที่มีขนาดน้อยกว่ากำลังของสองเท่ากับหนึ่ง จนกระทั่งในปีค.ศ. 1960 เมื่อ ได้ตีพิมพ์ขั้นตอนวิธีการค้นหาแบบทวิภาคที่สามารถทำงานได้ในแถวลำดับทุกประเภท ในปีค.ศ. 1962 Hermann Bottenbruch ได้นำเสนอการนำ ไปใช้ในการค้นหาแบบทวิภาคที่วางการเปรียบเทียบความเท่ากันในกระบวนการท้ายสุด ซึ่งจะเพิ่มจำนวนการวนซ้ำโดยเฉลี่ยไปเท่ากับหนึ่ง แต่ลดจำนวนการเปรียบเทียบในหนึ่งการวนซ้ำเหลือเพียงหนึ่งครั้งเท่านั้นการค้นหาแบบทวิภาคอย่างมีเอกรูปถูกพัฒนาโดย A. K. Chandra จากมหาวิทยาลัยสแตนฟอร์ดในปีค.ศ. 1971[9] ในปีค.ศ. 1986 และ ได้คิดค้น เพื่อแก้ปัญหาการค้นหาเกี่ยวกับ
ได้กล่าวถึงการค้นหาแบบทวิภาคเป็นครั้งแรกใน ซึ่งคือหลักสูตรมหาวิทยาลัยพื้นฐานในด้านการคำนวณปัญหาการนำไปใช้งาน
ถึงแม้แนวคิดพื้นฐานของการค้นหาแบบทวิภาคจะค่อนข้างตรงไปตรงมา แต่เนื้อหาของมันอาจซับซ้อนอย่างน่าประหลาดใจ
เมื่อ[62] การศึกษาที่ถูกตีพิมพ์ในปีค.ศ. 1988 พบว่าจากตำราเรียน 20 เล่ม มีเพียง 5 เล่มที่แสดงรหัส (code) ที่ถูกต้องสำหรับการค้นหาแบบทวิภาค ยิ่งไปกว่านั้น การใช้งานการค้นหาแบบทวิภาคของเบนท์ลีย์ซึ่งถูกตีพิมพ์ในหนังสือชื่อ Programming Pearls ในปีค.ศ. 1986 กลับมี ที่ไม่ถูกตรวจพบกว่า 20 ปี คลังโปรแกรมภาษาจาวาสำหรับการค้นหาแบบทวิภาคก็มี overflow bug แบบเดียวกันมานานมากกว่า 9 ปี
ได้มอบหมายการค้นหาแบบทวิภาคให้เป็นงานในชั้นเรียนสำหรับโปรแกรมเมอร์มืออาชีพ เขาค้นพบว่าหลังการทำงานหลายชั่วโมง กว่า 90% ของโปรแกรมเมอร์ไม่สามารถหาคำตอบที่ถูกต้องได้ หลัก ๆ แล้วเป็นเพราะว่าโปรแกรมไม่สามารถทำงานได้ หรือไม่ก็คืนค่าที่ไม่ถูกต้องในการทดสอบในการใช้งานจริง ตัวแปรที่แทนค่าดัชนีมักจะมีขนาดคงที่ (จำนวนเต็ม) ซึ่งอาจทำให้เกิดปัญหา แล้ว อาจมีค่าเกินขอบเขตของจำนวนเต็มของชนิดข้อมูลที่ใช้เก็บค่ากลางได้ ถึงแม้ และ จะมีค่าอยู่ภายในขอบเขตก็ตาม ถ้า และ ไม่เป็นลบ เราอาจหลีกเลี่ยงปัญหานี้ด้วยการคำนวณค่ากลางด้วยสมการ แทน
ในแถวลำดับที่มีขนาดใหญ่ได้ ถ้าค่ากลางมีค่าเท่ากับการวนอย่างไม่มีที่สิ้นสุดอาจเกิดขึ้นเมื่อเงื่อนไขการสิ้นสุดการวนนั้นไม่ชัดเจน เมื่อ มีค่าเกิน การค้นหาจะล้มเหลวและแสดงผลว่าการค้นหาล้มเหลว นอกจากนั้นแล้ว การวนจะต้องสิ้นสุดเมื่อค่าเป้าหมายถูกค้นพบแล้ว หรือเมื่อการค้นหาดำเนินการไปจนสุดแล้ว ดังนั้นการตรวจสอบว่าการค้นหานั้นสำเร็จหรือล้มเหลวจึงจำเป็นต้องทำในขั้นตอนท้ายสุดของการค้นหา เบนท์ลีย์ค้นพบว่าโปรแกรมเมอร์ส่วนใหญ่ที่ไม่สามารถใช้งานการค้นหาแบบทวิภาคได้มักจะสร้างข้อผิดพลาดเกี่ยวกับการกำหนดเงื่อนไขการสิ้นสุดการวน[66]
คลังโปรแกรม
คลังโปรแกรมที่รองรับและพร้อมใช้ในภาษาคอมพิวเตอร์ต่างๆ มีดังต่อไปนี้
- ภาษาซีมีฟังก์ชัน
bsearch()
ใน ซึ่งโดยทั่วไปแล้วจะใช้งานผ่านการค้นหาแบบทวิภาค ถึงแม้จะไม่จำเป็นต้องใช้อย่างนั้นก็ตาม - ไลบรารีแม่แบบมาตรฐานของมีฟังก์ชัน
binary_search()
,lower_bound()
,upper_bound()
และequal_range()
- ในคลังโปรแกรมโฟบอส (Phobos) ของ
std.range
มีชนิดข้อมูลSortedRange
(คืนค่ามาจากฟังก์ชันsort()
และassumeSorted()
) และวิธีการcontains()
,equaleRange()
,lowerBound()
และtrisect()
ซึ่งใช้เทคนิคการค้นหาแบบทวิภาคเป็นค่าเริ่มต้นสำหรับขอบเขตที่มีการเข้าถึงแบบสุ่ม โมดูล - ภาษาโคบอลมี
SEARCH ALL
สำหรับการดำเนินการค้นหาแบบทวิภาคในตารางโคบอลแบบมีลำดับ - ในแพ็กเกจคลังโปรแกรมมาตรฐาน
sort
ของ มีฟังก์ชันSearch
,SearchInts
,SearchFloat64s
และSearchStrings
ซึ่งนำไปใช้ในการค้นหาแบบทวิภาคโดยทั่วไป รวมไปถึงการนำไปใช้งานโดยเฉพาะเพื่อค้นหาจำนวนเต็ม เลขทศนิยม และสตริง ตามลำดับ - ภาษาจาวามี
binarySearch()
ซึ่งเป็นชุดวิธีการแบบคงที่ที่ ในArrays
และCollections
ที่อยู่ในแพ็กเกจมาตรฐานjava.util
สำหรับการดำเนินการค้นหาแบบทวิภาคบนแถวลำดับจาวาและบนรายการ ตามลำดับ - ดอตเน็ตเฟรมเวิร์ก 2.0 ของไมโครซอฟท์ มีขั้นตอนวิธีการค้นหาแบบทวิภาครุ่น แบบคงที่ในกลุ่มคอลเล็กชันแบบฐาน ตัวอย่างเช่น วิธีการของ
System.Array
คือBinarySearch<T>(T[] array, T value)
- สำหรับภาษาอ็อบเจกทีฟ-ซี กรอบงาน โกโก้ มีวิธีการ
NSArray -indexOfObject:inSortedRange:options:usingComparator:
ในแมคโอเอสเท็น 10.6+ กรอบงาน ของแอปเปิลยังมีฟังก์ชันCFArrayBSearchValues()
- ภาษาไพทอนมีโมดูล
bisect
- คลาสแถวลำดับของภาษารูบีมีวิธีการ
bsearch
ซึ่งมีการหาคู่ที่ใกล้เคียงอยู่ในตัว
ดูเพิ่ม
เชิงอรรถและอ้างอิง
เชิงอรรถ
- คือ สัญกรณ์โอใหญ่ และ คือ ลอการิทึม ในสัญกรณ์โอใหญ่ ฐานของลอการิทึมไม่ใช่สิ่งที่สำคัญเนื่องจากลอการิทึมในรูปฐานหนึ่งก็สามารถเขียนในรูปลอการิทึมฐานอื่น ๆ ได้ นั่นคือ เมื่อ เป็นค่าคงที่
- ขั้นตอนวิธีการค้นหาใด ๆ ที่อาศัยการเปรียบเทียบอย่างเดียวสามารถแสดงในรูปต้นไม้ค้นหาแบบทวิภาคได้ เส้นทางภายใน คือเส้นทางใด ๆ ที่เริ่มจากรากไปยังปมที่มีอยู่ในต้นไม้ ให้ เป็นความยาวของเส้นทางภายใน ซึ่งคือผลรวมความยาวของเส้นทางภายในทุกเส้นในต้นไม้ ถ้าสมาชิกแต่ละตัวมีโอกาสที่จะถูกค้นหาเท่ากัน กรณีเฉลี่ยจะเท่ากับ หรือก็คือหนึ่งบวกค่าเฉลี่ยของความยาวของเส้นทางภายในทั้งหมดในต้นไม้ เพราะเส้นทางภายในคือตัวแทนของสมาชิกที่ขั้นตอนวิธีการค้นหานั้นได้ดำเนินการเปรียบเทียบค่าของมันกับค่าเป้าหมาย ความยาวของเส้นทางภายในเหล่านี้แทนจำนวนการวนซ้ำหลังจากปมราก การเพิ่มค่าเฉลี่ยของความยาวนี้ในจำนวนการวนซ้ำหนึ่งครั้งที่รากจึงให้ผลลัพธ์เป็นกรณีเฉลี่ย ดังนั้น หากต้องการลดจำนวนการเปรียบเทียบโดยเฉลี่ยจะต้องลดค่าความยาวเส้นทางภายใน ซึ่งต้นไม้สำหรับการค้นหาแบบทวิภาคคือแบบต้นไม้ที่ได้ทำการลดความยาวเส้นทางภายในนี้แล้ว โดย Knuth 1998 ได้พิสูจน์ว่าความยาวเส้นทางภายนอก (ความยาวเส้นทางไปยังปมทุกปมที่มีปมลูกทั้งสองอยู่แล้ว) จะลดลงเมื่อปมภายนอก (ปมที่ไม่มีปมลูก) อยู่ระหว่างชั้นสองชั้นที่ติดกันของต้นไม้ สิ่งนี้ยังสามารถนำไปประยุกต์ใช้กับเส้นทางภายในได้อีกด้วย เนื่องจากความยาวเส้นทางภายใน มีความสัมพันธ์เชิงเส้นตรงกับความยาวเส้นทางภายนอก สำหรับต้นไม้ที่มีปม ปม จะได้ว่า เมื่อต้นไม้ย่อยแต่ละต้นมีจำนวนปมที่เท่ากัน หรือคือแถวลำดับนั้นสามารถถูกแบ่งครึ่งได้ขนาดเท่ากันในทุกการวนซ้ำ แล้วปมภายนอกและปมพ่อแม่ภายในของมันจะอยู่ภายในสองชั้นที่ติดกันนั้น จึงกล่าวได้ว่า การค้นหาแบบทวิภาคสามารถลดจำนวนการเปรียบเทียบโดยเฉลี่ยได้เนื่องจากต้นไม้เปรียบเทียบของมันมีความยาวเส้นทางภายในที่น้อยที่สุดเท่าที่จะเป็นไปได้[14]
- Knuth 1998 ได้แสดงบนแบบจำลองคอมพิวเตอร์ ของเขา (ซึ่งถูกออกแบบเพื่อเป็นตัวแทนของคอมพิวเตอร์ธรรมดา) ว่าเวลาการดำเนินการโดยเฉลี่ยสำหรับการค้นหาที่สำเร็จคือ เปรียบเทียบกับ สำหรับการค้นหาแบบทวิภาคปกติ ความซับซ้อนของเวลาในกรณีนี้จะเพิ่มขึ้นช้ากว่าเล็กน้อย แต่จะมีค่าเริ่มต้นที่มากกว่า[18]
- Knuth 1998 ได้ทำการวิเคราะห์ประสิทธิภาพด้านเวลาอย่างเป็นทางการของขั้นตอนวิธีการค้นหาทั้งสองนี้ ในคอมพิวเตอร์ ของเขา ซึ่งเขาได้ออกแบบเพื่อเป็นตัวแทนของคอมพิวเตอร์ทั่วไป การค้นหาแบบทวิภาคใช้เวลา โดยเฉลี่ยสำหรับการค้นหาที่สำเร็จ ในขณะที่การค้นหาเชิงเส้นที่มี ที่ท้ายรายการจะใช้เวลา การค้นหาเชิงเส้นจะมีค่าความซับซ้อนเริ่มต้นน้อยกว่า เพราะต้องใช้การคำนวณน้อยกว่า แต่ค่าความซับซ้อนจะมีค่าเพิ่มขึ้นรวดเร็วกว่าการค้นหาแบบทวิภาค ในคอมพิวเตอร์ MIX การค้นหาแบบทวิภาคจะทำงานได้ดีกว่าการค้นหาเชิงเส้นที่มี sentinel node เมื่อ [14][23]
- การเพิ่มค่าในลำดับที่มีการเรียงแล้วหรือในรูปแบบคีย์สลับสูงสุดและต่ำสุดจะให้ผลลัพธ์เป็นต้นไม้ค้นหาแบบทวิภาคที่มีเวลาการดำเนินการที่มากที่สุดในกรณีเฉลี่ยและกรณีที่แย่ที่สุด[28]
- การค้นหาในตารางแฮชบางอันสามารถดำเนินการด้วยเวลาที่แน่นอนได้[33]
- เนื่องจากการตั้งค่าบิตทั้งหมดที่ฟังก์ชันแฮชชี้ไปสำหรับคีย์เฉพาะอาจส่งผลกระทบต่อการตรวจสอบคีย์อื่น ๆ ที่มีตำแหน่งแฮชเดียวกันได้
- มีการปรับปรุงตัวกรองของบลูมเพื่อพัฒนาค่าความซับซ้อนหรือเพื่อสนับสนุนการดำเนินการลบสมาชิก ตัวอย่างเช่น ตัวกรองนกกาเหว่าซึ่งใช้ เพื่อพัฒนาประสิทธิภาพ
- นั่นคือ แถวลำดับที่มีขนาดเท่ากับ 1, 3, 7, 15, 31 ...
อ้างอิง
- Williams, Jr., Louis F. (22 เมษายน 1976). A modification to the half-interval search (binary search) method. Proceedings of the 14th ACM Southeast Conference. ACM. pp. 95–101. doi:10.1145/503561.503582. จากแหล่งเดิมเมื่อ 12 มีนาคม 2017. สืบค้นเมื่อ 29 มิถุนายน 2018.
- Knuth 1998, §6.2.1 ("Searching an ordered table"), subsection "Binary search".
- Butterfield & Ngondi 2016, p. 46.
- ; ; (1990). (1st ed.). MIT Press and McGraw-Hill. ISBN .
- เอริก ดับเบิลยู. ไวส์สไตน์, "Binary Search" จากแมทเวิลด์.
- Flores, Ivan; Madpis, George (1 September 1971). "Average binary search length for dense ordered lists". . 14 (9): 602–603. doi:10.1145/362663.362752. ISSN 0001-0782. S2CID 43325465.
- Knuth 1998, §6.2.1 ("Searching an ordered table"), subsection "Algorithm B".
- Bottenbruch, Hermann (1 April 1962). "Structure and use of ALGOL 60". . 9 (2): 161–221. doi:10.1145/321119.321120. ISSN 0004-5411. S2CID 13406983. Procedure is described at p. 214 (§43), titled "Program for Binary Search".
- Knuth 1998, §6.2.1 ("Searching an ordered table"), subsection "History and bibliography".
- Kasahara & Morishita 2006, pp. 8–9.
- Sedgewick & Wayne 2011, §3.1, subsection "Rank and selection".
- Goldman & Goldman 2008, pp. 461–463.
- Sedgewick & Wayne 2011, §3.1, subsection "Range queries".
- Knuth 1998, §6.2.1 ("Searching an ordered table"), subsection "Further analysis of binary search".
- Knuth 1998, §6.2.1 ("Searching an ordered table"), "Theorem B".
- Chang 2003, p. 169.
- Knuth 1997, §2.3.4.5 ("Path length").
- Knuth 1998, §6.2.1 ("Searching an ordered table"), subsection "Exercise 23".
- Rolfe, Timothy J. (1997). "Analytic derivation of comparisons in binary search". ACM SIGNUM Newsletter. 32 (4): 15–19. doi:10.1145/289251.289255. S2CID 23752485.
- Khuong, Paul-Virak; (2017). "Array Layouts for Comparison-Based Searching". Journal of Experimental Algorithmics. 22. Article 1.3. :1509.05053. doi:10.1145/3053370. S2CID 23752485.
- Knuth 1997, §2.2.2 ("Sequential Allocation").
- Beame, Paul; (2001). "Optimal bounds for the predecessor problem and related problems". . 65 (1): 38–72. doi:10.1006/jcss.2002.1822.
- Knuth 1998, Answers to Exercises (§6.2.1) for "Exercise 5".
- Knuth 1998, §6.2.1 ("Searching an ordered table").
- Knuth 1998, §5.3.1 ("Minimum-Comparison sorting").
- Sedgewick & Wayne 2011, §3.2 ("Ordered symbol tables").
- Sedgewick & Wayne 2011, §3.2 ("Binary Search Trees"), subsection "Order-based methods and deletion".
- Knuth 1998, §6.2.2 ("Binary tree searching"), subsection "But what about the worst case?".
- Sedgewick & Wayne 2011, §3.5 ("Applications"), "Which symbol-table implementation should I use?".
- Knuth 1998, §5.4.9 ("Disks and Drums").
- Knuth 1998, §6.2.4 ("Multiway trees").
- Knuth 1998, §6.4 ("Hashing").
- Knuth 1998, §6.4 ("Hashing"), subsection "History".
- Dietzfelbinger, Martin; ; ; Meyer auf der Heide, Friedhelm; Rohnert, Hans; (August 1994). "Dynamic perfect hashing: upper and lower bounds". . 23 (4): 738–761. doi:10.1137/S0097539791194094.
- Morin, Pat. "Hash tables" (PDF). p. 1. สืบค้นเมื่อ 28 March 2016.
- Knuth 2011, §7.1.3 ("Bitwise Tricks and Techniques").
- Silverstein, Alan, Judy IV shop manual (PDF), Hewlett-Packard, pp. 80–81
- Fan, Bin; Andersen, Dave G.; Kaminsky, Michael; Mitzenmacher, Michael D. (2014). Cuckoo filter: practically better than Bloom. Proceedings of the 10th ACM International on Conference on Emerging Networking Experiments and Technologies. pp. 75–88. doi:10.1145/2674005.2674994.
- Bloom, Burton H. (1970). "Space/time trade-offs in hash coding with allowable errors". . 13 (7): 422–426. 10.1.1.641.9096. doi:10.1145/362686.362692. S2CID 7931252.
- Knuth 1998, §6.2.1 ("Searching an ordered table"), subsection "An important variation".
- Knuth 1998, §6.2.1 ("Searching an ordered table"), subsection "Algorithm U".
- Moffat & Turpin 2002, p. 33.
- Knuth 1998, §6.2.1 ("Searching an ordered table"), subsection "Interpolation search".
- Knuth 1998, §6.2.1 ("Searching an ordered table"), subsection "Exercise 22".
- Perl, Yehoshua; Itai, Alon; Avni, Haim (1978). "Interpolation search—a log log n search". . 21 (7): 550–553. doi:10.1145/359545.359557. S2CID 11089655.
- ; Liu, Ding (6 July 2001). Lower bounds for intersection searching and fractional cascading in higher dimension. 33rd . ACM. pp. 322–329. doi:10.1145/380752.380818. ISBN . สืบค้นเมื่อ 30 June 2018.
- ; Liu, Ding (1 March 2004). "Lower bounds for intersection searching and fractional cascading in higher dimension" (PDF). Journal of Computer and System Sciences (ภาษาอังกฤษ). 68 (2): 269–284. 10.1.1.298.7772. doi:10.1016/j.jcss.2003.07.003. ISSN 0022-0000. สืบค้นเมื่อ 30 June 2018.
- Emamjomeh-Zadeh, Ehsan; Kempe, David; Singhal, Vikrant (2016). Deterministic and probabilistic binary search in graphs. 48th . pp. 519–532. :1503.00805. doi:10.1145/2897518.2897656.
- Ben-Or, Michael; Hassidim, Avinatan (2008). "The Bayesian learner is optimal for noisy binary search (and pretty good for quantum as well)" (PDF). 49th . pp. 221–230. doi:10.1109/FOCS.2008.58. ISBN .
- Pelc, Andrzej (1989). "Searching with known error probability". Theoretical Computer Science. 63 (2): 185–202. doi:10.1016/0304-3975(89)90077-7.
- ; ; ; Winklmann, K. Coping with errors in binary search procedures. 10th . doi:10.1145/800133.804351.
- Pelc, Andrzej (2002). "Searching games with errors—fifty years of coping with liars". Theoretical Computer Science. 270 (1–2): 71–109. doi:10.1016/S0304-3975(01)00303-6.
- Rényi, Alfréd (1961). "On a problem in information theory". Magyar Tudományos Akadémia Matematikai Kutató Intézetének Közleményei (ภาษาฮังการี). 6: 505–516. 0143666.
- Høyer, Peter; Neerbek, Jan; Shi, Yaoyun (2002). "Quantum complexities of ordered searching, sorting, and element distinctness". . 34 (4): 429–448. :quant-ph/0102078. doi:10.1007/s00453-002-0976-3. S2CID 13717616.
- Childs, Andrew M.; Landahl, Andrew J.; Parrilo, Pablo A. (2007). "Quantum algorithms for the ordered search problem via semidefinite programming". Physical Review A. 75 (3). 032335. :quant-ph/0608161. Bibcode:2007PhRvA..75c2335C. doi:10.1103/PhysRevA.75.032335. S2CID 41539957.
- (1996). A fast quantum mechanical algorithm for database search. 28th . Philadelphia, PA. pp. 212–219. :quant-ph/9605043. doi:10.1145/237814.237866.
- (1957). "Addressing for random-access storage". IBM Journal of Research and Development. 1 (2): 130–146. doi:10.1147/rd.12.0130.
- "2n−1". A000225 8 มิถุนายน 2016 ที่ เวย์แบ็กแมชชีน. Retrieved 7 May 2016.
- Lehmer, Derrick (1960). Teaching combinatorial tricks to a computer. Proceedings of Symposia in Applied Mathematics. Vol. 10. pp. 180–181. doi:10.1090/psapm/010.
- ; (1986). "Fractional cascading: I. A data structuring technique" (PDF). . 1 (1–4): 133–162. 10.1.1.117.8349. doi:10.1007/BF01840440. S2CID 12745042.
- ; (1986), "Fractional cascading: II. Applications" (PDF), , 1 (1–4): 163–191, doi:10.1007/BF01840441, S2CID 11232235
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
insakhawithyakarkhxmphiwetxr karkhnhaaebbthwiphakh xngkvs binary search half interval search logarithmic search 2 hrux binary chop epnkhntxnwithiephuxhataaehnngkhxngkhaepahmayinaethwladbthiidmikareriyngladbkhxmulaelw khntxnwithicakarepriybethiybkhaepahmaykbkhakhxngsmachikthixyutrngklangkhxngaethwladb thathngsxngmikhaethaknaesdngwaphbkhaepahmaythitxngkar sungcathakarkhunkhataaehnnghruxinthinikhux dchni index klbip michannthakhaepahmaymikhanxykwakhakhxngsmachiktrngklangkhxngaethwladb kcathakhntxnwithinixikkhrngaetepliynmakhnhainaethwladbyxykhrunghnungthimicudsinsudthitrngklangkhxngaethwladbhlk hruxthakhaepahmaymikhamakkwaaelwcakhnhainaethwladbyxyechnknaetyaycuderimtnmathitrngklangkhxngaethwladbhlk aeladaeninkarkhnhawnsaiperuxy cnkwacaphbkhaepahmay emuxkarkhnhadaeninkarcnaethwladbyxyimmismachikxyu aesdngwaimmismachikinaethwladbtwidthimikhaethakbkhaepahmay aelakhunkhawaimphbkhaepahmaykarkhnhaaebbthwiphakhtwxyangkarkhnhaaebbthwiphakh odymi 7 epnkhaepahmaypraephthkhntxnwithikarkhnhaokhrngsrangkhxmulaethwladbprasiththiphaphemuxekidkrniaeythisudO log n displaystyle O log n prasiththiphaphemuxekidkrnidithisudO 1 displaystyle O 1 prasiththiphaphemuxekidkrnithwipO log n displaystyle O log n primankhwamtxngkarphunthiemuxekidkrniaeythisudO 1 displaystyle O 1 kbthkhwamnixangxingkhristskrach khristthswrrs khriststwrrs sungepnsarasakhykhxngenuxha inkrniaeythisud karkhnhaaebbthwiphakhcadaeninnganodymikhwamsbsxnkhxngewlainruplxkarithum sungcamikha O log n displaystyle O log n emux n displaystyle n khuxcanwnaethwladbkhxngkhxmul karkhnhaaebbthwiphakhcaichewladaeninngannxykwa en ykewninkrnithiaethwladbmicanwnnxy xyangirktam aethwladbnncatxngmikareriyngladbkhxmulkxncungcasamarthdaeninkarkhnhaaebbthwiphakhid nxkcakkarkhnhaaebbthwiphakhaelw yngmiokhrngsrangkhxmulechphaaaebbxun thithukxxkaebbmaephuxihsamarthkhnhaidxyangrwderw echn tarangaehch sungsamarthnamaichinkarkhnhakhxmulidmiprasiththiphaphkwakarkhnhaaebbthwiphakh xyangirktam karkhnhaaebbthwiphakhyngkhngsamarthichaekpyhaidxyangkwangkhwangmakkwa echn karichinkarhakhxmulthimikhnadelkthisudhruxihythisudtwthdipcakkhaepahmayinaethwladb thungaemkhxmulnncaimpraktinaethwladbktam karkhnhaaebbthwiphakhmihlakhlayrupaebb odyechphaaxyangying en thichwyephimkhwamerwinkarkhnhaaebbthwiphakhsahrbkhxmulthimikhaediywkninhlayaethwladb kareriyngsxnaebbessswnchwyaekpyhaekiywkb en aeladanxun canwnmakidxyangmiprasiththiphaph nxkcaknnyngmi en thichwykhyaykhxbekhtkarkhnhaaebbthwiphakhidxyangimcakd aelatnimkhnhaaebbthwiphakhaelatnimaebbbisungepnokhrngsrangkhxmulthixangxingmacakkarkhnhaaebbthwiphakh karkhnhaaebbthwiphakhcaaebngkhrungchudkhxmulthitxngkarkhnha dngnncungcdihkarkhnhaaebbthwiphakhepnkhntxnwithiaebngaeykaelaexachna aelakhntxnwithikarkhnhakhntxnwithikarkhnhaaebbthwiphakhsamarthdaeninkaridinaethwladbthimikareriyngladbkhxmulaelw odycaerimcakkarepriybethiybkhakhxngkhxmulthixyutrngklangkhxngaethwladbkbkhaepahmay hakkhxmultrngklangnnmikhaethakbkhaepahmay cathakarkhunkhataaehnnginaethwladbkhxngkhxmulnn aethakkhxmultrngklangmikhanxykwakhaepahmay karkhnhaaebbthwiphakhcathukdaeninkartxipkbaethwladbkhrunghlng inthanxngediywkn hakkhxmultrngklangmikhamakkwakhaepahmay karkhnhakcathukdaeninkarinaethwladbkhrunghna dwykhntxnwithinithaihsamarthkacdkhxmulidkhrunghnungesmxinthukkarwnsa 7 karwnsa kahndihaethwladb A displaystyle A mismachik n displaystyle n tw odyaetlatwmikhahrux en A0 A1 A2 An 1 displaystyle A 0 A 1 A 2 ldots A n 1 sungthukeriyngladbkhxmulephuxih A0 A1 A2 An 1 displaystyle A 0 leq A 1 leq A 2 leq cdots leq A n 1 midchnikhxngtnaethwladb L displaystyle L aeladchniplayaethwladb R displaystyle R aelakahndkhaepahmay T displaystyle T sbruthintxipniichkarkhnhaaebbthwiphakhephuxhadchnitaaehnngkhxng T displaystyle T in A displaystyle A 7 kahndih L 0 displaystyle L 0 aela R n 1 displaystyle R n 1 tha L gt R displaystyle L gt R aelwkarkhnhacasinsudlng aelakhunkhawakhnhaimsaerc kahndih m displaystyle m taaehnngkungklangkhxngaethwladbthisnic mikhaethakbfngkchnphunkhxng L R2 displaystyle frac L R 2 hruxhmaythungcanwnetmthimakthisudthimikhanxykwahruxethakb L R2 displaystyle frac L R 2 tha Am lt T displaystyle A m lt T aelwkahndih L m 1 displaystyle L m 1 aelaklbipyngkhntxnthi 2 tha Am gt T displaystyle A m gt T aelwkahndih R m 1 displaystyle R m 1 aelaklbipyngkhntxnthi 2 tha Am T displaystyle A m T aesdngwakarkhnhaesrcsin khunkha m displaystyle m khntxnkarwnsanicatidtamkhxbekhtkarkhnhadwytwaepr L displaystyle L aela R displaystyle R aelasamarthaesdngphlinruprhsethiymiddngtwxyangdanlang odychuxtwaeprthiichcakhngedimehmuxntwxyangdanbn floor khuxfngkchnphun aela unsuccessful aethnkhaechphaathisuxthungkhwamlmehlwkhxngkarkhnha 7 function binary search A n T is L 0 R n 1 while L R do m floor L R 2 if A m lt T then L m 1 else if A m gt T then R m 1 else return m return unsuccessful inxikthangeluxkhnung khntxnwithinixacichkhafngkchnephdankhxng L R2 displaystyle frac L R 2 sungcathaihphllphthepliynaeplngiphakkhaepahmaypraktinaethwladbmakkwa 1 khrng khntxnthangeluxk inkhntxnwithidanbnxasykartrwcsxbinthuk karwnsawakhaklang m displaystyle m mikhaethakbkhaepahmaythitxngkar T displaystyle T hruxim krabwnkarbangxyangidlaewnwithikartrwcsxbniinaetlakarwnsa thaihkhntxnwithinncathakartrwcsxbniechphaaemuxkarwnsakhrngnnehluxsmachikephiyngtwediyw emux L R displaystyle L R sngphlihichewlanxylnginrahwangrxbkarwnsa enuxngcakchudepriybethiybcathukkacdthinghnungchudinhnungrxbkarwnsa inkhnathimicanwnrxbkarwnsaephimkhunephiynghnungkhrngodyechliyethann en idtiphimphkrabwnkaraerkthilaewnwithikartrwcsxbniinpikh s 1962 9 kahndih L 0 displaystyle L 0 aela R n 1 displaystyle R n 1 emux L R displaystyle L neq R kahndih m displaystyle m taaehnngkungklangkhxngaethwladbthisnic mikhaethakbfngkchnephdankhxng L R2 displaystyle frac L R 2 hruxhmaythungcanwnetmthinxythisudthimikhamakkwahruxethakb L R2 displaystyle frac L R 2 tha Am gt T displaystyle A m gt T aelwkahndih R m 1 displaystyle R m 1 michann tha Am T displaystyle A m leq T aelwkahndih L m displaystyle L m emux L R displaystyle L R karkhnhacaesrcsinlng tha AL T displaystyle A L T aelwcakhunkha L displaystyle L michanncakhunkhawaimsaerc emux ceil khuxfngkchnephdan rhsethiymkhxngkrabwnkarni khux function binary search alternative A n T is L 0 R n 1 while L R do m ceil L R 2 if A m gt T then R m 1 else L m if A L T then return L return unsuccessful smachikthisakn karkhnhaaebbthwiphakhxackhunkhadchniid khxngsmachikthimikhaethakbkhaepahmay thungaeminaethwladbcamismachikthimikhasakn yktwxyangechn thaaethwladbthitxngkarkhnhakhux 1 2 3 4 4 5 6 7 displaystyle 1 2 3 4 4 5 6 7 aelakhaepahmaykhux 4 displaystyle 4 aelwkhntxnwithixackhunkhathithuktxngidthngtaaehnngthi 4 dchnithi 3 hruxtaaehnngthi 5 dchnithi 4 sungkrabwnkarpktimkcakhunkhataaehnngthi 4 dchnithi 3 aetkimichesmxipthikhathithukkhuncaepntaaehnngaerkkhxngsmachikthisakn xyangirktam inbangkhrngkarhakhaepahmaythimismachikthisakninaethwladbkcaepnthicatxnghasmachikkhxbsaysudhruxkhwasud intwxyangkhangtn smachiksaysudthimikhaethakb 4 khuxsmachiktaaehnngthi 4 aelasmachikkhwasudthimikhaethakb 4 khuxsmachiktaaehnngthi 5 sungkarkhnhaodyichkhntxnthangeluxkcakhunkhadchnikhxngsmachikkhwasud thami 9 krabwnkarhasmachiksaysud inkarcahasmachiksaysudsamarththaiddngni kahndih L 0 displaystyle L 0 aela R n displaystyle R n emux L lt R displaystyle L lt R kahndih m displaystyle m taaehnngkungklangkhxngaethwladbthisnic mikhaethakbfngkchnphunkhxng L R2 displaystyle frac L R 2 hruxhmaythungcanwnetmthimakthisudthimikhanxykwahruxethakb L R2 displaystyle frac L R 2 tha Am lt T displaystyle A m lt T aelwkahndih L m 1 displaystyle L m 1 michann tha Am T displaystyle A m geq T aelwkahndih R m displaystyle R m khunkha L displaystyle L tha L lt n displaystyle L lt n aela AL T displaystyle A L T aelw AL displaystyle A L khuxsmachiksaysudthimikhaethakb T displaystyle T inkrnithiimmismachikidinaethwladbthimikhaethakb T displaystyle T L displaystyle L cathuxwaepnxndbkhxng T displaystyle T inaethwladb hruxkhuxcanwnsmachikthnghmdinaethwladbthimikhanxykwa T displaystyle T emux floor khuxfngkchnphun rhsethiymkhxngkrabwnkarni khux function binary search leftmost A n T L 0 R n while L lt R m floor L R 2 if A m lt T L m 1 else R m return L krabwnkarhasmachikkhwasud inkarcahasmachikkhwasudsamarththaiddngni kahndih L 0 displaystyle L 0 aela R n displaystyle R n emux L lt R displaystyle L lt R kahndih m displaystyle m taaehnngkungklangkhxngaethwladbthisnic mikhaethakbfngkchnphunkhxng L R2 displaystyle frac L R 2 hruxhmaythungcanwnetmthimakthisudthimikhanxykwahruxethakb L R2 displaystyle frac L R 2 tha Am gt T displaystyle A m gt T aelwkahndih R m displaystyle R m michann tha Am T displaystyle A m leq T aelwkahndih L m 1 displaystyle L m 1 khunkha R 1 displaystyle R 1 tha R gt 0 displaystyle R gt 0 aela AR 1 T displaystyle A R 1 T aelw AR 1 displaystyle A R 1 khuxsmachikkhwasudthimikhaethakb T displaystyle T inkrnithiimmismachikidinaethwladbthimikhaethakb T displaystyle T n R displaystyle n R caepncanwnsmachikthnghmdinaethwladbthimikhamakkwakwa T displaystyle T emux floor khuxfngkchnphun rhsethiymkhxngkrabwnkarni khux function binary search rightmost A n T L 0 R n while L lt R m floor L R 2 if A m gt T R m else L m 1 return R 1 karhakhuthiiklekhiyng karkhnhaaebbthwiphakhsamarthprbprungephuxkhanwnhakhuthiiklekhiyngid intwxyangdanbn xndb rank smachikkxnhna predecessor smachiktamhlng successor aelaephuxnbaniklsud nearest neighbor idthukaesdngsahrbkhaepahmayethakb 5 displaystyle 5 sungimxyuinaethwladbni krabwnkardantncadaeninkarhakhuthithuktxngsungkhuxtaaehnngkhxngsmachikthimikhaethakbkhaepahmayethann xyangirktam karkhyaykhxbekhtkarkhnhaaebbthwiphakhephuxdaeninkarhakhuthiiklekhiyngksamarththaidodyngay ephraakarkhnhaaebbthwiphakhcadaeninkarinaethwladbthieriyngladbaelw yktwxyangechn karkhnhaaebbthwiphakhsamarthichephuxkhanwnxndb canwnsmachikthimikhanxykwa smachikkxnhna predecessor smachiktamhlng successor aelaephuxnbaniklsudkhxngkhathikahnd sung en hruxkhuxkarhacanwnsmachikrahwangkhasxngkhaksamarthdaeninkariddwykarhaxndb 2 khrng 11 karhaxndbsamarthdaeninkariddwykrabwnkarhasmachiksaysud odycakhunkhacanwnsmachikthimikhanxykwakhaepahmay 11 karhasmachikkxnhnasamarthdaeninkariddwykarhaxndb thaxndbkhxngkhaepahmaykhux r displaystyle r aelwxndbkhxngsmachikkxnhnakhux r 1 displaystyle r 1 karhasmachiktamhlngsamarthdaeninkariddwykrabwnkarhasmachikkhwasud thakrabwnkarnnkhunkha r displaystyle r aelwxndbkhxngsmachiktamhlngkhux r 1 displaystyle r 1 ephuxnbaniklsudkhxngkhaepahmayxacepnsmachikkxnhnahruxsmachiktamhlngkid khunxyukbwakhaihniklekhiyngkhaepahmaymakkwakn karhakhxbekhtsamarththaidxyangtrngiptrngma odyemuxruxndbkhxngkhathngsxng smachikkxnhnaaelasmachiktamhlng aelw canwnsmachikthimikhamakkwahruxethakbkhasmachikkxnhnaaelanxykwakhasmachiktamhlngcaepnphltangrahwangxndbkhxngkhathngsxng karnbaebbnisamarthmikhaephimkhunhruxldlng 1 khaidkhunxyukbwacudplaykhxngkhxbekhtkhwrthukphicarnaepnswnhnungkhxngkhxbekhthruxim aelaaethwladbmikhxmulthiekhakhukbcudplayehlannhruxim 13 prasiththiphaphA tnimaesdngthungkarkhnhaaebbthwiphakh aethwladbthikalngthukkhnhaxyukhux 20 30 40 50 80 90 100 displaystyle 20 30 40 50 80 90 100 aelakhaepahmaykhux 40 displaystyle 40 krnithiaeythisudcaekidkhunemuxkarkhnhadaeninkaripthungchnlangsudkhxngtnim inkhnathikrnithidithisudcaekidkhunemuxkhaepahmaykhuxkhaklangkhxngaethwladb inaengkhxngcanwnkarepriybethiyb prasiththiphaphkhxngkarkhnhaaebbthwiphakhsamarthwiekhraahidcakkardukarthangankhxngtnimaebbthwiphakh odypmrakkhxngtnimkhuxkhaklangkhxngaethwladb khaklangkhxngkhrungaethwlangkhuxpmlukdansaykhxngrak aelakhaklangkhxngkhrungaethwbnkhuxpmlukdankhwakhxngrak swnthiehluxkhxngtnimkmiokhrngsrangthikhlaykhlungkbrupaebbthiklawipdantn khux erimcakpmrak kartdsinicwacaphantnimyxydansayhruxkhwacakhunxyukbwa khaepahmaymikhanxyhruxmakkwapmthikalngtdsinicxyu 14 inkrnithiaeythisud karkhnhaaebbthwiphakhcathukwnsathnghmd log2 n 1 textstyle lfloor log 2 n 1 rfloor rxbkarepriybethiyb emux textstyle lfloor rfloor khuxsylksnthiaesdngthungfngkchnphunthiihphllphthepncanwnetmthimakthisudthinxykwahruxethakbxarkiwemnt argument aela log2 textstyle log 2 khux en enuxngcakkrnithiaeythisudcaekidkhunemuxkarkhnhadaeninkaripthungchnlangsudkhxngtnim sungtnimaebbthwiphakhcamithnghmd log2 n 1 textstyle lfloor log 2 n 1 rfloor chnesmx krnithiaeythisudxacekidkhunidechnkninkrnithikhaepahmayimxyuinaethwladb tha n textstyle n mikhanxykwakalngkhxngsxngxyuhnungkha aelwkrninicaepncringesmx michann karkhnhaxacwnsa log2 n 1 textstyle lfloor log 2 n 1 rfloor rxbemuxkarkhnhadaeninkaripthungchnlangsudkhxngtnim xyangirktam hakkarkhnhasinsudthichnthilukthisudepnxndbsxngkhxngtnim aelwkarkhnhacawnsathnghmd log2 n textstyle lfloor log 2 n rfloor rxb sungnxykwacanwnkarwnsakhxngkrnithiaeythisudxyuhnungkhrng 15 haksmmutiihsmachikthuktwmioxkasthicathukkhnhaethakn aelwkarkhnhaaebbthwiphakhcawnsathnghmd log2 n 1 2 log2 n 1 log2 n 2 n displaystyle lfloor log 2 n rfloor 1 2 lfloor log 2 n rfloor 1 lfloor log 2 n rfloor 2 n rxbodyechliy emuxkhaepahmaymixyuinaethwladb sungcapramanethakb log2 n 1 displaystyle log 2 n 1 rxb thakhaepahmayimxyuinaethwladb aelwkarkhnhaaebbthwiphakhcawnsa log2 n 2 2 log2 n 1 n 1 displaystyle lfloor log 2 n rfloor 2 2 lfloor log 2 n rfloor 1 n 1 rxbodyechliy odysmmutiihkhxbekhtrahwangaelanxkehnuxcaksmachikmioxkasthicathukkhnhaethakn 14 inkrnithidithisud hruxemuxkhaepahmaykhuxkhaklangkhxngaethwladb taaehnngkhxngkhaepahmaycathukkhunkhahlngcakkarwnsaephiynghnungrxb inaengkhxngkarwnsa immikhntxnwithikarkhnhaidthithakarkhnhaodykarepriybethiybsmachikinaethwladbaelwcamiprasiththiphaphthnginkrniechliyaelakrnithiaeythisuddikwakarkhnhaaebbthwiphakh tnimtdsinicaesdngihehnwakarkhnhaaebbthwiphakhmicanwnchnnxythisudethathicaepnipidemuxcanwnchnthixyusungkwachnlangsudthnghmdkhxngtnimthuketimetmhmdaelw michann khntxnwithikarkhnhasamarthkacdsmachikinhnungkarwnsaidelknxy sungcaepnkarephimcanwnkarwnsathicaepnthnginkrniechliyaelakrnithiaeythisud aelanncaepnkrnisahrbkhntxnwithikarkhnhaaebbxun thixasykarepriybethiybsmachik thungaemwakhntxnwithikarkhnhaxunxacdaeninkariderwkwasahrbkhaepahmaybangkha aetprasiththiphaphodyechliykyngkhngnxykwakarkhnhaaebbthwiphakh enuxngcakkarkhnhaaebbthwiphakhcamikaraebngkhrungaethwladbesmx dngnncungcamnicidwakhnadkhxngaethwladbyxythithukaebngthngsxngaethwcamikhaiklekhiyngknmakthisud 14 xyangirktam karkhnhaaebbthwiphakhcasamarthdaeninkaridinaethwladbthimikareriyngladbaelwethann khwamsbsxndanphunthi karkhnhaaebbthwiphakhcaepntxngichphxynetxr pointer 3 xninkarekbtaaehnngthixyukhxngtwaepr odyxacepndchnikhxngaethwladb hruxphxynetxripyngtaaehnngthixyuhnwykhwamca odyimkhanungthungkhnadkhxngaethwladb dngnn khwamsbsxndanphunthikhxngkarkhnhaaebbthwiphakhkhux O 1 displaystyle O 1 inrupaebbkarkhanwn en aehlngthimakhxngkrniechliy canwnkarwnsaodyechliykhxngkarkhnhaaebbthwiphakhkhunxyukbkhwamnacaepnthismachikaetlatwinaethwladbcathukkhnha krniechliycaaetktangknipsahrbkarkhnhathisaercaelaimsaerc sahrbkarkhnhathisaerccathukxnumanwasmachikaetlatwinaethwladbmioxkasthicathukkhnhaethakn sahrbkarkhnhathiimsaerccathukxnumanwachwngrahwangaelanxkehnuxcaksmachikmioxkasthicathukkhnhaethakn krniechliysahrbkarkhnthisaerckhuxcanwnkarwnsaephuxkhnhasmachikthuktwinkhrngediyw hardwy n displaystyle n sungkkhuxcanwnsmachikinaethwladb swnkrniechliysahrbkarkhnhathiimsaerckhuxcanwnkarwnsaephuxkhnhasmachikinthukchwnginkhrngediyw hardwycanwn n 1 displaystyle n 1 chwng 14 karkhahathisaerc intnimaebbthwiphakh karkhnhathisaercsamarththukxthibayiddwyesnthangcakrakthungpmepahmay eriykwa esnthangphayin internal path khwamyawkhxngesnthangcaethakbcanwnkhxb esnechuxmtxrahwangpm thiesnthangedinthangphan emuxkahndihesnthangthisxdkhlxngnnmikhwamyaw l displaystyle l canwnkarwnsainkarkhncaethakb l 1 displaystyle l 1 odynbkarwnsarxbaerkdwy khwamyawkhxngesnthangphayincaethakbphlrwmkhxngkhwamyawkhxngesnthangphayinthiechphaa enuxngcakcamiephiynghnungesnthangthiedinthangcakrakipyngpmediywid dngnn esnthangphayinaetlaesncaepntwaethnkhxngkarkhnhasmachikaetlatwodyechphaa thamismachikthnghmd n displaystyle n tw sung n displaystyle n caepncanwnetmbwk aelakhwamyawkhxngesnthangphayinkhux I n displaystyle I n aelwcanwnkarwnsaodyechliysahrbkarkhnhathisaerckhux T n 1 I n n displaystyle T n 1 frac I n n odycanwnkarwnsa 1 khrngthithukbwkekhaipephimkhuxkarwnsakhrngaerk 14 enuxngcakkarkhnhaaebbthwiphakhkhuxkhntxnwithithidithisudinkarkhnhaaebbepriybethiyb pyhanicathukldlngehluxephiyngkarkhanwnkhwamyawkhxngesnthangphayinthinxythisudkhxngtnimaebbthwiphakhthnghmdthimipm n displaystyle n pm sungcaethakb 17 I n k 1n log2 k displaystyle I n sum k 1 n left lfloor log 2 k right rfloor twxyangechn inaethwladbthimismachik 7 tw hakkhaepahmaykhuxrak karkhnhacatxngichkarwnsahnungkhrng hakepnsmachikthixyulangrakhnungchncatxngichkarwnsasxngkhrng aelasmachiksitwlangsudcatxngichkarwnsasamkhrng inkrnini khwamyawkhxngesnthangphayinkhux 17 k 17 log2 k 0 2 1 4 2 2 8 10 displaystyle sum k 1 7 left lfloor log 2 k right rfloor 0 2 1 4 2 2 8 10 caksmkarkarkhanwnkrniechliy canwnkarwnsaodyechliycaethakb 1 107 237 displaystyle 1 frac 10 7 2 frac 3 7 aelaphlrwm I n displaystyle I n samarthekhiynihxyuinrupxyangngayiddngni 14 I n k 1n log2 k n 1 log2 n 1 2 log2 n 1 1 2 displaystyle I n sum k 1 n left lfloor log 2 k right rfloor n 1 left lfloor log 2 n 1 right rfloor 2 left lfloor log 2 n 1 right rfloor 1 2 aethnkhasmkar I n displaystyle I n insmkar T n displaystyle T n 14 T n 1 n 1 log2 n 1 2 log2 n 1 1 2n log2 n 1 2 log2 n 1 log2 n 2 n displaystyle T n 1 frac n 1 left lfloor log 2 n 1 right rfloor 2 left lfloor log 2 n 1 right rfloor 1 2 n lfloor log 2 n rfloor 1 2 lfloor log 2 n rfloor 1 lfloor log 2 n rfloor 2 n sahrbcanwnetm n displaystyle n smkardanbnnikhuxsmkarkhxngkrniechliysahrbkarkhnhathisaerc karkhahathiimsaerc karkhnhathiimsaercsamarththukxthibayidodykaraephkhyaytnimdwypmphaynxk external nodes sungcaekidepntnimthwiphakhaebbaephkhyay extended binary tree thapmphayinhruxpmthipraktintnimmipmluknxykwa 2 pm aelwpmlukephimetimhruxpmphaynxkcathukephimintnimephuxihpmphayinaetlapmmipmlukkhrb 2 pm dwywithikarniaelwcathaihkarkhnhathiimsaercsamarththukxthibayiddwyesnthangipyngpmphaynxkthimiphxaemepnpmediywediywthimixyuinkarwnsakhrngsudthay esnthangphaynxkkhuxesnthangcakraksupmphaynxk sungkhwamyawkhxngesnthangphaynxknncaethakbphlrwmkhxngkhwamyawkhxngesnthangphaynxkthiechphaa thamismachikthnghmd n displaystyle n tw sung n displaystyle n caepncanwnetmbwk aelakhwamyawkhxngesnthangphaynxkkhux E n displaystyle E n aelwcanwnkarwnsaodyechliysahrbkarkhnhathiimsaerckhux T n E n n 1 displaystyle T n frac E n n 1 odycanwnkarwnsa 1 khrngthithukbwkekhaipephimkhuxkarwnsakhrngaerk smkarkhwamyawkhxngesnthangphaynxkthukhardwy n 1 displaystyle n 1 aethnthicaepn n displaystyle n ephraamiesnthangphaynxkthnghmd n 1 displaystyle n 1 esn sungkhuxchwngrahwangaelanxkehnuxcaksmachikinaethwladb 14 echnediywkbkarkhnhathisaerc pyhanicathukldlngehluxephiyngkarkhanwnkhwamyawkhxngesnthangphaynxkthinxythisudkhxngtnimaebbthwiphakhthnghmdthimipm n displaystyle n pm sahrbtnimaebbthwiphakhthnghmd khwamyawkhxngesnthangphaynxkethakbkhwamyawkhxngesnthangphayinbwkdwy 2n displaystyle 2n 17 aethnkhasmkar I n displaystyle I n 14 E n I n 2n n 1 log2 n 1 2 log2 n 1 1 2 2n n 1 log2 n 2 2 log2 n 1 displaystyle E n I n 2n left n 1 left lfloor log 2 n 1 right rfloor 2 left lfloor log 2 n 1 right rfloor 1 2 right 2n n 1 lfloor log 2 n rfloor 2 2 lfloor log 2 n rfloor 1 aethnkhasmkar E n displaystyle E n insmkar T n displaystyle T n smkarkhxngkrniechliysahrbkarkhnhathiimsaerckhux 14 T n n 1 log2 n 2 2 log2 n 1 n 1 log2 n 2 2 log2 n 1 n 1 displaystyle T n frac n 1 lfloor log 2 n rfloor 2 2 lfloor log 2 n rfloor 1 n 1 lfloor log 2 n rfloor 2 2 lfloor log 2 n rfloor 1 n 1 prasiththiphaphkhxngkhntxnthangeluxk inkarwnsaaetlakhrngkhxngkhntxnkarkhnhaaebbthwiphakhdanbncamikarepriybethiybhnunghruxsxngkhrng khuxkarepriybethiybwakhatrngklangethakbkhaepahmayhruximinaetlakarwnsa smmutiihsmachikaetlatwinaethwladbmioxkasthicathukkhnhaethakn karwnsaaetlakhrngcamikarepriybethiybthnghmd 1 5 khrngodyechliy twaeprkhxngkhntxnwithicatrwcsxbwakhatrngklangmikhaethakbkhaepahmayhruximintxnthaykhxngkarkhnha sungthaihtwepriybethiybthukkacdthingipkhrunghnungodyechliyinaetlakarwnsa singnicachwyldewlathiichinkarkhnhatxcanwnkarwnsahnungrxbinkhxmphiwetxrswnmak xyangirktam karkhnhanicamicanwnkarwnsamakthisudxyangaennxn odyechliyaelwcanwnkarwnsacaephimkhunhnungkhrng aetenuxngcakkarwnepriybethiybcathathnghmd log2 n 1 textstyle lfloor log 2 n 1 rfloor khrnginkrnithiaeythisud prasiththiphaphthiephimkhunelknxyinaetlakarwnsacungimsamarththdaethncanwnkarwnsathiephimkhunid ykewninkrnithi n displaystyle n mikhamak 18 rayaewladaeninkaraelaaekhchthiich inkarwiekhraahprasiththiphaphkhxngkarkhnhaaebbthwiphakhcatxngphicarnarayaewlathiichinkarepriybethiybsmachiksxngtw sahrbcanwnetmaelastring string rayaewlathiichinkardaeninkarcaephimkhunaeprphntrngkbkhwamyawkhxngkarekharhssmachikhruxkkhuxcanwnbitkhxngsmachik twxyangechn karepriybethiybkhukhxngcanwnetmechphaakhabwkkhnad 64 bithcaxasykarepriybethiybepnsxngethakhxngkarepriybethiybkhukhxngcanwnetmechphaakhabwkkhnad 32 bith krnithiaeythisudcaekidkhunemuxcanwnetmthngsxngmikhaethakn sungrayaewladaeninkarnicayingmakxyangminysakhyemuxkhwamyawkhxngkarekharhssmachikmikhamak echn karepriybethiybkhxmulchnidcanwnetmkhnadihyhruxstringaebbyaw sungcathaihkarepriybethiybkhxmulmirakhaaephng nxkcaknn karepriybethiybkhakhxngcanwncudlxytw karaethncanwncringaebbdicithlthiphbehnbxythisud caaephngkwakarepriybethiybcanwnetmaelastringaebbsn insthaptykrrmkhxmphiwetxrswnmak hnwypramwlphlklangcamiaekhchkhxnghardaewraeykcakaerm enuxngcakxyuinhnwypramwlphlklang aekhchcaekhathungidrwderwkwaaetkkkekbkhxmulidnxykwaaerm dngnn hnwypramwlphlklangswnmakcakkekbtaaehnnghnwykhwamca memory location thithukekhathungemuximnanmaniaelathixyuiklekhiyngkn yktwxyangechn emuxekhathungsmachikkhxngaethwladb smachiknnxacthukkkekbkhwbkhuipkbsmachikthixyuiklekhiyngkbmninaerm thaihsamarthekhathungsmachikthimidchniiklekhiyngkn en idxyangrwderw inaethwladbthimikareriyngladbaelw karkhnhaaebbthwiphakhsamarthkraoddipyngtaaehnnghnwykhwamcathixyuiklidthaaethwladbnnmikhnadihy tangcakkhntxnwithixun echn en aela en intarangaehch sungekhathungsmachikidtamladbethann inrabbswnihy singnixacephimrayaewladaeninkarkhxngkarkhnhaaebbthwiphakhinaethwladbkhnadihyidelknxykarkhahaaebbthwiphakhepriybethiybkbkarkhnhaaebbxunkarichkarkhnhaaebbthwiphakhinkardaeninkarephimaelalbsmachikinaethwladbthimikareriyngladbiwaelwnbepnwithikarthiimmiprasiththiphaph enuxngcakichewlathung O n displaystyle O n inkardaeninkaraetlakhrng nxkcaknnaelw aethwladbthimikareriyngladbaelwyngmikarichhnwykhwamcathisbsxn odyechphaaemuxsmachikthukephimekhaipinaethwladbbxy 21 dngnncungmiokhrngsrangkhxmulxun thisamarthdaeninkarephimaelalbidmiprasiththiphaphmakkwa karkhnhaaebbthwiphakhsamarthichephuxkardaeninkarhakhuthithuktxngaelakartrwcsxbkarepnsmachikkhxngest trwcsxbwakhaepahmayxyuinklumsmachikkhxmulhruxim sungthungaemokhrngsrangkhxmulxun casamarthdaeninkarhakhuthithuktxngaelatrwcsxbkarepnsmachikkhxngestidrwderwkwakarkhnhaaebbthwiphakh aetkarkhnhaaebbthwiphakhsamarthichhakhuthiiklekhiyngidxyangmiprasiththphaphinkhnathikarkhnhaaebbxun imsamarththaid sungkarkhnhaaebbthwiphakhichewla O log n textstyle O log n odyimkhanungthungchnidkhxngokhrngsrangkhxmul nxkcaknn yngmikardaeninkarbangxyang echn karhakhathimakaelanxythisud thisamarthdaeninkaridxyangmiprasiththiphaphinaethwladbthimikareriyngladbaelw 11 karkhnhaechingesn en epnkhntxnwithikarkhnhathieriybngay odycaichwithikartrwcsxbkhxmulthuk twcnkwacaecxkhaepahmay karkhnhaechingesnsamarththaidinraykaroyng linked list sungsamarthdaeninkarephimhruxlbsmachikidrwderwkwaaethwladb karkhnhaaebbthwiphakhdaeninkarkarkhnhainaethwladbidrwderwkwakarkhnhaechingesn ykewnaethwladbthimikhnadsn aetaethwladbnncatxngmikareriyngladbmakxn 24 khntxnwithikareriyngladbthnghmdmiphunthanmacakkarepriybethiybkhakhxngsmachik echn khwiksxrt aelakareriyngladbaebbphsan sungichkarepriybethiybthnghmd O nlog n textstyle O n log n inkrnithiaeythisud 25 karkhnhaaebbthwiphakhsamarthichhakhuthiiklekhiyngidxyangmiprasiththphaphinkhnathikarkhnhaechingesnimsamarththaid nxkcaknn kardaeninkar echn karhasmachikthimikhamakaelanxythisud samarththaidxyangmiprasiththiphaphinaethwladbthimikareriyngladbaelwethann 26 tnim tnimkhnhaaebbthwiphakhthukichinkarkhnhadwykhntxnwithithikhlaykbkarkhnhaaebbthwiphakh tnimkhnhaaebbthwiphakh khuxokhrngsrangkhxmultnimaebbthwiphakhthimikardaeninkarodyxasyhlkkarkhxngkarkhnhaaebbthwiphakh raebiynintnimsamarththukkhnhaidodyichkhntxnwithithikhlaykbkarkhnhaaebbthwiphakh odyichewlaodyechliyinrupfngkchnxlkxrithum karephimaelalbkhxmulintnimkhnhaaebbthwiphakhkichewlaodyechliyinrupfngkchnxlkxrithumechnediywkn sungwithinicaichewlanxykwaewlainrupaebbechingesnthiichinkarephimhruxlbkhxmulinaethwladbthimikareriyngladbaelw aelatnimaebbthwiphakhyngsamarthdaeninkarthukxyangidehmuxnkbthisamarththainaethwladbthimikareriyngladbaelw rwmipthungkarhakhxbekhtaelakhathiiklekhiyng 27 xyangirktam tnimkhnhaaebbthwiphakhmkcamikhwamimsmdulrahwangsxngkhang thaihmiprasiththiphaphinkarkhnhanxykwakarkhnhaaebbthwiphakhelknxy singniyngnaipichidkbtnimkhnhaaebbthwiphakhthimiokhrngsrangprbsmdulexngid hruxkhuxtnimkhnhaaebbthwiphakhthisamarththaihpmkhxngtnexngmikhwamsmdulid ephraa tnimthimicanwnchnnxythisudethathicaepnipidaethbcaimthuksrangkhunmaely nxkehnuxcaktnimkhnhaaebbthwiphakhthimiokhrngsrangprbsmdulexngidaelw tnimmkcamikhwamimsmdulxyangrunaerngenuxngcakmicanwnpmphayinthimipmlukkhrbsxngpmnxymak thaihrayaewlainkarkhnhaodyechliyaelainkrnithiaeythisudiklekhiyngkbewlathiichinkrnithimikarepriybethiyb n displaystyle n khrng nxkcaknntnimkhnhaaebbthwiphakhyngichphunthiekbkhxmulmakkwaaethwladbthieriyngladbaelw 29 tnimkhnhaaebbthwiphakhcayumhnwykhwamcaphaynxkkhxngharddiskephuxichinkarkhnhaaebbrwderwenuxngcaktnimkhnhaaebbthwiphakhsamarthcdokhrngsranginrabbaefmkhxmulid sungtnimaebbbikhuxkarsrupwithikarkarcdraebiybtnimni odytnimaebbbimkthukichinkarcdraebiybphunthicdekbkhxmulrayayaw echn thankhxmul aelaaefmkhxmul 30 31 aehchching odypktiaelwsahrbkarichaethwladbaebbcbkhu tarangaehch sungkhuxokhrngsrangkhxmulthiechuxmoyngkhiykb en odyichfngkchnaehch casamarthnaaethwladbaebbcbkhuipichidrwderwkwakarkhnhaaebbthwiphakhinaethwladbraebiynthimikareriyngladbaelw 32 karichtarangaehchswnmakichewlaodyechliyaebbthwechliy xyangirktam aehchchingimsamarthichinkarhakhuthiiklekhiyng echn karkhanwnhakhathinxythisudtwthdip khathimakthisudtwthdip aelakhiythiiklekhiyngthisudid enuxngcakhakkarkhnhaimsaerccamikarkhunkhaidephiyngwakhaepahmaynnimmixyuinraebiynid dngnn karkhnhaaebbthwiphakhcungthuxepnwithikarthidithisudsahrbkarhakhupraephthnn enuxngcakichewlainrupfngkchnlxkarithumethann nxkcaknn kardaeninkarbangxyang echn karhasmachikthimikhamakhruxnxythisud samarththaidxyangmiprasiththiphaphinaethwladbthimikareriyngladbaelw aetimsamarththaidintarangaehch khntxnwithikartrwcsxbkarepnsmachikkhxngest pyhathiekiywkhxngkbkarkhnhakhux kartrwcsxbkarepnsmachikkhxngest khntxnwithithimifngkchnkarkhnha echn karkhnhaaebbthwiphakh samarthnamaichinkartrwcsxbkarepnsmachikkhxngestid nxkcakarkhnhaaebbthwiphakhaelwyngmikhntxnwithixun thiehmaasmkbkartrwcsxbkarepnsmachikkhxngestodyechphaamakkwa en khuxokhrngsrangkhxmulthieriybngayaelaepnpraoychndisudemuxkhxbekhtkhxngkhiymicakd odyaethwladbbitcaekbkhxmulodyichphunthinxythisudinrupaebbkhxngbit sungbitaetlatwkcaepntwaethnkhxngkhiyaetlatwinkhxbekhtkhxngkhiy aethwladbbitmikardaeninkarthirwderwmak odyichewlaephiyng O 1 displaystyle O 1 ethann 36 nxkcakaethwladbbitaelw Judy1 khxngaethwladbcudikyngsamarthcdekbkhiykhnad 64 bitidxyangmiprasiththiphaph sahrbphllphththiiklekhiyng twkrxngkhxngblum hruxkhuxokhrngsrangkhxmulthiekiywkbkhwamepnipidsungxasykaraehchching cakkekbestkhxngkhiyodykarekharhskhiysungcaxasy en aelafngkchnaehchhlayfngkchn swnmakaelw twkrxngkhxngblumcaichphunthikkekbkhxmulnxykwaaethwladbbitinkhnathikichewladaeninkarimidnankwa odyhakxasyfngkchnaehchthnghmd k displaystyle k fngkchn kartrwcsxbkarepnsmachikkhxngestcaichewladaeninkarephiyng O k displaystyle O k ethann xyangirktam twkrxngkhxngblumyngkhngmipyhaeruxngphlbwklwngxyu okhrngsrangkhxmulxun yngmiokhrngsrangkhxmulxun xikthimikarprbprungcakkarkhnhaaebbthwiphakhthngindankarkhnhaaelakardaeninkarxun thisamarththaidinaethwladbthimikareriyngladbaelw twxyangechn okhrngsrangkhxmulaebbechphaadan echn en en aela en samarthdaeninkarkhnha karhakhuthiiklekhiyng aelakardaeninkarxun thisamarththaidinaethwladbthimikareriyngladbaelw idxyangmiprasiththiphaphmakkwakarkhnhaaebbthwiphakh okhrngsrangkhxmulaebbechphaadanehlanisamarthdaeninkaridrwderwkwa ephraaichpraoychncakkhunsmbtikhxngkhiythimiaexththribiwt attribute bangxyang odypkticaepnkhiythiepncanwnetmthimikhnadelk dngnnsahrbkhiythiimmiaexththribiwtehlannkcathaihichewlaaelaphunthicdekbkhxmulmakkhun trabidthikhiynnsamarthcdladbid kardaeninkarehlaniksamarthdaeninkaridodyimtxngkhanungthungkhiy sungcamiprasiththiphaphxyangtaethiybethakbprasiththiphaphinaethwladbthimikareriyngladbiwaelw okhrngsrangkhxmulbangxyang echn aethwladbcudi samarthichwithikarhlayxyangrwmknephuxldpyhathiidklawipinkhnathikyngkhngprasiththiphaphaelakhwamsamarthinkardaeninkarhakhuthiiklekhiyngiwxyukarkhnhaaebbxunkarkhnhaaebbthwiphakhxyangmiexkrup karkhnhaaebbthwiphakhxyangmiexkrupcakkekbphltangrahwangdchnikhxngkhaklangpccubnaelakhaklangsxngtwtxipinkarwnsakhrnghnaiwaethnkhakhxbekht karkhnhaaebbthwiphakhxyangmiexkrupcaekbkhaphltangrahwangdchnikhxngkhaklanginkarwnsakhrngpccubnaeladchnikhxngkhaklanginkarwnsakhrngtxip sungtangcakkarkhnhaaebbthwiphakhthiekbkhadchnikhxngkhxbekhtbnaelalang ody en thiekbkhaphltangnicathukkhanwniwlwnghna twxyangechn thaaethwladbthikalngthukkhnhakhux 1 2 3 4 5 6 7 8 9 10 11 aelwkhaklang m displaystyle m khux 6 inkhnathikhaklangkhxngaethwladbyxyfngsayhrux 1 2 3 4 5 khux 3 aelakhaklangkhxngaethwladbyxyfngkhwahrux 7 8 9 10 11 khux 9 karkhnhaaebbthwiphakhxyangmiexkrupcaekbkha 3 enuxngcakdchnikhaklangtwtxipthngsxngtangkmiphltangkb 6 ethakn 40 ephuxthicaldphunthithiichinkarkhnha khntxnwithicabwkhruxlbphltangdngklawcakdchnikhxngkhaklangtwpccubn karkhnhaaebbthwiphakhxyangmiexkrupxacdaeninkaridrwderwemuxthukichinrabbthiimsamarthkhanwnkhaklangidxyangmiprasiththiphaphnk echn in en 41 karkhnhaaebbexksophennechiyl phaphkarcalxnginkhntxnkarhakhxbekhtbnephuxichsahrbkarkhnhaaebbthwiphakhinphayhlng karkhnhaaebbexksophennechiylkhyaykhxbekhtcakkarkhnhaaebbthwiphakhthaihsamarthdaeninkaridinraykarthiimcakdkhxbekht odycaerimtncakkarkhnhasmachiktwaerkthidchnixyuinrupkalngkhxngsxngaelamikhamakkwakhaepahmay caknncungkahnddchnikhxngkhannihepnkhxbekhtbn aelaerimdaeninkarkhnhaaebbthwiphakh karkhnhasmachiktwaerkthitrngtamenguxnikhcamikarwnsathnghmd log2 x 1 textstyle lfloor log 2 x 1 rfloor khrng kxnthicaerimkarkhnhaaebbthwiphakhsungcamikarwnsasungsud log2 x textstyle lfloor log 2 x rfloor khrng emux x displaystyle x khuxtaaehnngkhxngkhaepahmay karkhnhaaebbexksophennechiylsamarththanganidinraykarthimikarcakdkhxbekhtechnkn aetcamiprasiththiphaphdikwakarkhnhaaebbthwiphakhktxemuxkhaepahmayxyuiklkbbriewnerimtnkhxngaethwladb karkhnhaodykarpramanchwng phaphkarcalxngkarkhnhaodykarpramanchwngodyichkarpramankhainchwngechingesn odyintwxyangniimcaepntxngmikarkhnhaephimephraakarpramantaaehnngkhxngepahmayinaethwladbnnthuktxngaelw karnaipichxun xacmikarichfngkchnxuninkarpramantaaehnngkhxngepahmay karkhnhaodykarpramanchwngichkarpramantaaehnngkhxngkhaepahmayodyphicarnacaksmachikthimikhasungsudaelatasudinaethwladb aelakhnadkhxngaethwladb aetktangcakkarkhnhaaebbkxnhnathiichkarkhanwnkhaklangepnhlk enuxngcakxasyhlkkarthiwa khaklangmkimichkarkhadkarnthidithisudinhlaykrnithiepnipid echn inkrnithikhaepahmayxyuiklekhiyngkbkhaplaysudkhxngaethwladb 43 fngkchnkarpramanchwngthiniymichkn khux en kahndih A displaystyle A khuxaethwladb L R displaystyle L R khuxkhxbekhtlangaelakhxbekhtbntamladb aela T displaystyle T khuxkhaepahmay caidwakhaepahmaycaxyuhangcak L displaystyle L aela R displaystyle R epnrayapraman T AL AR AL displaystyle T A L A R A L emuxichkarpramankhainchwngechingesninaethwladbthimikaraeckaecngkhxngsmachikaebbexkruphruxiklekhiyngkbexkrup karkhnhaodykarpramanchwngcathakarepriybethiybthnghmd O log log n textstyle O log log n khrng 43 44 inkarthangancring karkhnhaodykarpramanchwngcadaeninkarchakwakarkhnhaaebbthwiphakhinaethwladbthimikhnadelk enuxngcakkarkhnhaodykarpramanchwngcatxngmikarkhanwnephimetim aetemuxkhnadaethwladbephimkhun xtrakarephimkhunkhxngkhwamsbsxnkhxngewlainkarkhnhaodykarpramanchwngcachakwakarkhnhaaebbthwiphakh xyangirktam singnisamarthchdechyidinkrnithiaethwladbmikhnadihymakethann 43 kareriyngsxnaebbessswn in en aethwladbaetlatwcamiphxynetxrthichiipyngsmachikthuktwkhxngaethwladbtxip dngnncungichkarkhnhaaebbthwiphakhephiynghnungkhrnginkarkhnhainthukaethwladb kareriyngsxnaebbessswn khuxethkhnikhthiichinkarephimkhwamerwinkarkhnhaaebbthwiphakhsahrbkhxmulthimikhaediywkninhlayaethwladbthimikareriyngladbaelw karkhnhaaeykkninaetlaaethwladbcaichewla O klog n textstyle O k log n emux k displaystyle k khuxcanwnaethwladbthnghmd kareriyngsxnaebbessswncaldewlakardaeninkarnnehluxephiyng O k log n textstyle O k log n odyxasykarekbkhxmulekiywkbsmachikaetlatwaelataaehnngkhxngmninaethwladbxunlngipinaethwladbaetlaxn aetedim kareriyngsxnaebbessswnthukphthnamaephuxaekpyhaekiywkb en idxyangmiprasiththiphaph pccubnkareriyngsxnaebbessswnyngthuknaipprayuktichindanxun xik echn inkarthaehmuxngkhxmul aelainxinethxrentophrothkhxl karprayuktichinkraf karkhnhaaebbthwiphakhthuknamaichkbkrafbangpraephth odykhaepahmaynncathukekbinrupkhxngohndaethnsmachikinaethwladb tnimkhnhaaebbthwiphakhkhuxhnungintwxyangnn emuxohndkhxngtnimthuktrwcsxb khntxnwithicaidruwaohndnnkhuxepahmayhruxim hruxkhaepahmaycaxyuintnimyxytnihn xyangirktam karkhnhaaebbthwiphakhsamarthnaipichidinkrafxunidxik echn inkrafaebbimmithisthangaelathwngnahnkechingbwk an undirected positively weighted graph khntxnwithicathrabcakkartrwcsxbohndid wa ohndnnmikhaethakbkhaepahmayhruxim thaimaelwesnechuxm incident edge idthiepnesnthangthisnthisudcakohndthikalngtrwcsxbxyuipyngohndepahmay echnediywkn tnimkhnhaaebbthwiphakhcaphicarnaesnechuxmipyngtnimyxyfngsayaelafngkhwaemuxohndthikalngtrwcsxbxyumikhaimethakbkhaepahmay sahrbkrafaebbimmithisthangaelathwngnahnkechingbwkthukkraf inkrnithiaeythisud khntxnwithicaichkartrwcsxbthnghmd O log n displaystyle O log n khrngcnkwacaecxohndepahmay Noisy binary search in noisy binary search mikhwamnacaepnthikarepriybethiybnncaihphllphththiimthuktxng khntxnwithikhxng Noisy binary search thukichaekpyhainkrnithikhntxnwithiimsamarthepriybethiybkhakhxngsmachikinaethwladbidxyangnaechuxthux inkarepriybethiybaetlakhusmachiknnmioxkasthikhntxnwithicaepriybethiybidphllphththiimthuktxng Noisy binary search samarthkhnhataaehnngthithuktxngkhxngepahmayidodymikhwamnacaepnthikhwbkhumkhwamnaechuxthuxkhxngphllphththiid thuk Noisy binary search catxngmikarepriybethiybxyangnxy 1 t log2 n H p 10H p displaystyle 1 tau frac log 2 n H p frac 10 H p khrngodyechliy odythi H p plog2 p 1 p log2 1 p displaystyle H p p log 2 p 1 p log 2 1 p khux en aela t displaystyle tau khux khwamnacaepnthikrabwnkarnncakhunkhataaehnngepahmaythiimthuktxng pyha noisy binary search echn en khuxkartham en thiaetktangknephuxthaywtthuhruxtwelkhnn odykhatxbthiidrbcakkhathamnnxacimichkhatxbthithuktxng karkhnhaaebbthwiphakhkhwxntm kardaeninkarkhnhaaebbthwiphakhinkhxmphiwetxraebbdngedimcaichkarwnsathnghmd log2 n 1 textstyle lfloor log 2 n 1 rfloor khrnginkrnithiaeythisud en sahrbkarkhnhaaebbthwiphakhcamikartrwcsxbthnghmd log2 n textstyle log 2 n khrng aethncanwnkarwnsainkrabwnkardngedim aettwprakxbkhngthi constant factor camikhanxykwahnung thaihmikhakhwamsbsxnkhxngewlanxylngemuxthanganin en krabwnkarkhxngkarkhnhaaebbthwiphakhkhwxntmthiaethcring hruxkhuxkrabwnkarthicakhunkhaphllphththithuktxngesmx catxngmikartrwcsxbxyangnxy 1p ln n 1 0 22log2 n textstyle frac 1 pi ln n 1 approx 0 22 log 2 n khrnginkrnithiaeythisud emux ln textstyle ln khux lxkarithumthrrmchati krabwnkarkhxngkarkhnhaaebbthwiphakhkhwxntmthiaethcringbangxndaeninkartrwcsxbthnghmd 4log605 n 0 433log2 n textstyle 4 log 605 n approx 0 433 log 2 n khrnginkrnithiaeythisud inthangtrngknkham en khuxkhntxnwithikhwxntmthidithisudsahrbkarkhnhasmachikinraykaraebbimmiladb odyichkartrwcsxbthnghmd O n displaystyle O sqrt n khrngprawtiaenwkhideruxngkareriyngladbkhxmulinraykarephuxkarkhnhathirwderwkhunthukkhidkhntngaetinyukhobran twxyangthiekaaekthisudthiepnthiruckknkhux aephncaruk Inakibit Anu inxanackrbabiolninchwng 200 pikxnkhristskrach aephncarukprakxbdwytwelkh en 500 twaelaswnklbkhxngmnsungthukeriyngladbtam en thaihkarkhnhakhxmulechphaathaidngaykhun nxkcaknn raykarchuxhlayraykarthithukeriyngladbtamtwxksrtwaerkkhxngchuxthukkhnphbthihmuekaaxieciyn khathxlik sungkhuxphcnanukrmphasalatinthiekhiynesrcinpikh s 1286 khuxphlnganchinaerkthimikarxthibaykdkareriyngladbkhasphthtamladbtwxksr trngkhamkbkareriyngephiyngsxngsamtwxksraerk 9 inpikh s 1946 en idklawthungkarkhnhaaebbthwiphakhepnkhrngaerkin en sungkhuxhlksutrmhawithyalyphunthanindankarkhanwn 9 inpikh s 1957 en idtiphimphwithikaraerksahrbkarkhnhaodykarpramanchwng 9 khntxnwithikarkhnhaaebbthwiphakhthithuktiphimphthukxnlwnaetthanganidinaethwladbthimikhnadnxykwakalngkhxngsxngethakbhnung cnkrathnginpikh s 1960 emux en idtiphimphkhntxnwithikarkhnhaaebbthwiphakhthisamarththanganidinaethwladbthukpraephth inpikh s 1962 Hermann Bottenbruch idnaesnxkarna en ipichinkarkhnhaaebbthwiphakhthiwangkarepriybethiybkhwamethakninkrabwnkarthaysud sungcaephimcanwnkarwnsaodyechliyipethakbhnung aetldcanwnkarepriybethiybinhnungkarwnsaehluxephiynghnungkhrngethannkarkhnhaaebbthwiphakhxyangmiexkrupthukphthnaody A K Chandra cakmhawithyalysaetnfxrdinpikh s 1971 9 inpikh s 1986 en aela en idkhidkhn en ephuxaekpyhakarkhnhaekiywkb en pyhakarnaipichnganthungaemaenwkhidphunthankhxngkarkhnhaaebbthwiphakhcakhxnkhangtrngiptrngma aetenuxhakhxngmnxacsbsxnxyangnaprahladic odnld khnuth 2 emux en idmxbhmaykarkhnhaaebbthwiphakhihepnnganinchneriynsahrbopraekrmemxrmuxxachiph ekhakhnphbwahlngkarthanganhlaychwomng kwa 90 khxngopraekrmemxrimsamarthhakhatxbthithuktxngid hlk aelwepnephraawaopraekrmimsamarththanganid hruximkkhunkhathiimthuktxnginkarthdsxb en 62 karsuksathithuktiphimphinpikh s 1988 phbwacaktaraeriyn 20 elm miephiyng 5 elmthiaesdngrhs code thithuktxngsahrbkarkhnhaaebbthwiphakh yingipkwann karichngankarkhnhaaebbthwiphakhkhxngebnthliysungthuktiphimphinhnngsuxchux Programming Pearls inpikh s 1986 klbmi en thiimthuktrwcphbkwa 20 pi khlngopraekrmphasacawasahrbkarkhnhaaebbthwiphakhkmi overflow bug aebbediywknmananmakkwa 9 pi inkarichngancring twaeprthiaethnkhadchnimkcamikhnadkhngthi canwnetm sungxacthaihekidpyha en inaethwladbthimikhnadihyid thakhaklangmikhaethakb L R2 displaystyle frac L R 2 aelw L R displaystyle L R xacmikhaekinkhxbekhtkhxngcanwnetmkhxngchnidkhxmulthiichekbkhaklangid thungaem L displaystyle L aela R displaystyle R camikhaxyuphayinkhxbekhtktam tha L displaystyle L aela R displaystyle R imepnlb eraxachlikeliyngpyhanidwykarkhanwnkhaklangdwysmkar L R L2 displaystyle L frac R L 2 aethn karwnxyangimmithisinsudxacekidkhunemuxenguxnikhkarsinsudkarwnnnimchdecn emux L displaystyle L mikhaekin R displaystyle R karkhnhacalmehlwaelaaesdngphlwakarkhnhalmehlw nxkcaknnaelw karwncatxngsinsudemuxkhaepahmaythukkhnphbaelw hruxemuxkarkhnhadaeninkaripcnsudaelw dngnnkartrwcsxbwakarkhnhannsaerchruxlmehlwcungcaepntxngthainkhntxnthaysudkhxngkarkhnha ebnthliykhnphbwaopraekrmemxrswnihythiimsamarthichngankarkhnhaaebbthwiphakhidmkcasrangkhxphidphladekiywkbkarkahndenguxnikhkarsinsudkarwn 66 khlngopraekrmkhlngopraekrmthirxngrbaelaphrxmichinphasakhxmphiwetxrtang midngtxipni phasasimifngkchn bsearch in en sungodythwipaelwcaichnganphankarkhnhaaebbthwiphakh thungaemcaimcaepntxngichxyangnnktam ilbrariaemaebbmatrthankhxngphasasiphlsphlsmifngkchn binary search lower bound upper bound aela equal range inkhlngopraekrmofbxs Phobos khxng en omdul std range michnidkhxmul SortedRange khunkhamacakfngkchn sort aela assumeSorted aelawithikar contains equaleRange lowerBound aela trisect sungichethkhnikhkarkhnhaaebbthwiphakhepnkhaerimtnsahrbkhxbekhtthimikarekhathungaebbsum phasaokhbxlmi SEARCH ALL sahrbkardaeninkarkhnhaaebbthwiphakhintarangokhbxlaebbmiladb inaephkekckhlngopraekrmmatrthan sort khxng en mifngkchn Search SearchInts SearchFloat64s aela SearchStrings sungnaipichinkarkhnhaaebbthwiphakhodythwip rwmipthungkarnaipichnganodyechphaaephuxkhnhacanwnetm elkhthsniym aelastring tamladb phasacawami binarySearch sungepnchudwithikaraebbkhngthithi en in a rel nofollow class external text href http download oracle com javase 7 docs api java util Arrays html Arrays a aela a rel nofollow class external text href http download oracle com javase 7 docs api java util Collections html Collections a thixyuinaephkekcmatrthan java util sahrbkardaeninkarkhnhaaebbthwiphakhbnaethwladbcawaaelabnraykar tamladb dxtentefrmewirk 2 0 khxngimokhrsxfth mikhntxnwithikarkhnhaaebbthwiphakhrun en aebbkhngthiinklumkhxlelkchnaebbthan twxyangechn withikarkhxng System Array khux BinarySearch lt T gt T array T value sahrbphasaxxbeckthif si krxbngan okok miwithikar a rel nofollow class external text href https developer apple com library mac documentation Cocoa Reference Foundation Classes NSArray Class NSArray html apple ref occ instm NSArray indexOfObject inSortedRange options usingComparator NSArray indexOfObject inSortedRange options usingComparator a inaemkhoxexsethn 10 6 krxbngan en khxngaexpepilyngmifngkchn a rel nofollow class external text href https developer apple com library mac documentation CoreFoundation Reference CFArrayRef Reference reference html apple ref c func CFArrayBSearchValues CFArrayBSearchValues a phasaiphthxnmiomdul bisect khlasaethwladbkhxngphasarubimiwithikar bsearch sungmikarhakhuthiiklekhiyngxyuintwduephimwithiaebngkhrungechingxrrthaelaxangxingechingxrrth O displaystyle O khux sykrnoxihy aela log displaystyle log khux lxkarithum insykrnoxihy thankhxnglxkarithumimichsingthisakhyenuxngcaklxkarithuminrupthanhnungksamarthekhiyninruplxkarithumthanxun id nnkhux logb n logk n logk b displaystyle log b n log k n div log k b emux logk b displaystyle log k b epnkhakhngthi khntxnwithikarkhnhaid thixasykarepriybethiybxyangediywsamarthaesdnginruptnimkhnhaaebbthwiphakhid esnthangphayin khuxesnthangid thierimcakrakipyngpmthimixyuintnim ih I displaystyle I epnkhwamyawkhxngesnthangphayin sungkhuxphlrwmkhwamyawkhxngesnthangphayinthukesnintnim thasmachikaetlatwmioxkasthicathukkhnhaethakn krniechliycaethakb 1 In displaystyle 1 frac I n hruxkkhuxhnungbwkkhaechliykhxngkhwamyawkhxngesnthangphayinthnghmdintnim ephraaesnthangphayinkhuxtwaethnkhxngsmachikthikhntxnwithikarkhnhanniddaeninkarepriybethiybkhakhxngmnkbkhaepahmay khwamyawkhxngesnthangphayinehlaniaethncanwnkarwnsahlngcakpmrak karephimkhaechliykhxngkhwamyawniincanwnkarwnsahnungkhrngthirakcungihphllphthepnkrniechliy dngnn haktxngkarldcanwnkarepriybethiybodyechliycatxngldkhakhwamyawesnthangphayin I displaystyle I sungtnimsahrbkarkhnhaaebbthwiphakhkhuxaebbtnimthiidthakarldkhwamyawesnthangphayinniaelw ody Knuth 1998 idphisucnwakhwamyawesnthangphaynxk khwamyawesnthangipyngpmthukpmthimipmlukthngsxngxyuaelw caldlngemuxpmphaynxk pmthiimmipmluk xyurahwangchnsxngchnthitidknkhxngtnim singniyngsamarthnaipprayuktichkbesnthangphayinidxikdwy enuxngcakkhwamyawesnthangphayin I displaystyle I mikhwamsmphnthechingesntrngkbkhwamyawesnthangphaynxk E displaystyle E sahrbtnimthimipm n displaystyle n pm caidwa I E 2n displaystyle I E 2n emuxtnimyxyaetlatnmicanwnpmthiethakn hruxkhuxaethwladbnnsamarththukaebngkhrungidkhnadethakninthukkarwnsa aelwpmphaynxkaelapmphxaemphayinkhxngmncaxyuphayinsxngchnthitidknnn cungklawidwa karkhnhaaebbthwiphakhsamarthldcanwnkarepriybethiybodyechliyidenuxngcaktnimepriybethiybkhxngmnmikhwamyawesnthangphayinthinxythisudethathicaepnipid 14 Knuth 1998 idaesdngbnaebbcalxngkhxmphiwetxr en khxngekha sungthukxxkaebbephuxepntwaethnkhxngkhxmphiwetxrthrrmda waewlakardaeninkarodyechliysahrbkarkhnhathisaerckhux 17 5log2 n 17 textstyle 17 5 log 2 n 17 epriybethiybkb 18log2 n 16 textstyle 18 log 2 n 16 sahrbkarkhnhaaebbthwiphakhpkti khwamsbsxnkhxngewlainkrninicaephimkhunchakwaelknxy aetcamikhaerimtnthimakkwa 18 Knuth 1998 idthakarwiekhraahprasiththiphaphdanewlaxyangepnthangkarkhxngkhntxnwithikarkhnhathngsxngni inkhxmphiwetxr en khxngekha sungekhaidxxkaebbephuxepntwaethnkhxngkhxmphiwetxrthwip karkhnhaaebbthwiphakhichewla 18log n 16 textstyle 18 log n 16 odyechliysahrbkarkhnhathisaerc inkhnathikarkhnhaechingesnthimi en thithayraykarcaichewla 1 75n 8 5 n mod 24n textstyle 1 75n 8 5 frac n text mod 2 4n karkhnhaechingesncamikhakhwamsbsxnerimtnnxykwa ephraatxngichkarkhanwnnxykwa aetkhakhwamsbsxncamikhaephimkhunrwderwkwakarkhnhaaebbthwiphakh inkhxmphiwetxr MIX karkhnhaaebbthwiphakhcathanganiddikwakarkhnhaechingesnthimi sentinel node emux n gt 44 textstyle n gt 44 14 23 karephimkhainladbthimikareriyngaelwhruxinrupaebbkhiyslbsungsudaelatasudcaihphllphthepntnimkhnhaaebbthwiphakhthimiewlakardaeninkarthimakthisudinkrniechliyaelakrnithiaeythisud 28 karkhnhaintarangaehchbangxnsamarthdaeninkardwyewlathiaennxnid 33 enuxngcakkartngkhabitthnghmdthifngkchnaehchchiipsahrbkhiyechphaaxacsngphlkrathbtxkartrwcsxbkhiyxun thimitaaehnngaehchediywknid mikarprbprungtwkrxngkhxngblumephuxphthnakhakhwamsbsxnhruxephuxsnbsnunkardaeninkarlbsmachik twxyangechn twkrxngnkkaehwasungich en ephuxphthnaprasiththiphaph nnkhux aethwladbthimikhnadethakb 1 3 7 15 31 xangxing Williams Jr Louis F 22 emsayn 1976 A modification to the half interval search binary search method Proceedings of the 14th ACM Southeast Conference ACM pp 95 101 doi 10 1145 503561 503582 cakaehlngedimemux 12 minakhm 2017 subkhnemux 29 mithunayn 2018 Knuth 1998 6 2 1 Searching an ordered table subsection Binary search Butterfield amp Ngondi 2016 p 46 1990 1st ed MIT Press and McGraw Hill ISBN 0 262 03141 8 exrik dbebilyu iwssitn Binary Search cakaemthewild Flores Ivan Madpis George 1 September 1971 Average binary search length for dense ordered lists 14 9 602 603 doi 10 1145 362663 362752 ISSN 0001 0782 S2CID 43325465 Knuth 1998 6 2 1 Searching an ordered table subsection Algorithm B Bottenbruch Hermann 1 April 1962 Structure and use of ALGOL 60 9 2 161 221 doi 10 1145 321119 321120 ISSN 0004 5411 S2CID 13406983 Procedure is described at p 214 43 titled Program for Binary Search Knuth 1998 6 2 1 Searching an ordered table subsection History and bibliography Kasahara amp Morishita 2006 pp 8 9 Sedgewick amp Wayne 2011 3 1 subsection Rank and selection Goldman amp Goldman 2008 pp 461 463 Sedgewick amp Wayne 2011 3 1 subsection Range queries Knuth 1998 6 2 1 Searching an ordered table subsection Further analysis of binary search Knuth 1998 6 2 1 Searching an ordered table Theorem B Chang 2003 p 169 Knuth 1997 2 3 4 5 Path length Knuth 1998 6 2 1 Searching an ordered table subsection Exercise 23 Rolfe Timothy J 1997 Analytic derivation of comparisons in binary search ACM SIGNUM Newsletter 32 4 15 19 doi 10 1145 289251 289255 S2CID 23752485 Khuong Paul Virak 2017 Array Layouts for Comparison Based Searching Journal of Experimental Algorithmics 22 Article 1 3 1509 05053 doi 10 1145 3053370 S2CID 23752485 Knuth 1997 2 2 2 Sequential Allocation Beame Paul 2001 Optimal bounds for the predecessor problem and related problems 65 1 38 72 doi 10 1006 jcss 2002 1822 Knuth 1998 Answers to Exercises 6 2 1 for Exercise 5 Knuth 1998 6 2 1 Searching an ordered table Knuth 1998 5 3 1 Minimum Comparison sorting Sedgewick amp Wayne 2011 3 2 Ordered symbol tables Sedgewick amp Wayne 2011 3 2 Binary Search Trees subsection Order based methods and deletion Knuth 1998 6 2 2 Binary tree searching subsection But what about the worst case Sedgewick amp Wayne 2011 3 5 Applications Which symbol table implementation should I use Knuth 1998 5 4 9 Disks and Drums Knuth 1998 6 2 4 Multiway trees Knuth 1998 6 4 Hashing Knuth 1998 6 4 Hashing subsection History Dietzfelbinger Martin Meyer auf der Heide Friedhelm Rohnert Hans August 1994 Dynamic perfect hashing upper and lower bounds 23 4 738 761 doi 10 1137 S0097539791194094 Morin Pat Hash tables PDF p 1 subkhnemux 28 March 2016 Knuth 2011 7 1 3 Bitwise Tricks and Techniques Silverstein Alan Judy IV shop manual PDF Hewlett Packard pp 80 81 Fan Bin Andersen Dave G Kaminsky Michael Mitzenmacher Michael D 2014 Cuckoo filter practically better than Bloom Proceedings of the 10th ACM International on Conference on Emerging Networking Experiments and Technologies pp 75 88 doi 10 1145 2674005 2674994 Bloom Burton H 1970 Space time trade offs in hash coding with allowable errors 13 7 422 426 10 1 1 641 9096 doi 10 1145 362686 362692 S2CID 7931252 Knuth 1998 6 2 1 Searching an ordered table subsection An important variation Knuth 1998 6 2 1 Searching an ordered table subsection Algorithm U Moffat amp Turpin 2002 p 33 Knuth 1998 6 2 1 Searching an ordered table subsection Interpolation search Knuth 1998 6 2 1 Searching an ordered table subsection Exercise 22 Perl Yehoshua Itai Alon Avni Haim 1978 Interpolation search a log log n search 21 7 550 553 doi 10 1145 359545 359557 S2CID 11089655 Liu Ding 6 July 2001 Lower bounds for intersection searching and fractional cascading in higher dimension 33rd ACM pp 322 329 doi 10 1145 380752 380818 ISBN 978 1 58113 349 3 subkhnemux 30 June 2018 Liu Ding 1 March 2004 Lower bounds for intersection searching and fractional cascading in higher dimension PDF Journal of Computer and System Sciences phasaxngkvs 68 2 269 284 10 1 1 298 7772 doi 10 1016 j jcss 2003 07 003 ISSN 0022 0000 subkhnemux 30 June 2018 Emamjomeh Zadeh Ehsan Kempe David Singhal Vikrant 2016 Deterministic and probabilistic binary search in graphs 48th pp 519 532 1503 00805 doi 10 1145 2897518 2897656 Ben Or Michael Hassidim Avinatan 2008 The Bayesian learner is optimal for noisy binary search and pretty good for quantum as well PDF 49th pp 221 230 doi 10 1109 FOCS 2008 58 ISBN 978 0 7695 3436 7 Pelc Andrzej 1989 Searching with known error probability Theoretical Computer Science 63 2 185 202 doi 10 1016 0304 3975 89 90077 7 Winklmann K Coping with errors in binary search procedures 10th doi 10 1145 800133 804351 Pelc Andrzej 2002 Searching games with errors fifty years of coping with liars Theoretical Computer Science 270 1 2 71 109 doi 10 1016 S0304 3975 01 00303 6 Renyi Alfred 1961 On a problem in information theory Magyar Tudomanyos Akademia Matematikai Kutato Intezetenek Kozlemenyei phasahngkari 6 505 516 0143666 Hoyer Peter Neerbek Jan Shi Yaoyun 2002 Quantum complexities of ordered searching sorting and element distinctness 34 4 429 448 quant ph 0102078 doi 10 1007 s00453 002 0976 3 S2CID 13717616 Childs Andrew M Landahl Andrew J Parrilo Pablo A 2007 Quantum algorithms for the ordered search problem via semidefinite programming Physical Review A 75 3 032335 quant ph 0608161 Bibcode 2007PhRvA 75c2335C doi 10 1103 PhysRevA 75 032335 S2CID 41539957 1996 A fast quantum mechanical algorithm for database search 28th Philadelphia PA pp 212 219 quant ph 9605043 doi 10 1145 237814 237866 1957 Addressing for random access storage IBM Journal of Research and Development 1 2 130 146 doi 10 1147 rd 12 0130 2n 1 A000225 8 mithunayn 2016 thi ewyaebkaemchchin Retrieved 7 May 2016 Lehmer Derrick 1960 Teaching combinatorial tricks to a computer Proceedings of Symposia in Applied Mathematics Vol 10 pp 180 181 doi 10 1090 psapm 010 1986 Fractional cascading I A data structuring technique PDF 1 1 4 133 162 10 1 1 117 8349 doi 10 1007 BF01840440 S2CID 12745042 1986 Fractional cascading II Applications PDF 1 1 4 163 191 doi 10 1007 BF01840441 S2CID 11232235