确定此算法的Big-O

时间:2017-07-05 22:23:13

标签: algorithm time-complexity big-o

我试图了解下面代码中的Big-O是什么。

代码应该做什么

基本上,我试图选择随机节点的子集(max size = selectionSize)以及它们之间存在的任何边。随机节点的选择在while循环中完成。完成后,我想选择所选节点之间存在的任何边。

我认为是什么&为什么

我认为运行时间为O = n^2 n=selectionSize。原因是:即使我可以增加nodes中元素的大小(例如将其设为10000),我也不相信它会影响算法,因为我只是循环遍历{{1}的最大值1}}。我有点担心这是错误的唯一原因是因为selectionSize循环,我从列表中选择随机元素,直到我有足够的。虽然这可能需要很长时间(因为它是随机的),但我认为它不会影响整体输出的时间。 编辑 :呃第二个想法......没关系...... while大小会对它产生影响(因为nodes最多可以达到这个大小[{1}})..所以我认为如果node.getNeighbors()等于nodes的大小,则运行时间为selectionSize,其中nodes。< / p>

任何提示/提示都将不胜感激。

代码

O=n^2

2 个答案:

答案 0 :(得分:1)

如果override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) super.touchesBegan(touches , with:event) } 适用于替换(同一节点可以选择两次),那么大o是not defined,因为你有一个可能无限循环(你最终可能会再次选择同一节点)再次)。

如果它没有替换就可以工作,那么它是selectRandomNode(nodes);(在最坏的情况下,每个节点都可以连接到每个其他节点)。

<小时/> 选择无需替换的注意事项:

  • 考虑给您一个大小为O(n^2)的数组,例如n和一个空数组A的情况。 A中的所有元素都是唯一的。

  • 任务是使用从B随机选择的B元素填充n。希望A中至少应有k个唯一元素。

可以证明,具有B个唯一项目的概率随着k的增加而增加(我在图之后添加了等式)。

因此,在实践中,随着nn的差异增加,单次通过(即,小于n步骤)中的循环完成的概率变大。 如果你仔细想想它会非常直观,数学就是最重要的。

enter image description here

k

答案 1 :(得分:0)

如果我理解这一点,我不是百分百肯定的。但是让我们分解一下: while -Loop运行“selectionSize” - 最佳情况和最差情况n(其中n是节点数量)

因此randomNodeList的大小在O(n)中。 在一个简单的图中,您可以有O(n-1)个邻居。所以整个循环必须在O(n ^ 2)(因为 n *(n-1))

  公理是正确的。实际上不可能找到该算法的上限。这是不确定的。这取决于你的随机数。