2

基本的なプレフィックス ツリーまたは「トライ」を実装しました。トライは次のようなノードで構成されています。

// pseudo-code
struct node {
    char c;
    collection<node> childnodes;
};

「Apple」、「Ark」、「Cat」という単語をトライに追加するとします。「Ap」や「Ca」などの接頭辞を検索すると、トライの「bool containsPrefix(string prefix)」メソッドが正しく true を返すようになりました。

ここで、"Cat" と "Ark" に対しては true を返しますが、"App" に対しては false を返すメソッド "bool containsWholeWord(string word)" を実装しています (上記の例)。

トライのノードがある種の「endOfWord」フラグを持つのは一般的ですか? これは、検索されている文字列が実際にトライに入力された単語全体であり、単なるプレフィックスではないかどうかを判断するのに役立ちます。

乾杯!

4

2 に答える 2

2

キーの終わりは、通常、リーフ ノードを介して示されます。また:

  • 子ノードは空です。また
  • キーの1つのプレフィックスといくつかの子ノードを持つブランチがあります。

デザインにリーフ/空のノードがありません。null などで示してみてください。

于 2011-06-14T20:17:22.137 に答える
1

「App」と「Apple」の両方を保存する必要があり、「Appl」は保存しない場合は、はい、endOfWordフラグのようなものが必要です。

または、(場合によっては) 同じキャラクターを持つ 2 つのノードを使用して、デザインに適合させることもできます。したがって、「Ap」は子ノードにする必要があります。葉ノード「p」と、子「l」を持つ内部ノード「p」です。

于 2011-06-15T12:03:51.903 に答える