c2h*_*5oh 2 algorithm complexity-theory asymptotic-complexity
我是算法分析领域的新手.我在这里阅读Stack Overflow问题" 什么是"大O"符号的简单英语解释? " O(2n^2)和O(100 n^2)那些相同O(n^2).我不明白这一点,因为如果我们采用n = 4,操作次数将为:
O(2 n^2) = 32次操作O(100 n^2) = 1600次操作 O(n^2) = 16次操作任何人都可以解释为什么我们应该将这些不同的操作计数视为等效吗?
为什么这是真的可以直接从正式定义中得出.更具体地说,f(x) = O(g(n))当且仅当|f(x)| <= M|g(x)| for all x >= x0某些M和x0.在这里,您可以自由挑选M,如你所愿,所以如果M = 5对是真实的,那么你可以随便挑的是真的.f(x) = O(n2)M = 5*100f(x) = O(100 n2)
为什么这是有用的是一个不同的故事.
关于常量的一些问题很重要:
Big-O(渐近复杂度的一部分)避免了所有这些问题.您只需检查执行一段时间(即独立于输入大小)的某段代码的次数.例如:
c = 0
for i = 1 to n
for j = 1 to n
for k = 1 to n
  x = input[i]*input[j]
  y = input[j]*input[k]
  z = input[i]*input[k]
  c += (x-y)*z
所以有4次乘法,1次减法和1次加法,每次执行n 次3次,但这里我们只说这段代码:
  x = input[i]*input[j]
  y = input[j]*input[k]
  z = input[i]*input[k]
  c += (x-y)*z
在恒定时间内运行(无论数组中有多少元素,它总是需要相同的时间)并且将执行一次,因此运行时间为.O(n3)O(n3)