私は基本的なプレフィックスツリーまたは "trie"を実装しました。トライは、このようなノードで構成されています基本プレフィックスツリーの実装に関する質問
// pseudo-code
struct node {
char c;
collection<node> childnodes;
};
は、私は私のトライに次の単語を追加言う:「アップル」、「箱舟」と「猫」。今、私が "Ap"や "Ca"のような接頭辞を検索すると、私のtrieの "bool containsPrefix(string prefix)"メソッドが正しくtrueを返します。
"Cat"と "Ark"ではtrueを返しますが、上記の例では "App"ではfalseを返すメソッド "bool containsWholeWord(string word)"を実装しています。
トライのノードで「endOfWord」フラグを使用するのは一般的ですか?これは、ルックアップされている文字列が実際にプレフィックスだけでなくトライに入力された単語であるかどうかを判断するのに役立ちます。
乾杯!
お返事ありがとうございます。しかし私は空のchildnodesコレクション(あなたが言及したように)をチェックすることによって葉ノードを示すことを試みました。これは、次の問題を解決しません。トライに「Apple」を挿入します。トライに「Appl」を挿入します。 「アップル」が言葉全体であるかどうか質問する。この例では、(上記の方法でリーフノードをチェックしていると仮定して) "l"はリーフノードではないため、 "Appl"が完全な単語であるかどうかを尋ねると、誤ってfalseが返されます。 "endOfWord"フラグを追加するとこれが修正されます。 – MrDatabase