算法基础

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)

根据算法写成的程序在执行时 占用存储单元的长度。这个长度往往与输入数据的 规模有关。空间复杂度过高的算法可能导致使用的 内存超限,造成程序非正常中断。

空间复杂度:用来评估算法内存占用大小的一个式子

posted @ 2019-12-19 22:05  __张达达  Views(185)  Comments(0Edit  收藏  举报