17 算法复杂度
Posted alichengxuyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17 算法复杂度相关的知识,希望对你有一定的参考价值。
问题
解释一下算法复杂度
答案
- 算法一般包括以下衡量指标:正确性、可读性、健壮性、良好的时空效率,其中的时空效率就是对算法复杂度的衡量。
- 算法的效率一般由以下因素决定:
(1)算法采用何种策略,排序算法中快速排序就快于冒泡排序
(2)问题的规模,寻找10以内的质数显然快于寻找1000以内的质数
(3)书写程序的语言,汇编语言的效率显然高于java
(4)编译程序产生的机器代码的质量,机器代码质量越高执行越快
(5)机器执行指令的速度,I7上的执行显然快于I5。
以上因素的考量当然是在其他因素固定的情况下去思索的。 - 算法复杂度包括时间复杂度和空间复杂度。因为java有垃圾回收机制,只要不是在循环中反复申明不可释放的变量,内存必然稳定。所以,我们更为关心时间复杂度,即CPU时间,而CPU时间又可以转化为语句执行次数。因此,我们分析时间复杂度,只需要找出一个问题规模n与关键代码执行次数的关联关系即可。请看以下的代码:
private static void bubble(int[] n)
{
for (int i = 0; i < n.length - 1; i++)
{
for (int j = 0; j < n.length - i - 1; j++)
{
if(n[j] > n[j + 1])
{
int temp = n[j];
n[j] = n[j + 1];
n[j + 1] = temp;
}
}
}
}
这段代码的关键代码是交换逻辑。最好的情况是n={1,2,3,4,5,6,7,8,9,10};最坏的情况是n={10,9,8,7,6,5,4,3,2,1}。对于前者来说,关键代码的执行次数是0;对于后者来说,关键代码的执行次数是90,即10(10-1),进一步转换为n(n-1),再转换为n平方-n,平方显然比n的影响要大,所以,舍小取大,这段冒泡排序的时间复杂度就是n平方。
以上是关于17 算法复杂度的主要内容,如果未能解决你的问题,请参考以下文章