単語を格納するために、trys データ構造を使用します。ここで、特定のフレーズが同じ段落に存在する場合、特定の段落を見つける必要があるという要件があります。
これを行うための最も効率的な方法は何でしょうか? フレーズの総数は 100 を超えません。
単語を格納するために、trys データ構造を使用します。ここで、特定のフレーズが同じ段落に存在する場合、特定の段落を見つける必要があるという要件があります。
これを行うための最も効率的な方法は何でしょうか? フレーズの総数は 100 を超えません。
指定されたトライは、多くの点で最適ではありません。
ALPHABET_SIZE
ここで 2 より大きい値を使用すると、傷害に侮辱が加わります。50 バイトのフレーズには 50 ノードが必要であるだけでなく、各ノードのサイズは 100 バイトを超える可能性があります...長さが 50 バイトの各アイテムまたは「フレーズ」は、そのコードを使用して最大約 5KB のストレージを必要とする場合があります! それは最悪のことではありません。malloc
内部に埋め込まれているため、最適化が非常に困難です。各ノードは独自の割り当てであり、insert
非常にmalloc
重くなります。割り当ての詳細は、最適化の目的でなくても、使いやすさのために、データ構造の処理から分離する必要があります。このコードを頻繁に使用するプログラムは、メモリの断片化やキャッシュ ミスに関連するパフォーマンスの問題に遭遇する可能性が高く、トライを別のものに置き換える以外に、簡単または重要な最適化は見られません。<sarcasm>
それはとても最適ですよね?</sarcasm>
私は、アイテムごとに正確に 1 つのノードを使用し、アルファベット サイズが 2 である (各文字ではなく各文字のビットを使用する) パトリシア トライ実装を作成しました。インターフェイスのリファクタリングにはまだ多くの労力を費やしていませんが、最適にかなり近いはずです。その実装はhere にあります。挿入 ( を使用patricia_add
)、取得 ( を使用patricia_get
)、および削除 ( を使用patricia_remove
) の例は、パトリシア_test.cテストケース ファイルで確認できます。