Fungsi potensial pohon hamparan: mengapa menjumlahkan log dari ukuran?

16

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.wis(x)xr(x)r(x)=logs(x)

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!

templatetypedef
sumber
Saya pernah mendengar penjelasan "ini ilmu hitam" sebelumnya. Apakah Anda mencoba mengirim email ke Sleator dan Tarjan?
jbapple
@ jbapple Saya belum mengirim email kepada mereka, karena saya berharap bahwa "komunitas pada umumnya" akan dapat membantu. Saya juga membayangkan bahwa melakukan ping pada seseorang tentang pekerjaan yang mereka lakukan 30 tahun yang lalu mungkin belum tentu mendapat respons. :-)
templatetypedef
Saya tidak sangat akrab dengan hal itu, tapi aku hanya melihat kertas yang sangat kasar, saya pikir satu-satunya alasan adalah bahwa mereka ingin memiliki perubahan kecil dengan fungsi potensial setelah operasi melebarkan, misalnya jika kita mengganti dengan log log atau dengan l o g * sepertinya masih semuanya bekerja dengan baik (saya tidak membuktikannya tetapi tampaknya hanya perlu mathwork sederhana). Tetapi jika kita membiarkannya sebagai s , maka amortisasi itu menganalisis sementara itu benar, tetapi itu bukan upperbound yang baik (sesuatu seperti ( m + n ) 2 ). Ini tidak terkait dengan properti pohon sama sekali. loglogloglogs(m+n)2
Saeed
Saya selalu mengotakkan pangkat x sebagai "kedalaman pohon pencarian biner ideal yang berisi turunan x", tapi itu lebih merupakan mnemonik daripada intuisi yang berguna.
Jeffε

Jawaban:

13

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 PAxPxas(a)s(a)as(a)s(a)aP .

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 membuat pemetaan sedemikian rupaf:PP

  1. Ada linear banyak , di mana s ' ( f ( a ) ) s ( a ) / 2 .aPs(f(a))s(a)/2
  2. Ada terus banyak , di mana s ' ( f ( a ) ) bisa besar tapi sepele paling naPs(f(a))n .
  3. Elemen-elemen lain , s ( f ( a ) ) s ( a ) .aPs(f(Sebuah))s(Sebuah)

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.

w(kamu)kamuW(kamu)kamukamu subtree ketika berat setiap node adalah satu.)

Sekarang, alih-alih mendefinisikan peringkat pada node, kami menentukan peringkat ke tepi, yang mereka sebut faktor kemajuan .

half(e)=catatan(W(kamu)/W(v)).

Dan potensi pohon S adalah

Φ(S)=eShalf(e).

Potensi ini memiliki interpretasi alami: jika selama pencarian kita melewati batas (kamu,v) kami mengurangi ruang pencarian dari keturunan kamu untuk keturunan v, pengurangan sedikit dari W(kamu)/W(v). Faktor kemajuan kita adalah ukuran logaritmik dari 'kemajuan' ini, karena itu namanya. [Dari Bagian 2.4]

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.

Thatchaphol
sumber