Median AVL. Bagaimana cara memanfaatkan AVL?


8

Inilah sumber pertanyaan saya.

Diberi pohon penyeimbang sendiri (AVL), kode metode yang mengembalikan median.

(Median: nilai numerik yang memisahkan separuh lebih tinggi dari sampel data dari bagian bawah. Contoh: jika seri adalah

2, 7, 4, 9, 1, 5, 8, 3, 6

maka median adalah 5.)

Saya dapat menawarkan solusi berikut:

  1. Lintasi pohon yang diberikan, kembalikan jumlah elemen.
  2. Lintasi n / 2 + 1(jika nganjil) pohon itu kembali menerapkan berjalan pohon berurutan. Nilai n / 2 + 1elemen th adalah median.

Tapi saya bisa melakukannya dengan pohon pencarian biner, bukan? Apakah ada algoritma yang lebih baik untuk AVL?


1
Tautan sudah menjawab pertanyaan Anda - apa lagi yang Anda cari?
Yuval Filmus

Biasanya, algoritma pencarian untuk Pohon Pencarian Biner bekerja dengan pohon AVL, tetapi dengan AVL Anda mendapatkan jaminan ekstra bahwa tinggi pohon Anda adalah logaritmik dalam jumlah node.
jmite

Jawaban:


9

Jika Anda memodifikasi pohon AVL dengan menyimpan ukuran subtree pada setiap node daripada hanya ketinggiannya, maka Anda dapat menemukan median dalam waktu menggunakan fakta bahwa pohon seimbang. Untuk mencapai hal ini, Anda menulis prosedur yang lebih umum Pilih yang menerima simpul dan sejumlah , dan menemukan th simpul terkecil di subpohon berakar pada .HAI(catatann)vkkv

Misalkan subtree kiri (jika ada) memiliki node. Jika maka kita kembali ke subtree kiri. Jika maka kita mengembalikan . Kalau tidak, kita berulang ke subtree kanan, mengurangi oleh .L.kL.k=L.+1vkL.+1

Waktu berjalan dari algoritma ini adalah linear pada ketinggian pohon, yaitu .HAI(catatann)


Bisakah Anda memberi saya contoh?
Maksim Dmitriev

Tidak, Anda harus membuatnya sendiri. Cobalah untuk memahami apa yang ingin dicapai oleh algoritma saya dan caranya.
Yuval Filmus


0

AVL adalah pohon pencarian biner dengan beberapa properti khusus: itu adalah pohon self-balancing. Ketinggiannya selalu logaritmik. Pohon biner biasa dalam beberapa skenario terburuk dapat ditautkan daftar (jika Anda menambahkan data yang diurutkan) sehingga tingginya n. Pohon AVL dalam skenario terburuk adalah Pohon fibonacci.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.