简单循环中有多少原始操作?

时间:2011-02-21 18:37:28

标签: algorithm loops analysis operations

我有一堆代码来查找原始操作。问题是网络上没有太多关于这个主题的详细资源。在这个循环中:

for i:=0 to n do
  print test
end

我们真的有多少步?在我的第一次猜测中,我会说n + 1,考虑到n代表循环,1代表打印。然后我想,也许我不够精确。即使在每个循环中为i添加1也没有操作? 在那个问题上我们有n + n + 1 = 2n + 1。这是对的吗?

1 个答案:

答案 0 :(得分:4)

通过将循环重新转换为while,循环可以分解为“原始操作”:

int i = 0;
while (i < n)
{
    print test;
    i = i + 1;
}

或者,更明确地说:

loop:
    if (i < n) goto done
    print test
    i = i + 1
    goto loop
done:

然后,您可以看到每次迭代都有比较,增量和goto。这只是循环开销。你必须添加到循环中完成的任何工作。如果print被视为“原始操作”,那么您有:

  • n + 1比较
  • n调用print
  • n增量
  • n + 1 goto条指令(一条完成时分离出循环)

现在,如何将所有内容转换为机器代码在很大程度上取决于编译器,运行时库,操作系统和目标硬件。也许还有其他事情。