Python-数据结构和算法基础
数据结构是计算机存储、组织数据的方式。选择合适的数据结构,能让程序事半功倍。
| 数组/列表 (Array/List) |
连续存储,通过索引(编号)快速访问任意位置的元素 特点:查询快但增删慢 1、数组/列表中的每一个变量被称为元素 |
Python的list 尾部添加 |
| 链表 (Linked List) |
元素分散存储,通过“指针”连接。插入和删除元素很快,但查找元素需要从头开始。 特点:增删快但查询慢 1、每个节点的组成:存放数据的变量data+指向下一个节点的指针next
|
Python无内置,需自定义 |
| 栈 (Stack) |
只允许在顶部添加或移除元素。用于函数调用、撤销操作等。 特点:后进先出(LIFO) |
用 list 模拟(append/pop ) |
| 队列 (Queue) |
允许在一端添加,在另一端移除。用于任务调度、消息队列等。 特点:先进先出(FIFO) |
collections.deque |
| 哈希表/字典 (Hash Table/Dict) |
通过键(Key)直接访问值(Value),查找、插入、删除速度极快。 特点:查询极快但占用内存更多 哈希算法根据键(Key)计算出一个整数哈希值, Python内部会利用这个值来决定该键值对在内存中的存储位置(索引),从而实现快速访问。
|
dict 插入、删除、查找平均均为 |
| 集合 (Set) |
存储不重复的元素,主要用于去重和集合运算(交集、并集等)。 |
set 插入、删除、查找平均均为 |
| 树 (Tree) |
分层结构,有根节点和子节点。文件系统、HTML文档结构就是树。 |
需自定义 |
| 图 (Graph) |
由节点(站点)和边(线路)组成,用于表示网络关系。 |
需自定义 |
算法是解决问题的一系列清晰指令。
评价算法好坏的核心指标是效率,通常用时间复杂度(执行时间随数据量增长的速度)和空间复杂度(占用内存随数据量增长的速度)来衡量。
- 大O表示法:O(频度)
- 频度:语句的执行次数,间接表示程序运行的时间
- 找频度:找出程序中最内层、执行次数最多的那段代码,计算它执行的次数(频度)
- 抓主导:在频度表达式中,只保留随着n增大影响最大的那一项,并省略其系数。
- 执行次数为
2n^2 + 3n + 1,我们只关注n^2,系数2也省略,最终时间复杂度就是 O(n^2) - 因为当n非常大时,
n^2的增长速度将完全主导其他部分。
- 执行次数为
- 底数通常是常数,在表示法中被省略,因此统一记为O(log n)
- 时间复杂度:【log2²=1、logn大于1】
- O(1):执行时间固定,和输入没有直接的关系(列表下标访问)
- O(logn) :随着输入规模n增大,执行时间增长非常缓慢,例如二分查找每次排除一半数据。(二分查找)
- O(n) :和输入数据量n呈线性关系,数据量变为原来的10倍,耗时也大约变为10倍。(单个循环、遍历列表)
- O(nlogn):介于线性和平方之间的复杂度,是很多高效排序算法的“天花板”。(快速排序、归并排序等高效排序算法)
- O(n^2):执行时间随数据量平方级增长。数据量变为10倍,耗时变为100倍,需要警惕并尽量避免的复杂度。(冒泡排序、嵌套循环)
- 空间复杂度:
- 常量空间 O(1):存储空间大小固定,和输入没有直接的关系。
- 递归空间 O(logn):执行递归操作所需要的内存空间和递归的深度成正比
- 线性空间 O(n):分配的空间是一个线性的集合,并且集合大小和输入规模n成正比。
- 二维空间 O(n^2):分配的空间是一个二维数组集合,并且集合的长度和宽度都与输入规模n成正比。
| 排序算法-冒泡排序 | 比较相邻的两个元素,如果顺序错误就交换(直观但慢) |
| 排序算法-快速排序 |
采用分治策略,选择一个基准值,将小于它的放左边,大于它的放右边,然后递归处理左右子序列。 (实际应用最广,速度快) |
| 查找算法-顺序查找 | 逐个比较,数据量大时很慢 |
| 查找算法-二分查找 | 在有序数组中,每次比较中间元素,将搜索范围减半。 |
| 递归 |
函数调用自身的编程技巧,是实现算法(如树遍历、分治算法)的优雅方式。 核心是找到终止条件和递归公式(n是n-1通过什么逻辑到达) |
| 动态规划 |
将复杂问题分解为更小的子问题,并存储子问题的答案以避免重复计算,从而大幅提升效率。 典型应用:斐波那契数列、背包问题。 1、斐波那契数列使用递归:会重复计算很多子项 2、斐波那契数列使用动态规划:通过存储已计算的项(如用列表保存),可以避免重复,大幅提升效率。 |
本文来自博客园,作者:Fēngwèi,转载请注明原文链接:https://www.cnblogs.com/fengwei-blogs/p/20953167


浙公网安备 33010602011771号