【发布时间】:2017-06-29 15:52:40
【问题描述】:
我的问题是找到一个更好的算法来填充邻接表。
规格:
G = (V , E ) //the graph
V ={w} //vertex in this case each vertex is an array
E={⟨u,v⟩| u,v ∈V ∧ u>v} // edge only if u > v
u > v only if foreach i u̸=v ∧ u[i]≥v[i]. // (u>v and v>w => u>w)
我的天真代码复杂度O((v+1)*v/2)≈O(n^2)是
private void riempiAdj() {
for(int i=0;i<nodi.length;i++)
for(int j=i+1;j<nodi.length;j++)
if(nodi[i].eMaggiore(nodi[j]))
nodi[i].adj.inserisci(nodi[j]);
}
nodi是顶点数组
adj是邻接表
AdjList.inserisci(Vertex t)将一个顶点t添加到邻接表中O(1)
Vertex.eMaggiore(Vertex t) 在此 > t O(1)
是否存在复杂度为 O(v) 或 O(v*log()v) 的算法?
【问题讨论】:
标签: java algorithm graph complexity-theory