Kompleksitas pencarian-kesatuan dengan kompresi jalur, tanpa peringkat

10

Wikipedia mengatakan penyatuan berdasarkan peringkat tanpa kompresi jalur memberikan kompleksitas waktu diamortisasi O(logn) , dan bahwa penyatuan berdasarkan peringkat dan kompresi jalur memberikan kompleksitas waktu diamortisasi O(α(n)) (di mana α adalah kebalikan dari Fungsi Ackerman). Namun, itu tidak menyebutkan waktu berjalan kompresi jalan tanpa peringkat serikat, yang biasanya saya terapkan sendiri.

Apa kompleksitas waktu yang diamortisasi dari union-find dengan optimisasi path-kompresi, tetapi tanpa union dengan optimasi peringkat?

Filip Haglund
sumber
5
Perhatikan bahwa adalah kebalikan dari fungsi Ackerman, bukan 1 / A ( n , n ) ) . Di sini "terbalik" berarti terbalik sebagai fungsi, bukan kebalikan: yaitu, jika f ( n ) = A ( n , n ) , α ( n ) = f - 1 ( n ) , bukan 1 / f ( n ) . α(n)1/A(n,n))f(n)=A(n,n)α(n)=f1(n)1/f(n)
DW
Saya mengerti bahwa ini adalah pertanyaan yang relatif lama, tetapi lihat jawaban saya dan makalah yang relevan: epubs.siam.org/doi/abs/10.1137/S0097539703439088 . Saya mungkin melewatkan satu atau dua detail saat menyalin di luar batas. Dalam hal ini, harap sarankan suntingan :-)
BearAqua

Jawaban:

4

Seidel dan Sharir membuktikan pada tahun 2005 [1] bahwa menggunakan kompresi jalur dengan menghubungkan sewenang-wenang pada operasi m memiliki kompleksitas sekitar O((m+n)log(n)) .

Lihat [1], Bagian 3 (Menghubungkan Sewenang-wenang): Misalkan f(m,n) menunjukkan runtime pencarian-serikat dengan operasi m dan elemen n . Mereka membuktikan yang berikut:

Klaim 3.1. Untuk bilangan bulat k>1 kita memiliki f(m,n)(m+(k1)n)logk(n) .

Menurut [1], pengaturan k=m/n+1 memberikan

f(m,n)(2m+n)logm/n+1n
.

Suatu ikatan yang sama diberikan dengan menggunakan metode yang lebih kompleks oleh Tarjan dan van Leeuwen dalam [2], Bagian 3:

Lemma 7 dari [2]. Misalkan mn . Dalam setiap urutan operasi set diimplementasikan menggunakan bentuk pemadatan dan menghubungkan naif, jumlah node pada jalur menemukan yang paling banyak (4m+n)log1+m/nn Dengan mengurangi separuh dan menghubungkan naif, jumlah node pada jalur find adalah paling (8m+2n)log1+m/n(n) .

Lemma 9 dari [2]. Misalkan m<n . Dalam setiap urutan operasi yang diimplementasikan menggunakan kompresi dan penghubungan naif, jumlah total node pada jalur pencarian paling banyak adalah n+2mlogn+m .

[1]: R. Seidel dan M. Sharir. Analisis Kompresi Jalur Top-Down. Siam J. Computing, 2005, Vol. 34, No. 3, hlm. 515-525.

[2]: R. Tarjan dan J. van Leeuwen. Analisis Kasus Terburuk dari Algoritma Set Union. J. ACM, Vol. 31, No. 2, April 1984, hlm. 245-281.

BearAqua
sumber
2

Saya tidak tahu apa waktu berjalan diamortisasi itu, tapi saya bisa menyebutkan satu kemungkinan alasan mengapa dalam beberapa situasi Anda mungkin ingin menggunakan keduanya daripada hanya kompresi jalur: waktu berjalan terburuk per operasi adalah jika Anda gunakan hanya kompresi jalur, yang jauh lebih besar daripada jika Anda menggunakan kedua gabungan dengan peringkat dan kompresi jalur.Θ(n)

nn1Θ(n)Θ(n)

O(logn)O(logn)O(logn) mungkin berguna dalam aplikasi interaktif di mana Anda ingin memastikan bahwa tidak ada satu operasi yang dapat menyebabkan penundaan yang lama (misalnya, Anda menginginkan jaminan bahwa tidak ada satu operasi yang dapat menyebabkan aplikasi membeku untuk waktu yang lama) atau dalam waktu nyata aplikasi tempat Anda ingin memastikan bahwa Anda akan selalu memenuhi jaminan waktu nyata.

DW
sumber