数据结构与算法(python)_01_时间复杂度
文章目录
时间复杂度
机器执行基本运算数量总和。描述算法的时间效率。
假定计算机执行算法的每一个基本操作的时间是一个固定的时间单位,那么有多少个基本操作就代表会花多少时间单位。虽然对于不同机器环境而言确切的时间单位不同,但是对于算法进行多少个基本操作在规模数量级上却是相同的。
示例:
则上图时间复杂度为:T(n) = n^3 *2
在分析中,只看大概特征就够了,所以: T(n) = n^3
对于算法的时间效率,用“大O记法”表示
大O记法
对于单调的整数函数f,如果存在一个整数函数g和实常数c>0,使得对于充分大的n总有f(n)<=c*g(n),就说函数g是f的一个渐进函数(忽略常数),记为f(n)=O(g(n))。
也就是说,在趋向无穷的极限意义下,函数f的增长速度受到函数g的约束,即函数f与函数g的特征相似。
假设存在函数g,使得算法A处理规模为n的问题所用时间为 T(n)=O(g(n)),则O(g(n))为算法A的渐进时间复杂度。
最坏时间复杂度
同一个算法,处理的数据不同,时间复杂度可能不同,我们主要选择最坏的,用时最多的那一个作为衡量这个算法的时间复杂度。
时间复杂度计算规则
- 基本操作,只有常数项,认为其时间复杂度为O(1)
- 顺序结构,时间复杂度按加法算
- 循环结构,时间复杂度按乘法算
- 分支结构,时间复杂度取最大值
- 判断一个算法的效率时,只需关注操作数量的最高次,其他次要项和常数项可以忽略不计
- 在没有特殊说明时,时间复杂度就是最坏时间复杂度
常见时间复杂度
常见时间复杂度比较
timeit模块
def test1(): l = [] for i in range(1000): l = l + [i] def test2(): l = [] for i in range(1000): l.append(i) def test3(): l = [i for i in range(1000)] def test4(): l = list(range(1000)) from timeit import Timer t1 = Timer("test1()", "from __main__ import test1") print("concat ",t1.timeit(number=1000), "seconds") t2 = Timer("test2()", "from __main__ import test2") print("append ",t2.timeit(number=1000), "seconds") t3 = Timer("test3()", "from __main__ import test3") print("comprehension ",t3.timeit(number=1000), "seconds") t4 = Timer("test4()", "from __main__ import test4") print("list range ",t4.timeit(number=1000), "seconds")
list和dict内置操作的时间复杂度
list和dict不是基本类型,内部操作就会有不同的时间复杂度。
数据结构
我们如何用Python中的类型来保存一个班的学生信息? 如果想要快速的通过学生姓名获取其信息呢?
列表和字典都可以存储一个班的学生信息,但是想要在列表中获取一名同学的信息时,就要遍历这个列表,其时间复杂度为O(n),而使用字典存储时,可将学生姓名作为字典的键,学生信息作为值,进而查询时不需要遍历便可快速获取到学生信息,其时间复杂度为O(1)。
数据是一个抽象的概念,将其进行分类后得到程序设计语言中的基本类型。如:int,float,char等。数据元素之间不是独立的,存在特定的关系,这些关系便是结构。数据结构指数据对象中数据元素之间的关系。
Python的内置数据结构,比如列表、元组、字典。而有些数据组织方式,Python系统里面没有直接定义,这些数据组织方式称之为Python的扩展数据结构,比如栈,队列等。
抽象数据类型(Abstract Data Type)
抽象数据类型(ADT):把数据类型和数据类型上的运算捆在一起,进行封装。
- Python数据结构与算法之 时间复杂度与大O表示法
- 01-时间复杂度、对数器(python)、冒泡、选择、递归实质、归并、小和问题、逆序对、mid
- Python数据结构与算法之 常见时间复杂度与计算规则
- python算法与数据结构:01时间复杂度
- Python数据结构与算法之 最坏时间复杂度与计算规则
- python 各种排序时间复杂度和空间复杂度
- LintCode -- 不同的二叉查找树(python-O(n)时间复杂度)
- 数据结构与算法、时间复杂度的粗略定义
- 查找与排序01,线性查找,时间复杂度,算法
- 【数据结构与算法】时间复杂度和空间复杂度
- 数据结构与算法(Python版):时间复杂度和大O表示法
- Python算法的时间复杂度和空间复杂度(实例解析)
- python中pop()与pop(0)的时间复杂度区别
- 【数据结构与算法之美】读书笔记03 --最好、最坏、平均、均摊时间复杂度
- python_lintcode_372在O(1)时间复杂度删除链表节点_174删除链表中倒数第n个节点
- Python内置方法的时间复杂度(转)
- 数据结构与算法的分析 —— 平均时间复杂度 vs 分摊时间复杂度
- 数据结构与算法(Python版):时间复杂度和大O表示法
- Python内置方法的时间复杂度
- Python内置方法的时间复杂度