たとえば、スプレイツリーのように、フィンガーサーチツリープロパティを持つバランスのとれたバイナリサーチツリーデータ構造(から離れた位置にあるアイテムの検索には時間O (log d ))がある場合、ソートされたシーケンスを挿入すると、そこへのkアイテムの挿入の合計時間はO (k log (n / k ))になります。dO(logd)kO(klog(n/k))
ここで、挿入、破壊的マージ、および検索をサポートするとします。挿入と検索には、既存の検索ツリー操作を使用するだけです。マージの場合、常に小さなツリーを大きなツリーにマージし、小さなツリーの順序トラバーサルを使用して、並べ替えられた順序を線形時間で取得します。次に、小さなツリーの要素を一度に1つずつ、このソートされた順序で大きなツリーに挿入します。
要素が挿入され、サイズがn 1、n 2、…の一連の大きなツリーにマージされる場合、挿入とマージの時間(合計マージ時間のxの一部のみを数える)はO (log n 1)、O (log (n 2 / n 1))、…は、O (log n )に伸縮シーケンスを追加しますxn1,n2,…xO(logn1)O(log(n2/n1))…O(logn)。したがって、潜在的なマージシーケンスのこの対数合計時間がの挿入操作に課金される償却スキームを使用する場合、挿入または検索ごとの償却時間はO (log n )であり、O (1 )のみが得られます。マージごとの償却時間。xO(logn)O(1)
削除はこの分析を複雑にしますが、それほど複雑ではありません。それらを処理する1つの方法は、半遅延削除を実行することです。削除されたアイテムはツリーから削除されますが、このツリーのアイテムのカウントからは削除されません。そのため、2つのツリーのどちらが小さいか大きいかを決定すると、これまでツリー内にあったすべてのアイテムを数えます。次いで、でO (ログN )nO(logn)操作ごとの時間は、現在存在する数ではなく、挿入または削除されたアイテムの合計数である必要があります。これらの2つの数値が大きく離れすぎている場合は、すべてのカウントを実際の数値に再調整する更新を行って、データ構造を遅延削除されたアイテムがない状態にリセットできます。この更新の償却時間は、これまでの数をバラバラにするために実行しなければならなかった削除操作に対して請求することができます。または、場合によっては、遅延のない削除を使用してマージの償却を直接機能させることもできますが、その部分の詳細はわかりません。