โครงสร้างข้อมูลที่ใช้การเปรียบเทียบสำหรับการค้นหารายการ


34

มีโครงสร้างข้อมูลที่ใช้อาร์เรย์ที่ไม่มีการเรียงลำดับของรายการnดำเนินการประมวลผลล่วงหน้าในO(n)และค้นหาคำตอบ: มีองค์ประกอบxในรายการแต่ละแบบสอบถามในเวลาที่เลวร้ายที่สุดO(logn)หรือไม่

ฉันคิดว่ามันไม่มีจริง ๆ ดังนั้นหลักฐานที่แสดงว่าไม่มีใครได้รับการต้อนรับด้วย


3
(1) ฉันไม่รู้ว่าทำไมคุณถึงพูดว่า "แน่นอนฉันจะพิจารณาเวลาที่คาดหวัง" เพราะคุณไม่ได้ระบุว่า "คาดหวัง" ในคำถามของคุณเลย โปรดลองระบุคำถามของคุณให้ละเอียดยิ่งขึ้นก่อนพูด“ แน่นอน” (2) โปรดระบุ“ ไม่แฮชได้”
Tsuyoshi Ito

2
(1) ฉันเห็น ขอบคุณสำหรับคำอธิบาย ถ้ามีคนถามว่า“ คุณสนใจเวลาทำงานหรือไม่?” คำตอบนั้นแน่นอน“ แน่นอน” :) (2) ฉันคิดว่า“ การกระทำที่ได้รับอนุญาตเพียงอย่างเดียวคือการเปรียบเทียบสองค่าในรายการ” แม่นยำกว่า มากกว่าเพียงแค่ระบุว่า "ไม่แฮช" คุณสามารถแก้ไขคำถามเพื่อให้คนไม่ต้องอ่านความคิดเห็นเพื่อทำความเข้าใจว่า "ไม่แฮช" หมายถึงอะไร?
Tsuyoshi Ito

3
ถ้าคุณไม่สามารถพิสูจน์ได้ทำไมคุณถึงรู้ว่ามันเป็นไปไม่ได้ หากเป็นการออกกำลังกายในตำราหรือชั้นเรียนคุณกำลังขอเว็บไซต์ผิด
Tsuyoshi Ito

6
นี่เป็นคำถามของคุณหรือไม่: มีโครงสร้างข้อมูลที่ใช้อาร์เรย์ที่ไม่มีการเรียงลำดับของรายการ n ดำเนินการประมวลผลล่วงหน้าใน O (n) และค้นหาคำตอบ: มีองค์ประกอบ x ในรายการแต่ละแบบสอบถามในเวลาที่เลวร้ายที่สุด O (log n) หรือไม่
sdcvvc

2
@Filip: มันดูง่ายไหม? ถ้าเป็นจริงฉันก็เห็นด้วยที่จะแก้ปัญหา
Tsuyoshi Ito

คำตอบ:


30

นี่เป็นข้อพิสูจน์ว่าเป็นไปไม่ได้ สมมติว่าคุณสามารถสร้างโครงสร้างข้อมูลดังกล่าว สร้างมัน แล้วเลือกรายการที่สุ่มจากรายการเพิ่มεแต่ละของพวกเขาที่εมีขนาดเล็กกว่าความแตกต่างระหว่างสองรายการในรายการและทำการสอบถามเพื่อตรวจสอบว่ารายการใด ๆ ที่เกิดขึ้นอยู่ใน รายการ. คุณได้ทำการค้นหาO ( n )ครั้งn/lognϵϵO(n)

ผมอยากที่จะอ้างว่ารถของคุณได้มีเพียงพอที่จะบอกได้ว่ารายการในรายการเดิมมีขนาดเล็กกว่าหรือใหญ่กว่าใด ๆ รายการใหม่ข สมมติว่าคุณไม่สามารถบอกได้ จากนั้นเนื่องจากนี่เป็นรูปแบบการเปรียบเทียบคุณจะไม่ทราบว่าaเท่ากับbหรือไม่ซึ่งขัดแย้งกับสมมติฐานที่ว่าโครงสร้างข้อมูลของคุณทำงานabab

ตอนนี้ตั้งแต่รายการที่คุณเลือกที่จะเป็นแบบสุ่มรถของคุณได้มีโอกาสสูงที่ได้รับข้อมูลเพียงพอที่จะแบ่งรายชื่อเดิมเข้าn / log nรายการแต่ละขนาดO ( บันทึกn ) โดยการเรียงลำดับแต่ละรายการเหล่านี้คุณจะได้รับO ( n log log n )แบบสุ่ม- อัลกอริทึมการเรียงลำดับเวลาตามการเปรียบเทียบเท่านั้นซึ่งเป็นข้อขัดแย้งn/lognn/lognO(logn)O(nloglogn)


