Menghitung pasangan inversi

14

Aplikasi klasik divide and conquer adalah untuk memecahkan masalah berikut:

Diberikan array dari elemen yang berbeda dan dapat dibandingkan, hitung jumlah pasangan inversi dalam array: pasangan sedemikian rupa sehingga dan .( i , j ) a [ i ] > a [ j ] i < jSebuah[1...n](saya,j)Sebuah[saya]>Sebuah[j]saya<j

Salah satu pendekatan untuk ini adalah melakukan Sortir Gabung, tetapi juga menghitung jumlah pasangan inversi dalam sub-masalah. Selama langkah penggabungan, kami menghitung jumlah pasangan inversi yang membentang di (dua) sub-masalah dan menambah jumlah sub-masalah.

Meskipun ini bagus, dan memberikan algoritma waktu , ini mengacaukan array.HAI(ncatatann)

Jika kita memiliki batasan tambahan bahwa array adalah read-only, maka kita dapat membuat salinan dan menangani salinan tersebut, atau menggunakan struktur data tambahan seperti statistik urutan pohon biner seimbang untuk melakukan penghitungan, keduanya menggunakan ruang.Θ(n)

Pertanyaan saat ini adalah mencoba dan memperbaiki ruang, sementara tidak mempengaruhi waktu berjalan. yaitu

Apakah ada algoritma waktu untuk menghitung jumlah pasangan inversi, yang bekerja pada array read-only dan menggunakan ruang sub-linear (yaitu )?o ( n )HAI(ncatatann)Hai(n)

Asumsikan model RAM biaya seragam dan bahwa elemen mengambil ruang dan perbandingan di antara mereka adalah .O ( 1 )HAI(1)HAI(1)

Referensi akan dilakukan, tetapi penjelasannya akan lebih baik :-)

Saya mencoba mencari di web, tetapi tidak menemukan jawaban positif / negatif untuk ini. Saya kira ini hanya rasa ingin tahu.

Aryabhata
sumber
3
Chan dan Pătraşcu memberikan algoritma waktu , tetapi sejauh yang saya tahu dari membaca sepintas lalu, mereka membutuhkan ruang . Ω ( n )Hai(ncatatann)Ω(n)
Raphael
2
Selanjutnya, Ajtai dkk. membuktikan bahwa setiap (tepat) waktu streaming algoritma membutuhkan ruang . Namun, tampaknya ada perkiraan yang cocok dengan kriteria Anda. Ω ( n )HAI(n)Ω(n)
Raphael
1
@ Raphael: Terima kasih! Jika tidak ada jawaban yang akan datang, komentar Anda akan menjadi jawaban terbaik sejauh ini.
Aryabhata
BTW Saya agak bingung tentang Ajtai dkk. Teorema 8 mengatakan "algoritma apa pun", tetapi batas bawah bagi saya tampaknya bertentangan dengan algoritma streaming tunggal lulus yang tepat, model yang sangat terbatas
Sasho Nikolov
@SashoNikolov: Saya pikir mereka secara global mengatur model mereka untuk algoritma streaming, jadi "ada" akan dibatasi untuk itu. Saya berharap bahwa akibat wajar saya - semua algoritma waktu tepat - benar, yaitu setiap algoritma waktu-linear dapat dinyatakan sebagai algoritma streaming dengan banyak lintasan yang terus-menerus. Kita lihat saja nanti . HAI(n)
Raphael

Jawaban:

3

Inilah jawaban Raphael:

Chan dan Pătraşcu memberikan algoritma waktu , tetapi sejauh yang saya tahu dari membaca sepintas lalu, mereka membutuhkan Ω ( n ) ruang. Selanjutnya, Ajtai dkk. membuktikan bahwa setiap (tepat) O ( n ) algoritma streaming waktu membutuhkan Ω ( n ) ruang. Namun, tampaknya ada perkiraan yang cocok dengan kriteria Anda.Hai(ncatatann)Ω(n)HAI(n)Ω(n)

Yuval Filmus
sumber
Terima kasih telah memberikan jawaban. Saya akan memberikannya waktu lagi. Lalu lintas tampaknya mulai meningkat.
Aryabhata