0

私は、JavaBeans のセットをグラフ構造でモデル化する必要がある立場にいます。ここで、各 Bean はグラフ上のノード/頂点であり、それらは「接続」/エッジを介して互いに「接続」/関連しています。

したがって、List<?>orArrayList<?>を使用してアイテムのシーケンスを表すのと同じように、グラフ内のノードを表す (できれば汎用的な) API が必要です。この API は、グラフを作成したり、グラフからノードを追加/削除したりできるようにする必要があります。

また、任意のデータ値を渡してグラフ全体を検索できるようにする必要があり、そのデータを含むノード/頂点を返します。

見つけられるのは組み込みの JavaTreeSetだけですが、単一のルート ノードから流れる有向ツリーは必要ありません。真の (数学的な意味での) グラフ API が必要です。

そのような解決策はそこに存在しますか、それとも私はゼロから自分自身を書くことに行き詰まっていますか (うーん)。前もって感謝します!

4

1 に答える 1

0

私がそれをよく理解していれば、次のような「ノード」オブジェクトの表現が必要です。

1)値を保存できるため、後で適切なノードを検索できます

2) 定義済みのデータ構造を使用して、グラフの情報を保持します。

3) 検索アルゴリズムでの使用を許可します。

3 つの要求すべてを満たす単純なソリューションがあります。

public class Node {

    // Add as many fields as you need to contain the node info
    private String mName;
    private int mArbitraryValue;

    // Store the adjacent nodes in a list
    private List<Node> mAdjacencyList;

    //Define your constructors
    public Node(String name, int arbitraryValue, List<Node> adjacencyList) {
        mName = name;
        mArbitraryValue = arbitraryValue;
        mAdjacencyList = adjacencyList;
    }

    /* Add your methods here depending on the functionality that
       you want to implement
    */

    public String getName() {
        return mName;
    }

    public int getArbitraryValue() {
        return mArbitraryValue;
    }

    public List<Node> getNeighbors() {
        return Collections.unmodifiableList(mAdjacencyList);
    }

    // Add setters if you want these values to be able to change

    public boolean addNeighbor(Node n) {
        return !mAdjacencyList.contains((Node) n) && mAdjacencyList.add(n);
    }

    public boolean removeNeighbor(Node n) {
        return mAdjacencyList.remove((Node) n);
    }
}

オブジェクトを変更できる場合、HashMap を使用して隣接リストを実装することはお勧めしません。セットが壊れる可能性があるためです (つまり、オブジェクトが存在する場合でも、contains() の呼び出しで false が返される可能性があります)。

これで、検索アルゴリズムはノードのメンバー変数にアクセスして、それらが完了したかどうかを確認できます。

于 2016-04-22T23:59:43.937 に答える