我必须找到算法的最佳和最差情况,但我不了解结果:
int chOne=1;
for (int i=0; i<list.lenght; i++)
if(list[i]<list[chOne]){
chOne=i;
}
return chOne;
BC:2C + 2C(N-1)= 2 CN
WC:2C + 3C(N-1)= 3 CN-C
我不知道什么是&#34; n-1&#34 ;;并且遵循其他类似的练习,它(我认为)
BC:5c中
WC:3C + 2CN
有人能告诉我为什么不是这样的? 谢谢!
答案 0 :(得分:1)
精确数字取决于您在算法模型中考虑原子操作的内容。
然而,它始终坚持
i
,测试循环终止并在每次迭代中检查新的最小值。chOne
索引的当前最小候选者时,就会发生更新操作。所以你最好的情况是,当没有发生更新时(如果chOne
的初始选择索引最小的列表元素就是这种情况),并且在最坏的情况下,每次迭代发生更新但是1,后者是当前列表索引等于chOne
的原始选择时的迭代(要么已经有更新,那么当前索引元素不能小于当前选择,或者原始索引chocie已经{ {1}},然后两个索引都是相同的。)
使用0
代表列表长度,n
作为每次迭代的固定成本和2c
c
更新的成本,您需要保证一次迭代成本chOne
和2c
次迭代,每项费用至少为n-1
,可能为2c
。