1

優れた JGraphT ライブラリを使用して、有向非巡回グラフと Java の練習として Java で Scrabble プログラムを作成しようとしています。

したがって、私のエッジは文字になり、頂点のビットセットはアルファベットのサイズになります。基本的に、グラフを文字ごとにトラバースし、現在のビットセットをチェックして、ルート ノードからたどった文字の弧に追加された場合に、どの文字が単語を形成するかを確認します。

私はそれを理解していますが、私が心配しているのは、JGraphT Javadoc からの次の内容です。

このメソッドは、このグラフの EdgeFactory を使用して新しいエッジ e を作成します。新しいエッジを追加するには、e をグラフの他のエッジと等しくしてはなりません (グラフがエッジの多重度を許可している場合でも)。より正式には、グラフには e2.equals(e) のようなエッジ e2 が含まれていてはなりません。そのような e2 が見つかった場合、新しく作成されたエッジ e は破棄され、メソッドはこのグラフを変更せずに残し、null を返します。

参照が一致しないという意味を除いて、エッジとノードが一意になることはありません。では、私の質問は、Java プログラマーはここで何をするでしょうか?

  • Letter クラスと BitSet クラスを作成し、equals() をデフォルトのままにしておきます。参照が一致しないため、常に false になりますか? しかし、.equals() が .contains() のように正しいことに依存する他のすべてのメソッドをどのように処理すればよいでしょうか?

  • 実際の Letter クラスと BitSet クラスの薄いラッパーとして Edge クラスと Node クラスを作成し、常に false .equals() を Edge;Node に配置し、実際のクラスを Letter;Bitset? に配置します。

    public class Edge {
      private Letter letter;
      //getter and setter coming
      public boolean equals (Object b) {
        return false;
      }
    }
    
  • 他の何か?
4

1 に答える 1

1

BitSet頂点には、BitSet に設定されたビットによって定義された ID が既にあるため、それ自体を頂点に使用できます。

エッジは通常、開始点と終了点に関する情報を保持する必要があるためEdge、 start BitSet、 end BitSet、および edgeを含むクラスをお勧めしますLetter

2 つの頂点間に 2 つのエッジが存在しない場合 (つまり、エッジの多重度が許可されていない場合)、Edge文字を無視して、開始と終了が等しいかどうかをテストするものとして、クラスに equals と hashcode を定義できます。始点と終点が等しいエッジが複数ある可能性があるためにエッジの文字が重要な場合は、ノード間で文字を適切に等しくする必要があります。

于 2011-06-26T17:58:01.233 に答える