• 締切済み

アルゴリズムの2-3-4木

アルゴリズムの2-3-4木 アルゴリズムの平衡木の一種である2-3-4木を使い、テキストファイルに書かれている文中の英単語1文字1文字を挿入し(同じ単語は1度だけ)、全ての単語の配置(パラグラフ、行数)を表示するというプログラムを考えているのですが、どのように組めばいいのかがわかりません。 例えばテキストファイルの文中に、studyという単語が1つ目のパラグラフの2行目、2つ目のパラグラフの4行目にあれば、 study (1,2) (2,4) と表示するプログラムです。2-3-4木ではどのようにデータを格納していくかはわかったのですが、データの挿入やノードの分割などをプログラムではどのように書けばいいのでしょうか。 どなたかご教授お願いいたします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「作り方」があるなら, それをプログラムにするだけだよね. あるいは, Java でなくとも C くらいならプログラムがあると思うな. ちなみに 2-3-4木が事実上 B木に含まれることには気付いてる?

lockwell
質問者

補足

プログラムではどのように表現すればいいのかがよくわからないんですよね。 もう少し考えてみようと思います

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「アルゴリズムの」っていうのは変. 2-3-4木はあくまでデータ構造であってアルゴリズムじゃない. で, 「2-3-4木」についてどこまで調べたんでしょうか? 普通はデータの挿入 (やノードの分割) を含めて (あるいはさらにデータの削除とノードの合併まで込みで) 説明してあるものだと思うんだけどなぁ. ちなみに別法として「B木」で調べるという方針もある.

lockwell
質問者

補足

紙と鉛筆を使い、データを挿入しノードの分割をしてツリーを作ることなら出来るのですが・・・ これをプログラムではどう書くのかがわかりません。ネットで色々調べたのですが、どれもデータ挿入やノードの分割方法(削除も含めて)といった2-3-4木の作り方しかのってなく、プログラムの例は見つけられませんでした。 B木や赤黒木は今回使えず、2-3-4木で作りたいです。 2-3-4木というのは根も葉も配列を使いますよね。2-3-4木なら配列のインデックスは3つで子は4つ。ノードが一杯になったら中間のデータを上に持っていきノードを分割。 実は今回2-3-4-5木でいきたいですが、ただノードの数や配列の要素が1つ増えるだけですので、2-3-4木でのプログラムの仕方がわかれば問題ないと思います。 流れとしては、 public class TwoFiveTree { private TwoFiveTree[] parent; private TwoFiveTree[] childNodes; private String word; TwoFiveTree(){ parent = new TwoFiveTree[4]; childNodes = new TwoFiveTree[4]; }  public static void main(String[] args) {      //テキストファイルから1文字ずつ読み取る。      //もし配列が一杯ならノードを別けるメソッドへ、そしてインサートメソッドへ。      //もし一杯じゃなければ、そのままインサートメソッドへ。 public void INSERT(Node x, String word) {      //ソートしながらデータ挿入。 public void SPLIT_CHILD(Node x, Node y, String word){      //ノードを別ける。 という感じでいいと思うのですが、プログラムはどのように書いたらいいのでしょうか?

すると、全ての回答が全文表示されます。

関連するQ&A