Big o 当初始化为非零时,如何计算for循环的原语比较操作?

Big o 当初始化为非零时,如何计算for循环的原语比较操作?,big-o,complexity-theory,Big O,Complexity Theory,对于For循环,如下所示: for(i = 0; i < n; i++){ } (i=0;i

对于For循环,如下所示:

for(i = 0; i < n; i++){

}
(i=0;i{ }
初始化计数为1次操作,条件测试执行n+1次,增量n次。这就给出了一个T(n)=1+n+1+n=2n+2。这我理解。当我被分配一个非零值时,我感到困惑。我假设当I=1时,比较只发生n次,结果是T(n)=1+n+n=2n+1?但是如果我被分配到10,会发生什么呢?还是负值?比较的数量仍然是n还是n+1?

让我们用
i0
的初始化替换0的初始化,以使整个事情更一般化

因此伪代码如下所示:

i0 = 0;
for (i = i0; i < n;  i++) { }
T_init
应该是清晰的。正如您所说,初始化总是只运行一次,与n无关

比较总是在增量之后直接运行,但在第一次循环迭代之前也会运行一次。所以
T_cmp(n)=T_inc(n)+1

您还可以尝试使用一些帮助器函数:

function init() {
  print("init");
  return i0;
}
function cmp(i,n) {
  print("cmp");
  return i < n;
}
function inc(i) {
  print("inc");
  return i+1;
}
for (i = init(); cmp(i,n); i = inc(i)) { }
函数init(){
打印(“初始”);
返回i0;
}
函数cmp(i,n){
印刷品(“cmp”);
返回i

这应该为每个操作打印一行,以便您可以计数行来测量“时间”。(这是伪代码,因此您必须采用您的语言来运行它:)

让我们将初始化替换为0,并将初始化替换为
i0
,以使整个过程更加通用

因此伪代码如下所示:

i0 = 0;
for (i = i0; i < n;  i++) { }
T_init
应该是清晰的。正如您所说,初始化总是只运行一次,与n无关

比较总是在增量之后直接运行,但在第一次循环迭代之前也会运行一次。所以
T_cmp(n)=T_inc(n)+1

您还可以尝试使用一些帮助器函数:

function init() {
  print("init");
  return i0;
}
function cmp(i,n) {
  print("cmp");
  return i < n;
}
function inc(i) {
  print("inc");
  return i+1;
}
for (i = init(); cmp(i,n); i = inc(i)) { }
函数init(){
打印(“初始”);
返回i0;
}
函数cmp(i,n){
印刷品(“cmp”);
返回i
这应该为每个操作打印一行,以便您可以计数行来测量“时间”。(这是伪代码,所以您必须采用您的语言来运行它:)