Saya memimpikan struktur data, apakah itu ada?

27

Saya belum berhasil menemukan struktur data ini, tetapi saya bukan ahli di bidang ini.

Struktur mengimplementasikan himpunan, dan pada dasarnya adalah array elemen yang sebanding dengan invarian. Yang invarian adalah sebagai berikut (didefinisikan secara rekursif):

Array dengan panjang 1 adalah gabungan-array.

Array dengan panjang 2 ^ n (untuk n> 0) adalah array-iff gabungan:

  • bagian pertama adalah gabungan-array dan bagian kedua kosong atau
  • array pertama penuh dan diurutkan, dan bagian kedua adalah gabungan-array.

Perhatikan bahwa jika array penuh, itu diurutkan.

Untuk menyisipkan elemen, kami memiliki dua kasus:

  • Jika paruh pertama tidak penuh, masukkan secara rekursif di babak pertama.
  • Jika paruh pertama penuh, masukkan secara rekursif di babak kedua.
  • Setelah langkah rekursif, jika seluruh array penuh, gabungkan bagian (yang diurutkan), dan ubah ukurannya menjadi dua kali lipat dari panjang aslinya.

Untuk menemukan elemen, ulangi di kedua bagian, menggunakan pencarian biner ketika array penuh. (Ini harus efisien karena paling banyak fragmen naik).O(log(n))

Struktur dapat dianggap sebagai versi statis dari mergesort.

Tidak jelas apa yang harus dilakukan seseorang untuk menghapus suatu elemen.

Sunting: setelah meningkatkan pemahaman saya tentang struktur.

pbaren
sumber
5
Anda mendefinisikannya, oleh karena itu ada. Saya pikir Anda harus memuluskan beberapa poin. Pertama, invarian # 2 membingungkan saya karena sepertinya tidak berlaku untuk negara perantara seperti yang Anda gambarkan. Kedua, apa yang Anda lakukan ketika elemen dihapus?
Raphael
7
Anda bermimpi up struktur data, tidak bermimpi itu ...
Andrej Bauer
@Raphael Terima kasih atas komentar Anda, saya meningkatkan definisi mengikuti pemikiran Anda. Saya tidak memikirkan algoritme untuk dihapus, saya hanya ingin memeriksa apakah struktur ini ada dalam literatur sebelum mendedikasikan lebih banyak waktu untuk itu (dan tidak dapat menemukan apa pun di Google). Pada kalimat pertama Anda, Anda dapat mendefinisikan Tuhan, tetapi apakah itu ada? :)
pbaren
@Andrej Terima kasih, bahasa Inggris bukan bahasa ibu saya. (Saya kira itu juga bukan milik Anda :)
pbaren
3
@Andrej: OP awalnya "bermimpi dengan ", yang hampir pasti tidak apa yang dimaksud. Saya mengubahnya menjadi "dari" bukannya "naik". Keduanya benar secara tata bahasa, tetapi keduanya juga mengubah artinya. "Of" adalah pilihan terdengar yang lebih menarik ...
András Salamon

Jawaban:

31

ABABO(logn)n), tetapi menambah ruang hanya dengan faktor konstan. Ya, itu bisa dideamortisasi, terima kasih kepada Overmars dan van Leeuwen, tetapi Anda benar-benar tidak ingin melakukan itu jika Anda tidak harus melakukannya.

Catatan ini mencakup dasar-dasarnya.

Array lookahead yang tidak sadar cache adalah keturunan mutan dari pohon Bentley-Saxe dan van Emde Boas dengan steroid.

Jeffε
sumber
4
Itu adalah catatan yang ditulis dengan indah dan diilustrasikan, dan saya telah menggunakannya sebagai referensi berkali-kali. Terima kasih telah menyediakannya!
jbapple
Saya melihat bagaimana antar-jemput pohon (dari paruh pertama makalah ini memperkenalkan susunan cache lookahead yang tidak diketahui) terkait dengan pohon vEB, tetapi apa hubungan antara COLA dan pohon vEB?
jbapple
2
Terima kasih, materi ini tampaknya merupakan generalisasi ide yang sangat menarik. Saya selalu berpikir bahwa struktur data adalah algoritma beku, yang dapat Anda jalankan langkah demi langkah, tetapi saya belum pernah menemukan formalisasi yang berguna untuk intuisi itu.
pbaren
Apakah tautan pertama berfungsi untuk orang lain?
AT
Ya, saya baru mencobanya. (Sayangnya, ia pergi ke paypal Elsevier; maaf!)
Jeffε
11

Ini mirip dengan pohon gabungan terstruktur log atau cache array lookahead yang tidak diketahui (atau COLA).

2k12i0i<k

2021

O(lgn)O(n)O(lg2n)

jbapple
sumber