我只是挣扎,因为我不能做一个时间复杂度分析的最后一个周期,我随便添加的边缘与伪随机函数,这里是代码:
SplittableRandom rnd = new SplittableRandom();
ArrayList<ArrayList<Integer>> adjlist = new ArrayList<ArrayList<Integer>>();
for (int j=0;j<n;j++){
adjlist.add(new ArrayList<Integer>());
}
Nodo[]nodi=new Nodo[n];
for(int i = 0;i<n;i++){
nodi[i]=new Nodo(i);
}
for (int i = 0;i<n-2;i++){//O(n)//
int j = rnd.nextInt(i,nodi.length);
Nodo tmp = nodi[j];
nodi[j]=nodi[i];
nodi[i]=tmp;
}
for (int k =0 ;k<n-1;k++){//O(n)//
int i = nodi[k].info;
int j = nodi[k+1].info;
adjlist.get(i).add(j);
adjlist.get(j).add(i);
}
int mrim = m-n+1;
for (int k=0;k<mrim;k++){
int i = rnd.nextInt(0,n);
ArrayList<Integer> a = adjlist.get(i);
while(a.size()==n-1){
i = rnd.nextInt(0,n);
a = adjlist.get(i);
}
int j = rnd.nextInt(0,n);
while (i==j || a.contains(j)){
j = rnd.nextInt(0,n);
}
adjlist.get(i).add(j);
adjlist.get(j).add(i);
}
请任何人帮助我做这个分析吗?这个代码在邻接列表中的一个图形represented节点之间创建一个随机路径后随意添加边。
4.我想我已经对图的结构作了一些假设(是稠密还是稀疏),但我陷入了僵局
1条答案
按热度按时间ct2axkht1#
不要循环,直到你得到一个合适的随机数。
相反,生成一个范围内所有可能数字的列表,删除不允许的数字,然后打乱列表并使用第一个元素。