
Python数据结构与算法
文章平均质量分 85
xiaoshun007~
滴自己的汗,吃自己的饭,自己的事情自己干,靠天,靠地,靠祖上,不算是好汉!
展开
-
python数据结构与算法-20_面试指南
这套教程列举的算法很有限,包括图算法、贪心,动态规划,分布式,机器学习算法等很多没有涉及到,因为它们确实需要读者更深入的理论基础,而且这套教程的目的也不是针对算法竞赛。不过了解了本教程涉及到的大部分算法是可以应付绝大多数的业务开发的。如果读者对算法有兴趣,本教程引用的几本参考书都可以去深入学习。希望本教程能对你学习算法、养成良好的思维方式和编码习惯等有所帮助。原创 2023-11-23 17:29:29 · 70 阅读 · 0 评论 -
python数据结构与算法-19_python内置常用算法和数据结构
相信到这里大家对常用的数据结构和算法及其实现都比较熟悉了。之前在每章的数据结构和算法中涉及到的章节我都会提到对应的 python 内置模块,一般如果内置的可以满足需求,我们优先使用内置模块,因为在性能和容错性方面内置模块要好于我们自己实现(比如有些是 c 实现的)。本章我们不会再对每个模块的原理详细说明,仅列举出一些常见模块供大家参考,如果有需要最好的学习方式就是参考 Python 的官方文档。很多高级的数据结构我们也可以通过 google 搜索现成的库拿来直接用。原创 2023-11-23 17:29:12 · 120 阅读 · 0 评论 -
python数据结构与算法-18_图与图的遍历
我们先来考虑日常生活中的一个问题,我们在出行的时候一般会考虑使用地图软件搜下从一个地点到另外一个地点的路线。这里把地点抽象成一个圈,路径抽象成线,于是乎就有了下面的图,其实还是非常好理解的。简单地说就是有节点(node)和边(edge)组成的一种数据结构,相邻的节点称之为邻居。注意图分为有向图和无向图,比如有些路是单行道,有些是双行道,有向图我们用箭头指向,无向图就是一条直线连接。原创 2023-11-23 17:28:56 · 273 阅读 · 0 评论 -
python数据结构与算法-17_二叉查找树
所有 key 小于 V 的都被存储在 V 的左子树所有 key 大于 V 的都存储在 V 的右子树注意这个限制条件,可别和堆搞混了。说白了就是对于每个内部节点,左子树的 key 都比它小,右子树都比它大。如果中序遍历(二叉树遍历讲过了)这颗二叉树,你会发现输出的顺序正好是有序的。原创 2023-11-23 17:28:39 · 83 阅读 · 0 评论 -
python数据结构与算法-16_优先级队列
你可能比较奇怪,队列不是早就讲了嘛。这里之所以放到这里讲优先级队列,是因为虽然名字有队列,但其实是使用堆来实现的。上一章讲完了堆,这一章我们就趁热打铁来实现一个优先级队列。原创 2023-11-23 17:28:21 · 202 阅读 · 0 评论 -
python数据结构与算法-15_堆与堆排序
堆是一种完全二叉树(请你回顾下上一章的概念),有最大堆和最小堆两种。最大堆: 对于每个非叶子节点 V,V 的值都比它的两个孩子大,称为 最大堆特性(heap order property)最大堆里的根总是存储最大值,最小的值存储在叶节点。最小堆:和最大堆相反,每个非叶子节点 V,V 的两个孩子的值都比它大。原创 2023-11-23 11:38:10 · 141 阅读 · 0 评论 -
python数据结构与算法-14_树与二叉树
前面我们讲了两种使用分治和递归解决排序问题的归并排序和快速排序,堆排序先就此打住,因为涉及到树的概念,所以我们先来讲讲树。讲完了树之后后面我们开始介绍一种有用的数据结构堆(heap), 以及借助堆来实现的堆排序,相比前两种排序算法要稍难理解和实现一些。原创 2023-11-23 11:37:51 · 121 阅读 · 0 评论 -
python数据结构与算法-13_高级排序算法-快速排序
排序算法最差时间分析平均时间复杂度稳定度空间复杂度冒泡排序O(n^2)O(n^2)稳定O(1)选择排序O(n^2)O(n^2)不稳定O(1)插入排序O(n^2)O(n^2)稳定O(1)二叉树排序O(n^2)O(n*log2n)不一顶O(n)快速排序O(n^2)O(n*log2n)不稳定堆排序O(n*log2n)O(n*log2n)不稳定O(1)数据结构与算法-排序篇-Python描述。原创 2023-11-23 11:37:33 · 61 阅读 · 0 评论 -
python数据结构与算法-13_高级排序算法-分治法
很多有用的算法结构上是递归的,为了解决一个特定问题,算法一次或者多次递归调用其自身以解决若干子问题。这些算法典型地遵循分治法的思想:将原问题分解为几个规模较小但是类似于原问题的子问题,递归求解这些子问题,然后再合并这些问题的解来建立原问题的解。原创 2023-11-22 10:50:34 · 121 阅读 · 0 评论 -
python数据结构与算法-12_基本排序算法
从本章开始讲常见的基于比较的排序算法,先讲三个简单的但是时间复杂度却不太理想的排序算法,包括冒泡排序、选择排序和插入排序。原创 2023-11-22 10:50:24 · 82 阅读 · 0 评论 -
python数据结构与算法-11_线性查找与二分查找
查找可以说是我们业务代码里用得最多的操作,比如我们经常需要在一个列表里找到我们需要的一个元素,然后返回它的位置。其实之前我们介绍的哈希表就是非常高效率的查找数据结构,很明显地它是用空间换时间。这一节介绍两个基本的基于线性结构的查找。原创 2023-11-22 10:49:35 · 98 阅读 · 0 评论 -
python数据结构与算法-10_递归
递归用一种通俗的话来说就是自己调用自己,但是需要分解它的参数,让它解决一个更小一点的问题,当问题小到一定规模的时候,需要一个递归出口返回。这里举一个和其他很多老套的教科书一样喜欢举的例子,阶乘函数,我觉得用来它演示再直观不过。它的定义是这样的:我们很容易根据它的定义写出这样一个递归函数,因为它本身就是递归定义的。if n == 0:return 1else:看吧,几乎完全是按照定义来写的。递归必须包含一个基本的出口(base case),否则就会无限递归,最终导致栈溢出。原创 2023-11-22 10:49:15 · 93 阅读 · 0 评论 -
python数据结构与算法-09_集合
集合是一种不包含重复元素的数据结构,经常用来判断是否重复这种操作,或者集合中是否存在一个元素。这一章讲集合,实际上它的底层也是哈希表实现的,所以像实现 DictADT 一样,借助 HashTable 实现它也比较简单。原创 2023-11-22 10:48:48 · 65 阅读 · 0 评论 -
python数据结构与算法-08_字典
上一章我们介绍了哈希表,其实 python 内置的 dict 就是用哈希表实现的,所以这一章实现 dict 就非常简单了。当然 cpython 使用的是 c 语言实现的,远比我们写的复杂得多 (cpython/Objects/dictobject.c)。上一章我们用 python 自己写的一个 Array 来代表定长数组,然后用它实现的 HashTable,它支持三个最基本的方法字典最常使用的场景就是 k,v 存储,经常用作缓存,它的 key 值是唯一的。原创 2023-11-21 10:10:04 · 80 阅读 · 0 评论 -
python数据结构与算法-07_哈希表
不知道你有没有好奇过为什么 Python 里的 dict 和 set 查找速度这么快呢,用了什么黑魔法吗?经常听别人说哈希表(也叫做散列表),究竟什么是哈希表呢?这一章我们来介绍哈希表,后续章节我们会看到 Python 中的字典和集合是如何实现的。原创 2023-11-21 10:09:43 · 120 阅读 · 0 评论 -
python数据结构与算法-06_算法分析
前面我们说了很多次时间复杂度是 O(1), O(n) 啥的,并没有仔细讲解这个 O 符号究竟是什么。你可以大概理解为操作的次数和数据个数的比例关系。比如 O(1) 就是有限次数操作,O(n) 就是操作正比于你的元素个数。这一章我们用更严谨的方式来定义它。原创 2023-11-21 10:09:27 · 98 阅读 · 0 评论 -
python数据结构与算法-05_栈
栈这个词实际上在计算机科学里使用很多,除了数据结构外,还有内存里的栈区 (和堆对应),熟悉 C 系语言的话应该不会陌生。上一章我们讲到了先进先出 queue,其实用 python 的内置类型 collections.deque 或者我们自己实现的 LinkedList 来实现它都很简单。本章我们讲讲 后进先出的栈。栈其实也很简单,因为基础操作就俩,一个 push 和一个 pop,咦,咋和队列一样的?确实方法名字一样,但是得到的结果可是不同的。原创 2023-11-23 00:15:00 · 115 阅读 · 0 评论 -
python数据结构与算法-04_队列
前面讲了线性和链式结构,如果你顺利掌握了,下边的队列和栈就小菜一碟了。因为我们会用前两章讲到的东西来实现队列和栈。之所以放到一起讲是因为这两个东西很类似,队列是先进先出结构(FIFO, first in first out),栈是后进先出结构(LIFO, last in first out)。本章我们详细讲讲常用的队列。原创 2023-11-14 11:22:30 · 141 阅读 · 0 评论 -
python数据结构与算法-03_链表
上一节讲到了支持随机访问的线性结构,这次我们开始讲链式结构, 视频里我会说下这两种结构的区别,然后讲解最常见的单链表和双链表。之前在专栏文章里实现过一个 lru_cache,使用到的就是循环双端链表,如果感觉这篇文章有点难理解,我们这里将会循序渐进地来实现。后边讲到哈希表的冲突解决方式的时候,我们会再次提到链表。上一节我们分析了 list 的各种操作是如何实现的,如果你还有印象的话,list在头部进行插入是个相当耗时的操作(需要把后边的元素一个一个挪个位置)。原创 2023-11-14 11:22:13 · 417 阅读 · 0 评论 -
python数据结构与算法-02_数组和列表
本节我们从最简单和常用的线性结构开始,并结合 Python 语言本身内置的数据结构和其底层实现方式来讲解。虽然本质上数据结构的思想是语言无关的,但是了解 Python 的实现方式有助于你避免一些坑。我们会在代码中注释出操作的时间复杂度。原创 2023-11-14 11:21:54 · 167 阅读 · 0 评论 -
python数据结构与算法-01_抽象数据类型和面向对象编程
实际上 python 内置的 list 就可以看成一种抽象数据类型。ADT: Abstract Data Type,抽象数据类型,我们在组合已有的数据结构来实现一种新的数据类型, ADT 定义了类型的数据和操作。我们以抽象一个背包(Bag) 数据类型来说明,背包是一种容器类型,我们可以给它添加东西,也可以移除东西,并且我们想知道背包里有多少东西。于是我们可以定义一个新的数据类型叫做 Bag.class Bag : """ 背包类型 """ pass。原创 2023-11-13 10:40:36 · 149 阅读 · 0 评论 -
python数据结构与算法-00_课程简介之笨方法学算法
你可能会在一些教材上看到这句话:程序 = 算法 + 数据结构算法(Algorithm):是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。数据结构(Data Structures):是计算机存储和组织数据的一种方式,可以用来高效地处理数据。举个例子:二分查找就是一个非常经典的算法,而二分查找经常需要作用在一个有序数组上。这里二分就是一种折半的算法思想,原创 2023-11-13 10:39:10 · 105 阅读 · 0 评论