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?

Maksim Dmitriev
sumber
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)

Yuval Filmus
sumber
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
Solusi saya ada di codereview.stackexchange.com/q/104525/23821
Maksim Dmitriev
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.

pengguna3371350
sumber