算法基础
1. 什么是算法
-
算法(Algorithm):一个计算过程,解决问题的方法
-
一个算法应该具有一下七个重要特称:
- ①有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止;
- ②确切性(Definiteness):算法的每一步骤必须有确切的定义;
- ③输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输 入是指算法本身定出了初始条件;
- ④输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没 有输出的算法是毫无意义的;
- ⑤可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行 的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);
- ⑥高效性(High efficiency):执行速度快,占用资源少;
- ⑦健壮性(Robustness):对数据响应正确。
2. 算法的好坏评判标准
时间复杂度:T(n)
根据算法写成的程序在执行时 耗费时间的长度。这个长度往往也与输入数据的规 模有关。时间复杂度过高的低效算法可能导致我们 在有生之年都等不到运行结果。
时间复杂度:就是用来评估算法运行时间的一个式子(单位)。一般来说,时间复杂度高的算法比复杂度低的算法慢。
print('hello world')
print('hello python')
print('hrllo ssd ') #O(1) 大O,简而言之可以认为它的含义是“order of”(大约是)。
#
for i in range(n):
print('hello world')
for j in range(n):
print('hello world') #O(n^2)
for i in range(n):
for j in range(i):
print('hrllo owd') ##O(n^2)
n= 64
while n>1:
print(n) #O(log2n)或者O(logn)
n = n//2
while的分析思路:
假如n = 64的时候会输出:如下图
这时候可以发现规律:
-
常见的事件复杂度:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
空间复杂度:S(n)
根据算法写成的程序在执行时 占用存储单元的长度。这个长度往往与输入数据的 规模有关。空间复杂度过高的算法可能导致使用的 内存超限,造成程序非正常中断。
空间复杂度:用来评估算法内存占用大小的一个式子