การนับคู่ผกผัน


14

แอปพลิเคชั่นการแบ่งและพิชิตแบบคลาสสิกคือการแก้ปัญหาต่อไปนี้:

รับอาร์เรย์ของที่แตกต่างกัน, องค์ประกอบเทียบเคียงนับจำนวนของคู่ผกผันในอาร์เรย์: คู่เช่นว่าและเจa[1n](i,j)a[i]>a[j]i<j

วิธีการหนึ่งในการทำเช่นนี้คือผสาน Merge Sort แต่ยังนับจำนวนคู่ผกผันในปัญหาย่อยด้วย ในระหว่างขั้นตอนการผสานเราจะนับจำนวนคู่ผกผันที่ครอบคลุมปัญหาย่อย (สอง) และเพิ่มเข้าไปในการนับของปัญหาย่อย

ขณะนี้เป็นสิ่งที่ดีและให้อัลกอริทึมเวลาสิ่งนี้ทำให้เกิดความสับสนO(nlogn)

หากเรามีข้อ จำกัด เพิ่มเติมที่อาเรย์เป็นแบบอ่านอย่างเดียวเราสามารถทำสำเนาและจัดการกับการคัดลอกหรือใช้โครงสร้างข้อมูลเพิ่มเติมเช่นสถิติการสั่งซื้อแบบต้นไม้ไบนารีที่สมดุลเพื่อทำการนับซึ่งทั้งสองอย่างใช้พื้นที่Θ(n)

คำถามปัจจุบันคือพยายามพื้นที่ให้ดีขึ้นโดยไม่กระทบต่อเวลาใช้งาน กล่าวคือ

มีอัลกอริธึมเวลาเพื่อนับจำนวนคู่ผกผันซึ่งทำงานบนอาเรย์แบบอ่านอย่างเดียวและใช้พื้นที่ย่อยเชิงเส้น (เช่น ) หรือไม่O(nlogn)o(n)

สมมติรูปแบบ RAM ค่าใช้จ่ายสม่ำเสมอและองค์ประกอบที่ใช้เวลาพื้นที่และการเปรียบเทียบระหว่างพวกเขาคือ(1)O(1)O(1)

การอ้างอิงจะทำ แต่คำอธิบายจะดีกว่า :-)

ฉันพยายามค้นหาเว็บ แต่ไม่พบคำตอบที่เป็นบวก / ลบสำหรับสิ่งนี้ ฉันคิดว่านี่เป็นเพียงความอยากรู้อยากเห็น


3
หลงและPătraşcuให้อัลกอริทึมเวลา แต่เท่าที่ผมสามารถบอกได้จาก skimming กระดาษที่พวกเขาจำเป็นต้องพื้นที่ o(nlogn)Ω(n)
ราฟาเอล

2
นอกจากนี้Ajtai และคณะ พิสูจน์ให้เห็นว่าใด ๆ (แน่นอน)เวลาสตรีมมิ่งขั้นตอนวิธีการตอบสนองความต้องการΩ ( n )พื้นที่ ดูเหมือนว่าจะมีการประมาณค่าที่เหมาะสมกับเกณฑ์ของคุณ O(n)Ω(n)
ราฟาเอล

1
@ ราฟาเอล: ขอบคุณ! หากไม่ได้รับคำตอบความคิดเห็นของคุณจะเป็นคำตอบที่ดีที่สุด
Aryabhata

BTW ฉันสับสนเล็กน้อยเกี่ยวกับ Ajtai และคณะที่ต่ำกว่า ทฤษฎีบท 8 บอกว่า "อัลกอริทึมใด ๆ " แต่ขอบเขตล่างสำหรับฉันดูเหมือนว่าจะขัดกับอัลกอริธึมการส่งผ่านที่แน่นอนเพียงครั้งเดียวซึ่งเป็นรุ่นที่ จำกัด อย่างมาก
Sasho Nikolov

O(n)

คำตอบ:


3

นี่คือคำตอบของราฟาเอล:

o(nlogn)Ω(n)O(n)Ω(n)


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