gpt4 book ai didi

java - 有没有更快的算法来构造这个图的邻接表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:31 26 4
gpt4 key购买 nike

我的问题是找到一个更好的算法来填充邻接表。

规范:

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)

中返回 true

是否存在复杂度为 O(v)O(v*log()v) 的算法?

最佳答案

在最坏的情况下,您尝试构建的图形中有 Θ(|V|2) 条边(边的总数为 0 + 1 + 2 + ... + |V|-1 = |V|(|V| - 1)/2), 因此任何显式构建图邻接表的算法都必须执行 Ω(|V|2) 在最坏的情况下也能正常工作,因为需要添加很多边。

由于这里的边有一个很好的模式,您可以想象创建某种延迟计算的邻接列表,它只在需要时创建边,尽管这是一个单独的问题。

关于java - 有没有更快的算法来构造这个图的邻接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44829881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com