質問: トライはスペースを節約しますが、どうですか? I am confused as to how the Trie implementation saves space & stores data in most compact form! If you look at the tree below. When you store a character at any node, you also need to store a reference to that & thus for each character of the string you need to store its reference. Ok we saved some space when a common character arrived but we lost more space in storing a reference to that character node. したがって、このツリー自体を維持するための構造上のオーバーヘッドはありませんか?この代わりにTreeMapを使用した場合、辞書を実装すると、文字列が1つの部分に保存されるため、より多くのスペースを節約できる可能性があります。したがって、参照を格納するスペースが無駄にならないでしょうか? !enter image description here
回答: すべてのバイトが効率的に割り当てられる理想的なマシン上に、スペースを節約できることが推測できます。しかし、実際のマシンでは、整列したメモリブロック(Javaでは8バイト、C ++では16バイト)を割り当てるため、スペースを節約できません。 Javaの文字列とコレクションは、オーバーヘッドの割合が比較的高く、パーセンテージの差は非常に小さくなります。 あなたの構造が非常に大きい場合を除き、タイムアウトの価値は、最も簡単で最も標準的で最も簡単なコレクションを維持することをはるかに重要とするメモリコストを重くします。例えばあなたの時間は、あなたが保存しようとしているメモリの価値の1000倍以上に相当する価値があります。 例えばトライを使用してそれぞれ16バイトを保存できる10000の名前があるとします。 (これは時間をかけずに証明できると仮定します)これは今日の価格で0.1セントの価値がある16 KBに相当します。あなたの時間があなたの会社に1時間に30ドルかかる場合、テストされたコードの1行を書くコストは$ 1かもしれません。 あなたが16KBを節約するために長い目で瞬きを考えると、それはPCの価値があるとは思えません。 (モバイルデバイスは異なるストーリーですが、同じ議論がIMHOを適用します) EDIT: You have inspired me to add an update http://vanillajava.blogspot.com/2011/11/ever-decreasing-cost-of-main-memory.html