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 算法复杂度的主要内容,如果未能解决你的问题,请参考以下文章

7种基本排序算法的Java实现

关于代码片段的时间复杂度

以下代码片段的时间复杂度是多少?

Java排序算法 - 堆排序的代码

Python100天学习笔记Day17 数据结构与算法

Python100天学习笔记Day17 数据结构与算法