算法数据结构01 /算法数据结构概述
算法数据结构01 /算法数据结构概述
1. 算法
-
算法概述
算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。
算法是独立存在的一种解决问题的方法和思想。
对于算法而言,实现的语言并不重要,重要的是思想。
-
算法的五大特性
- 输入: 算法具有0个或多个输入
- 输出: 算法至少有1个或多个输出
- 有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
- 确定性:算法中的每一步都有确定的含义,不会出现二义性
- 可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
2. 评判程序优劣的方法
-
消耗计算机资源和执行效率(无法直观)
-
计算算法执行的耗时(不推荐,因为会受机器和执行环境的影响)
-
时间复杂度(推荐)
3. 时间复杂度
-
评判规则:量化算法执行的操作/执行步骤的数量
-
表现形式:大O记法
- 最重要的项:时间复杂度表达式中最有意义的项
- O(最重要的项)😮(n),O(n**2)
-
常见的时间复杂度:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)
代码示例:计算下列算法的时间复杂度
a=5 b=6 c=10 for i in range(n): for j in range(n): x = i * i y = j * j z = i * j for k in range(n): w = a*k + 45 v = b*b d = 33 # 时间复杂度:4+3n**2+2n==>n**2
4. 数据结构
- 概念:对于数据(基本类型的数据(int,float,char))的组织方式就被称作为数据结构。数据结构解决的就是一组数据如何进行保存,保存形式是怎样的。
5. python数据结构性能分析
-
timeit模块:该模块可以用来测试一段python代码的执行速度/时长。
-
Timer类:该类是timeit模块中专门用于测量python代码的执行速度/时长的。原型为:class timeit.Timer(stmt='pass',setup='pass')。
- stmt参数:表示即将进行测试的代码块语句。
- setup:运行代码块语句时所需要的设置。
- timeit函数:timeit.Timer.timeit(number=100000),该函数返回代码块语句执行number次的平均耗时。
-
代码示例:
import timeit def test01(): alist = [] for i in range(1,1001): alist += [i] return alist def test02(): alist = [] for i in range(1,1001): alist.append(i) return alist def test03(): alist = list(range(1,1001)) return alist def test04(): alist = [i for i in range(1,1001)] return alist if __name__ == '__main__': #stmt:待执行的代码块 #setup: timer = timeit.Timer(stmt='test01()',setup='from __main__ import test01') print(timer.timeit(5000)) timer1 = timeit.Timer(stmt='test02()',setup='from __main__ import test02') print(timer1.timeit(5000)) timer2 = timeit.Timer(stmt='test03()',setup='from __main__ import test03') print(timer2.timeit(5000)) timer3 = timeit.Timer(stmt='test04()',setup='from __main__ import test04') print(timer3.timeit(5000)) """ 0.41899349999999913 0.4362713999999954 0.0754374999999925 0.2028786999999994 """
6. 总结
- 使用不同的形式组织数据,在基于查询时的时间复杂度是不一样的。因此认为算法是为了解决实际问题而设计的,数据结构是算法需要处理问题的载体。