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


34

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

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


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/log⁡nϵϵO(n)

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

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


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

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

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

5
x∈XX′=X×{0,1}x∈X(x,0)∈X′x+ϵ(x,1)∈X′X′X

1
O(log2⁡n)

24

O(logk⁡n)O(n)

O(n)

AO(logk⁡n)A=O(logk⁡n)

A

A

O(nlog⁡log⁡n)


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

8
O(nlog⁡log⁡n)

6
Ω(nlog⁡n)Ω(n)

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

1
Ω(nlog⁡n)Ω(n1−ϵ)ϵo(nlog⁡n)O(n/log⁡n)log⁡nn/log⁡nθ(nlog⁡log⁡n)

0

k<nΘ(nlog⁡k)nc>0cnlog⁡k≤cnlog⁡k/kk′=k/log⁡k≤n/log⁡nO(nlog⁡k′)=O(nlog⁡k)เวลาซึ่งทำให้ต้นทุนการสืบค้นO(n/k′)

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

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