这种算法分析是否正确?
Is this analysis of algorithm correct?
假设有一个整数向量,从位置 -infinite..2..1..0..1..2..+infinite 开始。
只有一个位置会包含整数值1,其他位置会包含0,算法会找到包含整数值1的位置。
考虑"verifyDoor" 方法 O(1).
我已经有了这个解决方案,我想知道我的分析是否正确。
我得出以下结果:
T(n)=8n+10
T(n)=O(n)
这里是:
代码:
int findDoor(int[] wall){
if(verifyDoor(0)){ // 1
return 0; // 1
}
int p =1; // 1
while(1){ // n
if(verifyDoor(p)){ // n+1
return p; // n+1
}else{ // n+1
if(p>0){ // n+1
p=p*-1; // n+1
}else{ // n+1
p=(p*-1)+1; // n+1
}
}
}
}
考虑"n"向量长度
T(n) = 8n+10(这将是每条指令的总次数运行)
T(n) = O(n)
是的,它是 O(n),但是将它算作 8n + 10 通常没有多大意义,因为某些操作比另一个操作需要更多的时间,而您甚至不知道它。
例如}else{
并不总是需要额外的时间,因为有些编译器只是实现了"goTo",不管它是跳转到"else"分支还是在if分支之后...
或者声明变量比赋值要多花费 100 个计时器等等
O(n)?什么是n?你需要定义 n.
如果n是门到位置0的距离,那么复杂度是O(n)。
这是因为,对于位置i的一扇门,算法对[-|i|,|i|]中的每个位置都访问一次(除了-i如果i为正),而且只有2|我|或 2|i| + 1 个这样的位置。每次访问需要 O(1) 时间。
假设有一个整数向量,从位置 -infinite..2..1..0..1..2..+infinite 开始。
只有一个位置会包含整数值1,其他位置会包含0,算法会找到包含整数值1的位置。
考虑"verifyDoor" 方法 O(1).
我已经有了这个解决方案,我想知道我的分析是否正确。
我得出以下结果:
T(n)=8n+10
T(n)=O(n)
这里是:
代码:
int findDoor(int[] wall){
if(verifyDoor(0)){ // 1
return 0; // 1
}
int p =1; // 1
while(1){ // n
if(verifyDoor(p)){ // n+1
return p; // n+1
}else{ // n+1
if(p>0){ // n+1
p=p*-1; // n+1
}else{ // n+1
p=(p*-1)+1; // n+1
}
}
}
}
考虑"n"向量长度
T(n) = 8n+10(这将是每条指令的总次数运行)
T(n) = O(n)
是的,它是 O(n),但是将它算作 8n + 10 通常没有多大意义,因为某些操作比另一个操作需要更多的时间,而您甚至不知道它。
例如}else{
并不总是需要额外的时间,因为有些编译器只是实现了"goTo",不管它是跳转到"else"分支还是在if分支之后...
或者声明变量比赋值要多花费 100 个计时器等等
O(n)?什么是n?你需要定义 n.
如果n是门到位置0的距离,那么复杂度是O(n)。
这是因为,对于位置i的一扇门,算法对[-|i|,|i|]中的每个位置都访问一次(除了-i如果i为正),而且只有2|我|或 2|i| + 1 个这样的位置。每次访问需要 O(1) 时间。