質問
ようにしている知樹の実施により一からのスタートでした。この場合のいいクライアントまで、フルのC#、Java、C++.が続くことになるだけでなく造方法)
うに各ノード店字されることになっており、最大で26ノードのノード当たりの
どのようなデータ構造を使っているのはポインタの各ノード?
基本的には思いを実施するradixツリーをゼロから立ち上げました。
おかげさ
解決
どについて説明していただけません なかなか a radixツリーまで---にradixツリーで複数キャラクターのようにノードあたりの上限数を子ノード。
いを記述する音を限定するアルファベット...各ノードできるa-zなどもご利用いただけます。他の手紙、a-z、など。の区別は重要なデータ構造の開催地に選ばだけでなく、ネットワークのノードのポインタ.
ツリー部について説明していただけま、最も簡単な構造の使用が簡単なの配列へのポインタ...だけが変換された文字(例えば'A')をascii値('65')、差し引の開始オフセット(65)を次のノード'しています。かりの空間が非常に高速に挿入し、トラバーサルをサポートします。
のようにradix木場3,4,78、または0の子ノード、および次のノードのリストによってオーバーヘッドの仕分け、挿入、削除する.も遅くなります。
なっJava、また実施にカスタムradixツリーをスレッドセーフで、C#、いするものではなく、一切のですのでお問い合わせ下さい。純ョンにします。書面に自分のソートリストの最初がやりたかっただけでお手伝いを学ぶことツリーのコンセプトのもと、内蔵の最適化します。純コレクションは難しくなっています。そして、コードソフトバンクグループ見上げ、次のノードが存在するグラブで行;ない場合は、こちらにご入力ください次のノードです。
の回収使用によって異なりそうだけの実施を通じて、ツリーまで---すべてのタイプのツリーをトレードオフの間に挿入時に、ルックアップ時間等を選択するよう最も重要なのではない。
しょう?
他のヒント
各ノードへのポインターを含めるためにどのデータ構造を使用しますか?
ノード。各ノードには、ツリー内の他の26個のノードへの参照が必要です。ノード内では、配列、LinkedList、ArrayList、または考えられるその他のコレクションに保存できます。
実際には問題ではありません。リンクリスト、配列(ただし、これは固定サイズになります)、または言語の標準ライブラリのリストタイプを使用できます。
リスト/配列を使用すると、インデックスのブックキーピングを行ってツリーを走査することになるため、親の子への参照を保持するのが最も簡単な場合があります。
最近、ツリーに悪いAPIではないことがわかりました-グラフが必要でしたが、保持しているデータのデータ構造を分離するためにどのように設定されているかを見ると便利でした。ツリー内をナビゲートするイテレータなど。
実際にスペースよりも速度に関心があり、各ノードが正確に1文字を表す場合(最大26で示される)、単純に26個のスロットの配列を使用し、それぞれが<!> quotを参照します; Node <!> quot; (ノードは配列を含むオブジェクトです。)
固定サイズの配列の良いところは、検索がずっと速くなることです。 char <!> quot; c <!> quot;を検索していた場合小文字であることがすでに保証されていた場合、検索は次のように簡単になります。
nextNode=nodes[c-'a'];
文字列の再帰的な検索は簡単です。
迅速な返信をありがとう。
はい、snogfishは正しいと言われました。 基本的に、26個のノード(A〜Z)を持つツリー+ bool isTerminatorです。
各ノードにはこれらの値があり、互いにリンクされています。
私はまだ詳細なポインターを学んでいないので、今日は、C#で安全でないコードを使用してこれをゼロから実装しようとしていますが、無駄です。
したがって、誰かが内部ツリークラスを使用してC#を開始するためのコードを提供してくれたらありがたいです。開始したら、アルゴリズムを他の言語に移植し、ポインターを使用するように変更するだけです。
どうもありがとう マイケル
このSimeon Pilgrimブログの<!> quot; コードキャンプパズルのレビュー <!> quot;。ソリューションの1つはC#でRadixを使用しており、ソリューションをダウンロードできます。