Java 联合查找:快速查找,作者是如何得出这些数字的(缩放)

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

在coursera课程中,以下联合查找仅适用于数字:

公共类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多年的计算机时间
这些数字是计算机处理速度(GHz)和内存大小(G“字”,即整数或4GB)的数量级估计值


如果你有一个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;
 }
}