Jika Anda memiliki struktur data pohon pencarian biner seimbang dengan properti pohon pencarian jari (pencarian untuk item posisi jauhnya membutuhkan waktu ), seperti misalnya splay tree, maka jika Anda memasukkan urutan diurutkan dari item ke dalamnya total waktu untuk penyisipan adalah .O ( log d ) k O ( k log ( n / k ) )dO(logd)kO(klog(n/k))
Sekarang, anggaplah Anda ingin mendukung penyisipan, penggabungan yang merusak, dan pencarian. Untuk penyisipan dan pencarian, cukup gunakan operasi pohon pencarian yang ada. Untuk penggabungan, selalu gabungkan pohon yang lebih kecil ke yang lebih besar, dan gunakan lintasan inorder dari pohon yang lebih kecil untuk mendapatkan urutannya dalam waktu linier. Kemudian, masukkan elemen pohon yang lebih kecil satu per satu ke pohon yang lebih besar dalam urutan yang diurutkan ini.
Jika elemen dimasukkan kemudian digabung ke dalam urutan pohon yang lebih besar dengan ukuran maka jumlah waktu untuk penyisipan dan penggabungan (hanya menghitung fraksi dari total waktu gabungan) akan menjadi , , , yang menambahkan urutan telescoping ke . Jadi jika seseorang menggunakan skema amortisasi di mana total waktu logaritmik ini untuk urutan potensial gabungan dibebankan ke operasi penyisipan untuk , maka kita masih mendapatkan waktu diamortisasi per penyisipan atau pencarian, dan hanya waktu diamortisasi per merger.n 1 , n 2 , ... x O ( log n 1 ) O ( log ( n 2 / n 1 ) ) ... O ( log n ) x O ( log n ) O ( 1 )xn1,n2,…xO(logn1)O(log(n2/n1))…O(logn)xO(logn)O(1)
Penghapusan mempersulit analisis ini, tetapi tidak banyak. Salah satu cara untuk mengatasinya adalah dengan melakukan penghapusan setengah malas, di mana item yang dihapus dihapus dari pohonnya tetapi tidak dihapus dari jumlah item di pohon ini, sehingga ketika kami memutuskan mana dari dua pohon yang lebih kecil atau lebih besar kami hitung semua barang yang pernah ada di pohon. Kemudian, diO ( log n )nO(logn)waktu per operasi harus menjadi jumlah total item yang pernah dimasukkan atau dihapus daripada jumlah yang ada saat ini. Jika dua angka ini tumbuh terlalu jauh, Anda dapat membuat pembaruan yang menyesuaikan kembali semua jumlah dengan angka aktualnya, mengatur ulang struktur data ke keadaan tanpa item yang dihapus malas; waktu yang diamortisasi untuk pembaruan ini dapat dibebankan terhadap operasi penghapusan yang harus Anda lakukan untuk mendapatkan angka yang terpisah begitu jauh. Atau mungkin Anda dapat membuat amortisasi gabungan bekerja secara langsung dengan penghapusan yang tidak malas, tetapi saya belum mengerjakan detail bagian itu.