【发布时间】:2016-12-09 21:10:44
【问题描述】:
假设有一个包含n个元素的数组A,以及一行代码中包含多个条件的if语句,例如:
for i = 2 to n
if A[i] > m and A[i] - A[1] = EVEN
then set m to A[i]
第二行的运行时间是 n-1,还是 2*(n-1),因为 if 语句有两个条件?
【问题讨论】:
标签: sorting data-structures runtime theory
假设有一个包含n个元素的数组A,以及一行代码中包含多个条件的if语句,例如:
for i = 2 to n
if A[i] > m and A[i] - A[1] = EVEN
then set m to A[i]
第二行的运行时间是 n-1,还是 2*(n-1),因为 if 语句有两个条件?
【问题讨论】:
标签: sorting data-structures runtime theory
一般而言,当您谈论运行时,您需要某种“成本模型”来谈论每个操作的“成本”。实际上,看到一个成本模型会进入您将在此处进入的详细程度是非常不寻常的 - 通常,您只是抽象出细节并说执行所有这些测试的成本是 O(1) (一些不依赖于输入大小的常数)而不是在那个精确的级别上计数。
如果您要精确地计算一个级别,您可能还需要考虑数组查找的成本,无论事物是否短路,分支预测或错误预测对运行时的影响等...这部分解释了为什么很少有人真正谈论如此详细的事情。
【讨论】:
A[i] - A[1] = EVEN)的次数取决于第一个条件的结果以及语言是否允许短路评估。