2011-01-19 10 views
39

試行では、ノードごとにデータ全体が格納されるのではなく、親ノードに接尾辞だけが格納されることをリモートで覚えています。試行錯誤の違いは?

ここで、ツリーはデータ全体を格納しますが、ベースのプレフィックスベースでのみ構成します。

したがって、試行は小さくなります。たとえば、辞書を非常にうまく圧縮できます。

これは本当に唯一の違いですか?

実際のアプリケーションから、範囲問合せの方が高速です。範囲照会を高速化するための特殊なsolr/luceneトライフィールドもあります。しかし、それはどうですか?

実際の違いは何ですか、試行とツリーの長所と短所は何ですか?

答えて

50

ツリーは再帰的ノードの一般的な構造です。多くの種類の木があります。人気のあるものはbinary treebalanced treeです。 Trieは、プレフィックスツリー、デジタル検索ツリー、および検索ツリー(したがって、名前「trie」)を含む多くの名前で知られる、一種のツリーです。

各種類のツリーは、目的、構造、動作がそれぞれ異なります。例えば、バイナリツリーは、比較可能な項目(例えば、数値)の集合を格納する。したがって、数値のセットを格納したり、数値で表すことができる他のデータ(たとえば、ハッシュできるオブジェクト)を索引付けするために使用できます。その構造はソートされているので、すぐに検索して単一のアイテムを見つけることができます。バランスの取れた木のような他の木の構造も原理的には似ています。

trieは、その構造内の配列を表す。個々の単一値ではなく、一連の値を格納する点で非常に異なります。再帰の各レベルでは、「入力リストの項目Iの値は何ですか」と表示されます。これは、検索された単一の値を各ノードと比較するバイナリツリーとは異なります。

+0

lameのようなトライですか?バイナリツリーは記憶空間を除いてあらゆる点でトライを打つことはないのですか? – Pacerier

+0

すべてのデータ構造の場所があります。同じ接頭辞を持つすべての文字列を見つけるのはどうですか? O(n)アクセス? – Joe

+1

木もそうではありませんか?プレフィックス20を見つけようと10億のエントリーがあります。トライは20ステップでそれを行います。ツリーはlg 1B/lg 2 = 30 stepsでそれを行います。今度は同じ1Bエントリーで接頭辞40を見つけます。ツリーは30ステップで実行しますが、トライは40で行います。プレフィックス100の場合、ツリーはまだ100ステップ、ツリーは30をとります。 – Pacerier

1

バイナリツリーまたはbstは、通常、数値の格納に使用されます。 bstの時間複雑度は、挿入、削除、および検索のためのO(log(n))です。バイナリツリーの各ノードには、最大で2つの子ノードがあります。

Trie:トライのすべてのノードは、複数のブランチで構成されています。各ブランチはキーの可能な文字を表します。すべてのキーの最後のノードをリーフノードとしてマークする必要があります。トライノードのフィールド値は、ノードをリーフノードとして区別するために使用されます(値フィールドの他の用途があります)

このトーカコードのチュートリアルを参照してください。 https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/

関連する問題