Java 联合查找:快速查找,作者是如何得出这些数字的(缩放)
在coursera课程中,以下联合查找仅适用于数字:Java 联合查找:快速查找,作者是如何得出这些数字的(缩放),java,algorithm,union,scaling,union-find,Java,Algorithm,Union,Scaling,Union Find,在coursera课程中,以下联合查找仅适用于数字: 公共类QuickFindUF { 私有int[]id; 公共QuickFindUF(内部N) { id=新的整数[N]; 对于(int i=0;i
公共类QuickFindUF
{
私有int[]id;
公共QuickFindUF(内部N)
{
id=新的整数[N];
对于(int i=0;i
在幻灯片的末尾,如何计算每秒10^9次操作和其他10^x的数字(包括10)?所有数字均在下图中:(文本也复制在下图中) 粗略的标准(目前)
- 每秒10^9次操作
- 10^9个字的主存
- 在大约1秒内触摸所有单词
- 对10^9个对象执行10^9个union命令
- 快速查找需要10^18次以上的操作
- 30多年的计算机时间李>
如果你有一个10亿整数的内存,你需要1秒的时间来查看它们,所以一个在这40亿整数上为O(n)的算法需要1秒的时间。如果算法为O(n2),则需要1018次运算,或10亿秒,大约相当于31年。“每秒10^9次运算……是如何计算的”—CPU的工作频率为数十GHz,假设每次运算的时钟节拍数为数十次,则大致为Gops/s,因此为10^9次运算/秒。内存容量Contact coursera也是如此?除非本培训的作者碰巧读到了你的问题,否则我不知道如何在这里回答。联系coursera会让作者更有可能阅读你的问题。其中一些数字是对当前计算速度的估计,而另一些则不是。你在质疑哪一个?@AdrianColomitchi,那么10GHz是否被视为最大可能的cpu频率,RAM也是如此?“10GHz是否被视为最大可能的cpu频率”——用“数量级”而不是“精确到数不清的小数位”来表述,但大致上这似乎是一个合理的解释。
public class QuickFindUF
{
private int[] id;
public QuickFindUF(int N)
{
id = new int[N];
for (int i = 0; i < N; i++)
id[i] = i;
}
public boolean connected(int p, int q)
{ return id[p] == id[q]; }
public void union(int p, int q)
{
int pid = id[p];
int qid = id[q];
for (int i = 0; i < id.length; i++)
if (id[i] == pid) id[i] = qid;
}
}