我正在接受面试准备课程,因为我完全是自学成才。我的导师希望我在算法中表达比较次数,大概是在公式中。
他给我的例子是计数排序,所以它有三个循环;两个在同一范围内,一个嵌套。嵌套循环中也可能进行三次比较。
A) 我知道在for循环中:
for(var i = 0; i < n; i++)
将进行n次比较。 使用嵌套循环:
for(var i = 0; i < n; i++){
for(var y = 0; y < n; y++){}
}
有n ^ 2个比较。
b)中 考虑两个if子句有三个潜在的比较,它看起来像这样:
for(var i = 0; i < n; i++){
for(var y = 0; y < n; y++){
if(array[y] < target_values){}
else if(array[y] == target_values && y <i ){}
}
}
此时最坏情况不是n * 3n而最佳情况是n * 2n吗? 如果我们在上面的外部循环范围内添加第三个循环,那么不会有n * 3n + n个比较,最坏的情况是这个算法?最佳情况n * 2n + n?
答案 0 :(得分:1)
n
次重复,您将i
与n
进行比较。如果始终执行else子句(即所有元素&gt; = target_values
):
如果else if first子句始终为true(即所有元素== target_values
):
最坏情况下4*n^2 + n
的总和。
为了最好的情况,所有元素都小于target_values
,并且您进行了2*n^2 + n
次比较。
此解决方案假定了以下几点: