คำถามติดแท็ก binary-search

3
ทำไมการค้นหาแบบไบนารี่จึงเร็วกว่าการค้นหาแบบไตรภาค
การค้นหาอาเรย์ขององค์ประกอบโดยใช้การค้นหาแบบไบนารี่จะใช้เวลาในกรณีที่ซ้ำที่สุดการทำซ้ำเพราะในแต่ละขั้นตอนเราตัดแบ่งครึ่งของพื้นที่การค้นหาของเรา หากเราใช้ 'การค้นหาแบบไตรภาค' แทนเราจะตัดพื้นที่การค้นหาของเราสองในสามในแต่ละการวนซ้ำดังนั้นกรณีที่แย่ที่สุดควรใช้การซ้ำ ...log 2 N log 3 N &lt; log 2 NNNNlog2Nlog2⁡N\log_2 Nlog3N&lt;log2Nlog3⁡N&lt;log2⁡N\log_3 N < \log_2 N ดูเหมือนว่าการค้นหาแบบไตรภาคเร็วกว่าแล้วทำไมเราถึงใช้การค้นหาแบบไบนารี่?

2
เหตุใดบันทึกใน big-O ของการค้นหาแบบไบนารีจึงไม่ได้เป็นฐาน 2
ฉันยังใหม่กับการเข้าใจอัลกอริทึมวิทยาศาสตร์คอมพิวเตอร์ ฉันเข้าใจกระบวนการค้นหาแบบไบนารี แต่ฉันมีความเข้าใจผิดเล็กน้อยเกี่ยวกับประสิทธิภาพ ในขนาดขององค์ประกอบมันจะใช้เวลาโดยเฉลี่ยnขั้นตอนในการค้นหาองค์ประกอบเฉพาะ การฐาน 2 ลอการิทึมของอัตราผลตอบแทนที่ทั้งสองฝ่ายเข้าสู่ระบบ2 ( s ) = n ดังนั้นจะไม่ค่าเฉลี่ยของจำนวนขั้นตอนสำหรับการค้นหาแบบทวิภาคจะเข้าสู่ระบบ2 ( s ) ?s = 2ns=2ns = 2^nnnnเข้าสู่ระบบ2( s ) = nlog2⁡(s)=n\log_2(s) = nเข้าสู่ระบบ2( s )log2⁡(s)\log_2(s) บทความนี้วิกิพีเดียในการค้นหาแบบทวิภาคกล่าวว่าผลการดำเนินงานเฉลี่ย ) ทำไมเป็นเช่นนี้ ทำไมไม่ได้หมายเลขนี้เข้าสู่ระบบ2 ( n ) ?O ( บันทึกn )O(log⁡n)O(\log n)เข้าสู่ระบบ2( n )log2⁡(n)\log_2(n)

