
数据结构与算法(python)
T型人小付
任职于某游戏公司新加坡分部,自动化运维/python全栈/IT,梦想是35岁前可以不需要通过投简历的方式换工作。
展开
-
python3实现KMP算法进行字符串匹配图文详解
最近遇到一个字符串内查找指定子字符串出现位置的算法问题,最后虽然用暴力匹配法解决了问题,但是时间效率非常差。看到网上说可以用KMP模式匹配算法进行优化,搜了很多资料才基本弄懂,这里记录一下自己的理解和实现代码。本文并没有重复造轮子,是基于结尾处两篇大神的参考文章的一些自我理解。大神的文章深入浅出通俗易懂,建议先行食用。文章目录实现效果暴力匹配的缺点KMP算法原理代码实现next数组部分字符串匹配部分注意事项参考实现效果实现的效果类似于python中字符串的find方法m='this is a gr原创 2020-09-02 11:24:54 · 1324 阅读 · 0 评论 -
python3实现二叉树图文详解
树结构在计算机领域使用十分广泛。在操作系统源程序中,树和森林被用来构造文件系统。我们看到的window和linux等文件管理系统都是树型结构。在编译系统中,如C编译器源代码中,二叉树的中序遍历形式被用来存放C 语言中的表达式。在游戏设计领域,许多棋类游戏的步骤都是按树型结构编写。这一篇我们就来了解下树,并实现一下最基本的二叉树。文章目录树树的物理存储二叉树二叉树代码实现节点类树类添加节点广度优先遍历深度优先遍历先序遍历中序遍历后序遍历通过遍历结果还原树完整代码树树(tree),和我们熟悉的顺序表一样,原创 2020-07-27 19:19:53 · 1501 阅读 · 0 评论 -
python3实现二分法查找并返回元素位置
二分法作为一种比较经典的查找算法,经常在面试中被提及。网上有递归和非递归两种方式,同时还有返回元素下标和不返回两种版本,这篇文章我们就分别用递归和非递归方式来实现返回元素下标的版本。文章目录二分法查找代码实现非迭代实现迭代实现完整代码二分法查找先来了解下二分法的思路。二分法的特点是查找速度快,但处理对象必须是有序列表。如下图所示,整个列表是升序排列的,要查找48所在的位置(如果该元素存在的话)。首先找到居中的元素36,发现48比36大,于是在36右边的子列表中继续查找。又找到居中元素52,发现36比原创 2020-07-21 21:57:04 · 2998 阅读 · 1 评论 -
python3利用归并算法对超过内存限制的超大文件进行排序
上一篇文章《python3实现归并排序算法图文详解》中,我们了解了归并排序算法的基本使用逻辑。这一篇文章我们对这个逻辑进行一个延伸,从内存延伸到对硬盘上的文件进行排序,也就是所谓的外部排序。文章目录操作场景思路分析代码实现内存表现操作场景所谓的大文件就是无法一次性全部读到内存中的文件。为了操作不真的把我机器的内存都榨干,这里假设机器的内存是300MB,刨除一些系统占用,规定每次读到内存的文件大小不能超过200MB。我又用下面的程序创建了一个1GB大小的文件with open('bigfile.t原创 2020-07-19 12:36:17 · 2736 阅读 · 3 评论 -
python3实现归并排序算法图文详解
归并排序做为一种比较经典的排序思路,经常在面试中被提及。即使不直接考察也会换种方式涉及,例如很常见的20G超大文件排序问题。这一节就分解下归并的思路,最后用代码实现一下。下一篇我们进行一下扩展,实现超大文件的排序。文章目录归并排序代码实现时间复杂度稳定性接下来归并排序归并排序(Merge Sort)的主要思想就是化整为零,分批治理,再逐层合并结果。和快排有些许类似,同样也是递归的典型使用场景。例如有下面的list[38,67,26,11,99,20,45,54]首先是化整为零,分的方法很多,我原创 2020-07-17 14:13:32 · 826 阅读 · 0 评论 -
python3实现快速排序算法图文详解
快速排序做为一种比较经典的排序思路,经常在面试中被提及。这一节就分解下快排的思路,最后用代码实现一下。文章目录快速排序代码实现单次排序递归时间复杂度稳定性完整代码快速排序假设有下面一个数组需要排序[38,67,11,26,20,99,45,54]思路就是从第一个元素38开始,找到一个中间位置,将比38小的元素都放在左边,比38大的元素都放在右边。然后再分别对左右两边的子序列进行同样的操作,最后达到整体有序。为了达到这个目的,我们只要弄清楚了单次排序的实现方法,后面的子序列只需要采用递归的方式就原创 2020-07-10 23:42:56 · 1122 阅读 · 0 评论 -
python3实现双向链表图文详解
在上一节《python3实现单向链表图文详解》中我们实现了单向链表,但是单向链表受其只能从前往后进行遍历的限制,在有的时候效率并不是很高,例如需要从特定结点往前进行查询时。这一节我们就将其改进版本双向链表也来实现一下。当然单向链表的改进并不只有双向链表这一种,在以后的文章中我们再实现下单向循环链表甚至双向循环链表。文章目录双向链表python3实现结点类链表类shiftappendinsertremove和单向链表对比完整代码双向链表和单向链表的结构比起来,双向链表的每个节点除了包含后继结点的地址,还原创 2020-07-09 15:04:31 · 443 阅读 · 0 评论 -
python3实现单向链表图文详解
任何复杂的数据结构都是由int、char、float这些基本数据结构组合而成,不同的组合方式在进行不同操作时有着差异巨大的时间或空间复杂度,例如python中的list就是由基本数据类型按照顺序表的方式去排列而实现的新数据结构。但是python中没有用链表结构实现的数据类型,那我们就试着自己来造一下车轮子。这一节就来实现最简单的单向链表。文章目录单向链表python3实现结点类单向链表类构造函数isEmptylengthtravelappendshiftinsertremoveexist完整代码时间复杂度原创 2020-07-06 23:35:05 · 1913 阅读 · 0 评论