所以我刚刚开始学习时间的复杂性,而且我有一点" okayish"抓住它然而我对如何处理这段代码有点困惑。 我已经阅读了其他帖子,但我只是很难抓住东西,除非有人屠宰我要说的话。有点像一记耳光。
node_modules/@types
好的,我只计算算术运算。 从我的信念来看,如果我错了(可能是我),请纠正我,
x ++ 发生了n次。
结果+ = 1 发生了n次。
结果+ = 3 *数组[x] 发生2次
全部总计 4n 次
和 i = i / 2 发生登录次
正确的等式是 4nlogn ??
答案 0 :(得分:4)
您与4n*log(n)
走在正确的轨道上。但请注意,对于大O时间复杂度,常量被删除,因此这将是O(n*log(n))
。
由于大O定义,常量被移除:f(x)
O(g(x))
如果所有f(z) <= c*g(z)
的{{1}}&gt;一些数字。这里的关键是z
,它可以是任何常量。即使您的c
为f(x)
,您仍然可以100x
,c=200
仍然会更大。
作为旁注,由于我们可以分解常量,因此在计算大O时间复杂度时不必计算每个操作。你只需看看循环。一次发生g(x)
次,其他发生n
次。所以它是log(n)
。代码可以在每个循环内执行1000次操作,或者它可以执行2.因为常量是从我们的大O方程式中计算出来的,所以这个数字并不重要。只有循环的数量和性质。