码迷,mamicode.com
首页 > 编程语言 > 详细

17 算法复杂度

时间:2020-03-31 19:01:35      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:解释   length   良好的   时间复杂度   最好   时空   语言   空间复杂度   复杂度   

问题

解释一下算法复杂度

答案

  • 算法一般包括以下衡量指标:正确性、可读性、健壮性、良好的时空效率,其中的时空效率就是对算法复杂度的衡量。
  • 算法的效率一般由以下因素决定:
    (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 算法复杂度

标签:解释   length   良好的   时间复杂度   最好   时空   语言   空间复杂度   复杂度   

原文地址:https://www.cnblogs.com/alichengxuyuan/p/12606931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!