Saya mengajar kursus tentang struktur data dan akan mencakup pohon splay awal minggu depan. Saya telah membaca makalah tentang hamparan pohon berkali-kali dan saya akrab dengan analisis dan intuisi di balik struktur data. Namun, saya tidak bisa menemukan intuisi yang kuat untuk fungsi potensial yang digunakan Sleator dan Tarjan dalam analisis mereka.
Analisis ini bekerja dengan menetapkan setiap elemen dalam pohon bobot yang berubah-ubah dengan , kemudian mengatur ukuran s ( x ) dari sebuah simpul menjadi jumlah bobot dari simpul-simpul dalam subtree yang berakar pada x . Mereka kemudian mengambil log dari nilai ini untuk mendapatkan peringkat r ( x ) dari node, jadi r ( x ) = log s ( x ) . Akhirnya, fungsi potensial dari pohon didefinisikan sebagai jumlah dari peringkat semua node.
Saya mengerti bahwa fungsi potensial ini bekerja dengan benar dan saya dapat mengikuti analisis, tetapi saya tidak melihat mengapa mereka memilih potensi ini. Gagasan menetapkan ukuran untuk setiap node masuk akal bagi saya, karena jika Anda meringkas ukuran, Anda mendapatkan panjang jalur tertimbang pohon. Namun, saya tidak tahu mengapa mereka memutuskan untuk mengambil log bobot dan kemudian menyimpulkannya - saya tidak melihat properti alami dari pohon yang sesuai dengan ini.
Apakah fungsi potensial dari pohon hamparan sesuai dengan beberapa sifat alami pohon? Adakah alasan tertentu, selain "berhasil", bahwa mereka akan memilih potensi ini? (Saya secara khusus ingin tahu karena rangkaian kursus ini menyebutkan bahwa "analisis adalah ilmu hitam. [N] o ide bagaimana menemukan")
Terima kasih!
sumber
Jawaban:
Cara membuat potensi jumlah log
Mari kita pertimbangkan algoritma BST yang untuk setiap akses untuk elemen x , ia hanya mengatur ulang elemen dalam path pencarian P dari x yang disebut before-path, menjadi beberapa pohon yang disebut after-tree. Untuk setiap elemen a , biarkan s ( a ) dan s ' ( a ) menjadi ukuran subtree berakar pada sebuah sebelum dan sesudah penataan ulang masing-masing. Jadi s ( a ) dan s ′ ( a ) dapat berbeda jika a ∈ PA x P x a s(a) s′(a) a s(a) s′(a) a∈P .
Apalagi,A hanya mengatur ulang banyak elemen secara konstan di jalur pencarian kapan saja. Sebut saja jenis algoritme "lokal" ini. Misalnya, pohon splay adalah lokal. Ini mengatur ulang hanya paling banyak 3 elemen sekaligus dengan zig, zigzig dan zigzag.
Sekarang, setiap algoritma lokal yang membuat "banyak" daun di after-tree, seperti splay tree, memiliki properti bagus berikut.
Kita bisa melihat ini dengan membuka perubahan jalur pencarian. Pemetaan ini sebenarnya cukup alami. Makalah ini, A Global Geometric View of Splaying , tepatnya menunjukkan detail cara melihat pengamatan di atas.
Setelah mengetahui fakta ini, sangat wajar untuk memilih potensi jumlah log. Karena kita dapat menggunakan potensi perubahan elemen tipe-1 untuk membayar seluruh penataan ulang. Selain itu, untuk elemen tipe lain, kita harus membayar perubahan potensial paling banyak dengan logaritmik. Oleh karena itu, kita dapat memperoleh logaritma biaya diamortisasi.
Saya pikir alasan mengapa orang berpikir ini adalah "ilmu hitam" adalah bahwa analisis sebelumnya tidak "membuka" perubahan keseluruhan jalur pencarian, dan melihat apa yang sebenarnya terjadi dalam satu langkah. Sebaliknya, mereka menunjukkan perubahan potensi untuk setiap "transformasi lokal", dan kemudian menunjukkan bahwa perubahan potensial ini dapat secara teleskopik ajaib.
PS Makalah ini bahkan menunjukkan beberapa batasan jumlah potensial log. Artinya, seseorang dapat membuktikan kepuasan akses lemma melalui jumlah log-potensial hanya untuk algoritma lokal.
Interpretasi jumlah total log
Ada cara lain untuk menentukan potensi BST dalam makalah Georgakopoulos dan McClurkin yang pada dasarnya sama dengan jumlah total log dalam kertas Sleator Tarjan. Tetapi ini memberikan intuisi yang baik untuk saya.
Sekarang, alih-alih mendefinisikan peringkat pada node, kami menentukan peringkat ke tepi, yang mereka sebut faktor kemajuan .
Dan potensi pohonS adalah
Perhatikan bahwa ini hampir sama dengan potensi Sleator Tarjan, dan merupakan tambahan pada jalur.
sunting: Ternyata definisi alternatif ini dan intuisi di baliknya telah dijelaskan sejak lama oleh Kurt Mehlhorn. Lihat bukunya "Struktur Data dan Algoritma" Volume I, Bagian III. 6.1.2 Splay Trees, halaman 263 - 274.
sumber