4

JGraphXでグラフを作成しています。次のコードを使用すると、JGraphT などの同様のグラフ実装と比較して、ビルドに非常に長い時間がかかります。これはなぜでしょうか?頂点はすばやく作成されますが、特に配列サイズが 1000 の場合、エッジを作成するネストされたループには長い時間がかかります。

Vertex[] verts = new Vertex[1000]; // My own vertex class
mxCell[] cells = new mxCell[1000]; // From com.mxGraph.model.mxCell

// Create graph
mxGraph mx = new mxGraph(); // from com.mxgraph.view.mxGraph

// Create vertices
for(int i = 0; i < verts.length; i++)
{
    verts[i] = new Vertex(Integer.toString(i));
    cells[i] = new mxCell(verts[i]);
    mx.getModel().beginUpdate();
    mx.insertVertex(null, Integer.toString(i), cells[i], 1, 1, 1, 1);
    mx.getModel().endUpdate();
}
System.out.println("Vertices created.");

// Connect graph
Random r = new Random();
for(int j = 0; j < verts.length; j++)
{
    for(int k = 0; k < verts.length; k++)
    {
        if(k != j)
        {
            if(r.nextInt(5) == 0) // Random connections, fairly dense
            {
                mx.getModel().beginUpdate();
                mx.insertEdge(null, Integer.toString(k) + " " + Integer.toString(j), "", cells[j], cells[k]);
                mx.getModel().endUpdate();
            }
        }
    }
}
System.out.println("Finished graph.");
4

1 に答える 1

1

beginend更新は、操作を 1 つに結合することを目的としています。更新を終了すると、グラフが完全に検証されます。ここでは、各アトミック操作のみをラップしています。効果はありません。

グラフを作成した後に開始した開始/終了を削除し、このコードセクションの下部にある終了を削除して、それを試してください。

于 2013-05-24T19:05:26.663 に答える