python数据结构与算法知识_Python 学习 -- 数据结构与算法 (一)

从广义上讲,数据结构就是指一组数据的存储结构,算法就是操作数据的一组方法。数据结构是为算法服务的,算法要作用在特定的数据结构之上。

数据结构与算法的知识地图如下:

8dde642e4977

image.jpeg

常用的10个数据结构有: 数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树;

常用的10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

复杂度分析:

大 O 复杂度表示:

大 O 时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作 渐进时间复杂度,简称时间复杂度。

只关注循环执行次数最多的一段代码

加法法则:总复杂度等于量级最大的那段代码的复杂度

乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

几种常见复杂度分析:

8dde642e4977

image.jpeg

这几种复杂度量级,可以粗略的分为两类,多项式量级和非多项式量级,其中非多项式量级只有两个: O(2的n次方) 和 O(n!)。

时间复杂度为非多项式量级的算法问题叫作 NP (Non-Deterministic Polynomial,非确定多项式) 问题。

当数据规模n越来越大时,非多项式量级算法的执行时间会急剧增加,求解问题的执行时间会无限增长。所以、非多项式时间复杂度的算法其实是非常低效的算法。下面介绍一下几种常见的多项式时间复杂度:

O(1)

O(1) 是指代码执行时间不随 n 的增大而增长,一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行代码,其时间复杂度也是 O(1)

O(logn), O(nlogn)

i = 1

while i <= n:

i = i * 2

第三行代码执行次数最多,变量 i 的取值从1 开始取,每循环一次就乘以2,。当大于等于n时,循环结束。这里 i 的取值就是一个等比数列:

8dde642e4977

image.jpeg

8dde642e4977

image.png

8dde642e4977

image.png

,这段代码的时间复杂度就是

8dde642e4977

image.png

在采用大 O 标记复杂度的时候,可以忽略系数,即 O(Cf(n)) = O(f(n)),所以在对数阶时间复杂度的表示方法里,忽略对数的 底,统一表示为 O(logn)

如果将时间复杂度为 O(logn) 的代码执行 n 遍,那么复杂度就 是O(nlogn)。

O(m +n), O(m * n)

def cal(m, n):

sum_1 = 0

i = 1

for i in range(m):

sum_1 += i

sum_2 = 0

j = 1

for j in range(n):

sum_2 += j

return sum_1 + sum_2

在这个代码中,m 和 n 表示两个数据规模,但是无法事先评估 m 和 n 谁的量级大,所以在表示复杂度的时候,就不能简单的利用加法法则,省略其中的一个,所以 上面代码的时间复杂度就是 O(m+n)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值