2
มีการศึกษาหรือทฤษฎีเบื้องหลังการรวมการค้นหาแบบฐานสองและการค้นหาแบบสอดแทรกหรือไม่?
ฉันเพิ่งอ่านอัลกอริทึมนี้ยังสามารถใช้เป็นอัลกอริทึมการค้นหาแบบไบนารี่ได้หรือไม่ และจำได้ว่าไม่กี่ปีหลังฉันเขียนดัชนี / ค้นหาไฟล์บันทึกเพื่อค้นหารายการบันทึกในไฟล์ข้อความธรรมดาขนาดใหญ่ตามหน้าต่างวันที่ / เวลา ในขณะที่ทำสิ่งนี้ฉันตัดสินใจลองค้นหาการแก้ไข (ฉันไม่รู้ว่ามันคือสิ่งที่เรียกว่าฉันเองก็ตกหลุมคิดด้วยตัวเอง) จากนั้นด้วยเหตุผลบางอย่างฉันยังคงความคิดของการสลับขั้นตอนการแก้ไขด้วยขั้นตอนการแยกไบนารี: ในขั้นตอนที่ 0 ฉันจะแก้ไขการตัดสินใจเลือกจุดทดสอบแล้วขั้นตอนที่ 1 ฉันจะใช้จุดกึ่งกลางที่แน่นอน ฯลฯ จากนั้นฉันเปรียบเทียบระบบโดยใช้การค้นหาแบบสอดแทรกที่บริสุทธิ์การค้นหาแบบไบนารีที่แท้จริงและความพยายามในการรวมกันของฉัน วิธีการสลับเป็นผู้ชนะที่ชัดเจนทั้งในเวลาและจำนวนการทดสอบที่จำเป็นก่อนที่จะหาชุดของเวลาที่สุ่มเลือก ได้รับแรงบันดาลใจจากคำถามที่เชื่อมโยงฉันเพิ่งทำการค้นหาอย่างรวดเร็วสำหรับ "การค้นหาการแก้ไขแบบสลับและการค้นหาแบบไบนารี" และไม่พบอะไรเลย ฉันได้ลองใช้ "การค้นหาแบบสอดแทรกการแก้ไขแบบป้องกันความเสี่ยง" ตามที่แนะนำในความคิดเห็นของฉันในคำตอบข้อใดข้อหนึ่ง ฉันเจอสิ่งที่รู้หรือไม่? มีเหตุผลทางทฤษฎีใดที่ทำให้ข้อมูลบางประเภทเร็วขึ้น? โดยทั่วไปไฟล์บันทึกจะมีขนาดใหญ่ในเวลานั้น (เช่นข้อความขนาด 1-2 GB ซึ่งอาจค้นหาได้ 10 ล้านแถว) และการแพร่กระจายของวันที่ / เวลานั้นซับซ้อนด้วยการระเบิดของกิจกรรมเวลาสูงสุดทั่วไปและช่วงเวลาที่เงียบสงบ การทดสอบเกณฑ์มาตรฐานของฉันสุ่มตัวอย่างจากการกระจายเวลาเป้าหมายเท่า ๆ กันเพื่อค้นหา

3
อัลกอริทึมนี้ยังสามารถใช้เป็นอัลกอริทึมการค้นหาแบบไบนารี่ได้หรือไม่?
ในขณะที่ทำรหัสกะตะที่สอง(ซึ่งขอให้คุณใช้อัลกอริทึมการค้นหาแบบไบนารีห้าครั้งแต่ละครั้งด้วยวิธีการที่แตกต่างกัน) ฉันได้มากับโซลูชันที่แตกต่างกันเล็กน้อยซึ่งทำงานดังนี้: หากฉันมีอาร์เรย์ที่เรียงลำดับความยาว 100 และฉันเห็นว่าเขตข้อมูลเริ่มต้นมีหมายเลข 200 และเขตข้อมูลสิ้นสุดประกอบด้วยหมายเลข 400 ฉันในฐานะคณิตศาสตร์ที่เรียนรู้มนุษย์น่าจะเริ่มค้นหารอบ ๆ เขต 35 ถ้าฉันกำลังค้นหา หมายเลข 270 และไม่ใช่ฟิลด์ 50 เหมือนในอัลกอริธึมการค้นหาไบนารีปกติ จากนั้นถ้าตัวเลขในฟิลด์ 35 ของอาร์เรย์คือ 270, 35 คือดัชนีที่ฉันค้นหา หากไม่ใช่กรณีที่ฉันสามารถเปรียบเทียบจำนวนที่ฉันได้รับ (พูด 280) และทำซ้ำการดำเนินการโดยใช้ส่วนล่างของอาร์เรย์ (ดังนั้นฉันจึงมี 35 ฟิลด์กับเขตข้อมูลเริ่มต้นที่มี 200 และเขตสิ้นสุดที่มี 280) ถ้า จำนวนที่ฉันค้นพบมีค่ามากกว่าสิ่งที่ฉันค้นหาหรือส่วนบนของอาร์เรย์ (บอกว่าฉันได้ 260: ตอนนี้ฉันมีดัชนี 65 ตัว, อันแรกที่มี 260 และอันสุดท้ายที่มี 400 ในแนวตั้งฉันจะมุ่งหน้าแบบ Torward ดัชนี 4 ของอาร์เรย์ย่อยนี้ซึ่งเป็นดัชนี …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.