算法是什么
算法是指完成一个任务所需要的具体步骤和方法。
复杂性
算法的复杂性主要包括时间和空间两个方面。
问题的规模
指的是输入数据量的尺度,如图的节点数和边数。
时间复杂度
1,不关心具体时间的原因:
方便多种算法之间比较,需要相对时间
不拘泥于具体的语言
技术独立,无论科技如何进步,复杂性不变
实际主要关心大规模数据的输入
阶
随着问题规模的扩大,低阶项影响变小可以忽略,使用渐进运行时间表示。如n阶 log n阶
2,同阶的两个算法的比较:
两个运行时间的比值,分析这个常量
3,元运算
以一个时间常量为上界,不管输入和执行的算法运算步骤。如加法、减法。
空间复杂度
1,空间复杂度不包括输入的数据空间,仅为算法所需的工作空间
2,空间复杂度无法超过时间复杂度,因为每写入一个数据,都需要时间。
3,算法中大部分情况是空间复杂度不如时间复杂度重要
实际运算中,增加空间不会明显加快算法速度,但是减少空间会导致算法变慢。只要空间合理,时间比空间珍贵。
大多数已有的最优算法,空间复杂度在O(n)内。
4,最优算法
求解问题花费的时间,在下界。
算法评估
1,运行时间
我们可以通过多个角度评估
迭代次数
基本运算的频度
递推公式
2,最坏情况
对于最坏情况,大部分我们只能证明算法有一个上界,而能否达到这个上届却不知道。即使我们知道一个算法的无限多个值用的时间达到了上界,也不能说算法在最坏情况的运行时间就是上界。
3,输入规模
图灵机作为模型,以非空单元测算算法的输入的大小。