คำแนะนำเล็กน้อยเพื่อช่วยในการทำความเข้าใจหลักฐาน (สมมติว่าฉันเข้าใจถูกต้องเองแน่นอน): รายการควรกรอกโดยรายการหลังจากϵได้รับการเพิ่มพวกเขา; การเปรียบเทียบการค้ำประกันรูปแบบที่คุณทราบว่ากรณีที่และถือ; รายการn / log nอยู่ใน 'ลำดับจากน้อยไปหามาก': ทุกองค์ประกอบในรายการที่สูงกว่าจะสูงกว่าทุกองค์ประกอบในรายการที่ต่ำกว่า หลังจากคำสั่งเดิมที่คุณมีเพียงพอข้อมูลที่จะทำให้รายการที่อยู่รอบ ๆ รายการที่คุณสุ่มเลือกbϵababn/logn
อเล็กซ์บริงค์สิบ

(ต่อ) โปรดทราบว่าคุณไม่จำเป็นต้องสร้างรายการในเวลาที่กำหนดเพื่อให้หลักฐานแสดงได้ชัดเจน
Alex สิบ Brink

ฉันไม่เงียบเลยที่จะเข้าใจหลักฐานนี้ ความขัดแย้งสุดท้ายนั้นปิด "อัลกอริทึมตามการเปรียบเทียบเท่านั้น" แต่ในขั้นตอนแรกของอัลกอริทึมของเราเราได้เพิ่มให้กับแต่ละรายการ (เพิ่มเติมซึ่ง " ϵนั้นเล็กกว่าความแตกต่างระหว่างสองรายการในรายการ") เหตุใดเรายังคงให้เหตุผลว่าอัลกอริทึมของเรายังคงทำการเปรียบเทียบเท่านั้นหากเราสมมติว่ารายการของเรามีลำดับรวมที่ไม่ต่อเนื่องกัน? ϵϵ
Artem Kaznatcheev

5
xXX=X×{0,1}xX(x,0)Xx+ϵ(x,1)XXX

1
O(log2n)

24

O(logkn)O(n)

O(n)

AO(logkn)A=O(logkn)

A

A

O(nloglogn)


1
นี่เป็นความคิดที่ดี และถ้าคุณสามารถแสดงให้เห็นว่าพาร์ทิชันโซ่ต้องรู้จักอัลกอริทึมแล้วคุณสามารถใช้การผสานเพื่อแสดงว่าจะใช้การเปรียบเทียบ O (n log log n) เพิ่มเติมเพื่อเรียงลำดับอินพุตทั้งหมดแทนที่จะใช้เซ่น แต่มีปัญหา: ทำไมอัลกอริธึมการเตรียมประมวลผลล่วงหน้าจึงต้องสร้างพาร์ติชันลูกโซ่ พาร์ติชันโซ่ต้องมีอยู่ใช่ แต่นั่นแตกต่างจากอัลกอริทึมที่รู้จักกันมาก
David Eppstein

8
O(nloglogn)

6
Ω(nlogn)Ω(n)

1
@Yuval: บางทีคุณควรเขียนข้อสังเกตนี้เป็นคำตอบจริงเพราะฉันคิดว่าคุณต้องทำงานในระดับปานกลางเพื่อให้ได้ผลลัพธ์ที่ดีกว่าจากบทพิสูจน์ในคำตอบ
Peter Shor

1
Ω(nlogn)Ω(n1ϵ)ϵo(nlogn)O(n/logn)lognn/lognθ(nloglogn)

0

k<nΘ(nlogk)nc>0cnlogkcnlogk/kk=k/logkn/lognO(nlogk)=O(nlogk)เวลาซึ่งทำให้ต้นทุนการสืบค้นO(n/k)

โดยเฉพาะอย่างยิ่งการใช้การประมวลผลล่วงหน้าเราไม่สามารถมีค่าใช้จ่ายในการสืบค้นนอกจากนี้ประมวลผลล่วงหน้าสอดคล้องกับในสำหรับทุกๆดังนั้นค่าใช้จ่ายในการค้นหาo ( n ) o ( n log n ) k O ( n ε ) ε > 0 Ω ( n 1 - ε )O(n)o(n)o(nlogn)kO(nε)ε>0Ω(n1ε)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.