11

treapと呼ばれるデータ構造があります。これはランダム化されたバイナリ検索ツリーであり、ランダムに生成されたいわゆる「優先度」のヒープでもあります。

この構造にはさまざまなバリエーションがあり、キーは暗黙的であり、ツリーには保存されませんが、ツリー内のノードの順序付きインデックスをこのノードのキーと見なします。キーではなく、各ノードにサブツリーのサイズを保存する必要があります。この手法により、O(log N)時間で多くの操作(挿入、削除、サブ配列の復帰、間隔の変更など)をサポートする、ある種の配列のようなtreapについて考えることができます。

私はこの構造について少し知っていますが、それほど多くはありません。グーグルで検索してみましたが、treap自体に関する記事はたくさん見つかりましたが、この「暗黙のtreap」/「インデックス付きリスト」については何も見つかりませんでした。私の母国語は英語ではなく、聞いた講義では英語の元の用語ではなく、構造のネイティブ用語を使用していたため、その名前すらわかりません。このネイティブ用語は、英語で「暗黙のキーを処理する」または「暗黙のキーのデカルトツリー」として直接翻訳できます。

誰かがこの構造に関する記事を私に指摘したり、元の名前を教えてもらえますか?ありがとうございました。

PS私の英語が十分に理解できなかったらごめんなさい。

UPD:私が探している構造についてのいくつかの追加の説明。

ツリーに保存されている実際のユーザーデータである、ランダムに選択された優先度とキーを使用した通常のtreapについて考えてみます。次に、他のユーザー情報がすべてのノードに保存されており、キーは検索キーに他ならないことを想像してみてください。次のステップは、各ノードのサブツリーサイズを計算して維持することです。マージ/分割/追加/削除のたびにこのパラメーターを更新する必要がありますが、たとえば、O(log N)でツリーのK番目の要素を見つけることができます。時間。

各ノードにサブツリーサイズがある場合、キーを破棄して、treapが順序どおりにトラバーサルされたユーザーデータの配列を表すと想像できます。各要素の配列インデックスは、サブツリーのサイズから簡単に計算できます。これで、配列の途中で要素を追加/削除したり、この配列を分割したりできます-すべてO(log N)時間で。

「複数」の操作を行うこともできます。たとえば、「配列」のすべての要素に定数値を追加します。これを実装するには、この操作を遅延させ、遅延定数を表すパラメーターをすべてのノードに追加する必要があります。このパラメーターは、このノードのサブアレイのすべての要素に「後で」追加する必要があり、変更を次のように「プッシュ」します。必要。サブアレイに定数を追加したり、サブアレイをペイント(マーキング)したりすると、サブアレイを反転する(ここでは、ビット「サブアレイを反転する必要があります」のノードの遅延情報)などのように、サブアレイを遅延させることができます。

UPD2:これコードスニペットです-私が見つけた少量の情報の一部です。キリル文字に気付かないでください:)「снеявнымключом」という言葉は、直訳で「暗黙の鍵を使って」を意味します。

4

4 に答える 4

4

このデータ構造は、KaplanとVerbinによる、符号付き順列の反転による並べ替えに関する論文(7ページのセクション3.1)にあります:http://www.math.jussieu.fr/~fouquet/ENSEIGNEMENT/PROJETS/kaplan.pdf

于 2012-12-03T11:00:03.420 に答える
1

treapの重要なアイデア(しゃれは意図されていません!)は、ランダム化されたキーを使用することです。キーを外すと、どうすればトレッピングできるかわかりません。そのため、おそらく私はあなたの質問を誤解しました。または、treapの代わりに、ランダム化された二分探索木を参照している可能性があります。どちらのデータ構造も同じ考え方を使用しており、ツリーが(病的なケースではなく)平均的なツリーのように見えるようにすることで、平均的なケースの複雑さを実現できます。

Treapでは、ランダムな優先順位とバランスを使用してこれを行います。

ランダム化された二分木では、ランダム性は構築中にのみ含まれます。つまり、ツリーTにノードを挿入すると、ルートにある確率は1 /(size(T)+ 1)になります。ここで、size(T) Tのノード数です。もちろん、ノードがルートに挿入されていない場合は、ノードが追加されるまで再帰的に続行します。(これらの木の詳細な研究については、私のC. Martinezの記事を参照してください。)

このデータ構造は、treapとまったく同じように動作しますが、キーを必要としない別のメカニズムを使用します。

これがあなたが探していたものではない場合、おそらくあなたはいくつかの追加情報を共有することができます:あなたの講師はこの構造に取り組んだかもしれない誰かに言及しましたか?それはそうではないように思われるかもしれませんが、一般的にアルゴリズム/データ構造をそれを生み出した特定の国に釘付けにすることができるので、あなたの母国語を知ることは重要な手がかりになるかもしれません。

于 2010-08-16T23:09:08.637 に答える
1

遅延操作のニーズに合わせて変更されたロープ(複雑な形式の文字列)を探している可能性があります。興味深いのは、今ここにロープに関する未解決の質問があるということです。

于 2010-10-11T17:53:03.170 に答える
0

そのデータ構造には、2つの直交する概念の単なる組み合わせであるため、名前はないと思います。このような暗黙のキーは、ほぼすべての自己平衡ツリーデータ構造で使用できます。

スケープゴートツリーは、リバランスにすでにサブツリーサイズを使用しており、ノードごとのオーバーヘッドを必要としないため、スケープゴートツリーを確認することをお勧めします。

于 2010-08-19T16:19:52.843 に答える