![](https://img-blog.csdnimg.cn/20200525161133671.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
---数据结构/算法
Python实现的数据结构与算法
寒 暄
自渡
展开
-
2.7 算法 --10 希尔排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5希尔排序流程图 希尔排序每趟并不能使某些元素有序,但是可以使整体数据越来越接近有序:最后一趟排序使得所有数据有序。希尔排序思路希尔排序是一种分组插入排序算法。首先取一个d1=n/2(n是列表长度),将元素分为d1个组,每组相邻量元素之间的距离是d1,在各组内进行直接插入排...原创 2020-03-04 11:09:36 · 259 阅读 · 0 评论 -
2.7 算法 --8 堆排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5堆排序堆排序依赖堆的向下调整性质。流程示意图流程流程1流程2流程3流程4流程5流程6我们提取根节点上的元素,并把它删除,那么堆会自动把最大的放在根节点上,然后周而复始,直至堆没有元素。...原创 2020-03-02 18:30:57 · 158 阅读 · 0 评论 -
2.6 数据结构 --1.2 队列
数据结构子目录https://www.jianshu.com/p/a344fa483655队列什么是队列队列是一个数据结合,仅允许在一端进行插入,另一端进行删除。队列队列的特点先进先出队列的概念队尾队头队列的操作进队出队队列的理想实现队列的理想实现是列表,但是这里有一个最大的问题便是,出队操作之后前指针后移造成了出队元素的空间浪费,如果放着...原创 2020-03-09 11:00:09 · 104 阅读 · 0 评论 -
2.7 算法 --1 跳台阶
算法子目录:https://www.jianshu.com/p/02492be3c5f5题一段有n个台阶组成的楼梯,小明从楼梯的最底层向最高层前进,他可以选择一次迈一个台阶或者一次迈两个台阶,问:他有多少种不同的走法?解设函数F(),这时我们把n级台阶时的跳法看成n的函数,记为F(n).我们假设n=1.如果n=1,我们只有一种跳法:一次跳一格。既F(1)=1再假...原创 2020-02-24 11:43:29 · 182 阅读 · 0 评论 -
2.7 算法 --六种常用排序小结
算法子目录:https://www.jianshu.com/p/02492be3c5f5时间复杂度“low B”三人组的时间复杂度都是O(n2)“NB”三人组的时间复杂度都是O(nlogn)排序就运行时间而言:快排<归并排序<堆排序<插入排序<选择排序<冒泡排序"NB"三人组的特点快排:极端情况下效率极低归并排序:需要额外的空间开销...原创 2020-03-03 15:44:57 · 157 阅读 · 0 评论 -
2.7 算法 --7 快速排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5快速排序流程图代码:from cat_time import cal_timeimport randomdef quick_sort(li,letf,right): if letf<right: #确保列表长度大于等于2 mid = pa...原创 2020-03-01 12:00:15 · 196 阅读 · 0 评论 -
2.6 数据结构 --0 数据结构基础
数据结构子目录https://www.jianshu.com/p/a344fa483655什么是数据结构数据结构是指相互之间存在一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。简答来说,数据结果就是设计数据以何种方式组织并存储在计算机中。程序=数据结构+算法数据结构的分类数据结果按其逻辑结构可分为线性结构,树结构,图结构。线性结构:数据结构中的元素存在...原创 2020-03-07 11:13:53 · 134 阅读 · 0 评论 -
2.6 数据结构 --1.3 双端队列
数据结构子目录https://www.jianshu.com/p/a344fa483655双端队列什么是双端队列双端队列顾名思义就是两边都可以增删的队列。他的实现是Python自带的模块--deque模块。deque模块,它是collections库的一部分。deque实现了双端队列,意味着你可以从队列的两端加入和删除元素。创建from collections impo...原创 2020-03-10 09:47:03 · 196 阅读 · 0 评论 -
2.6 Python-数据结构 - 子目录
总目录:https://www.jianshu.com/p/e406a9bc93a这里用作数据结构的子目录1.1 栈Stack1.2 队列Queue1.3 双端队列Deque1.4 链表Linked list1.5 哈希表Hashtable迷宫问题 2.1 树2.1.1 线索二叉树2.1.2 霍夫曼数2.1.3 二叉排序树2.1.4 平衡二叉树2.1.5 ...原创 2020-02-23 13:48:18 · 164 阅读 · 0 评论 -
2.6 数据结构 迷宫问题
数据结构子目录https://www.jianshu.com/p/a344fa483655题有一个二维数组,表示迷宫(0为空,1为墙),求怎么走出迷宫。问题maze = [ [1,1,1,1,1,1,1,1,1,1], [1,0,0,1,0,0,0,1,0,1], [1,0,0,1,0,0,0,1,0,1], [1,0,0,0,0...原创 2020-03-11 11:49:40 · 319 阅读 · 0 评论 -
2.7 算法 --13 基数排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5基数排序示意图思路基数排序的原理就是按照将每个元素的从低到高的顺序依次取出各位上的元素,然后每次按照取出的元素进行归类和重整。直到所有的位数都排完。简单的将就是先拆分后整合。这里并不能先排第一位,那样最后依然是无序。代码import randomfrom cat_time...原创 2020-03-06 11:03:19 · 130 阅读 · 0 评论 -
2.7 算法 --0 算法基础
算法子目录:https://www.jianshu.com/p/02492be3c5f5什么是算法算法就是计算过程,解决问题的方法。算法执行图如果我们把C,Java,Python比作一门武艺,那么算法就相当于是内功心法。你可以武艺高超,但是内功心法不如人的话,很难达到最高超的境界。时间复杂度什么是时间复杂度用来评估算法运行效率的一个式子详解我们比较...原创 2020-02-23 21:13:38 · 400 阅读 · 0 评论 -
2.6 数据结构 --2.2 堆
数据结构子目录https://www.jianshu.com/p/a344fa483655堆什么是堆堆是一种特殊的完全二叉树。堆分两种,一种是大根堆,一种是小根堆。大根堆一颗完全二叉树,满足任意节点都比其子节点大。大根堆小根堆一颗完全二叉树,满足任意节点都比其子节点小。小根堆堆的向下调整性质当根节点的左右节点都是堆时,可以通过一次向...原创 2020-03-02 15:53:02 · 108 阅读 · 0 评论 -
2.6 数据结构 --2.1 树
数据结构子目录https://www.jianshu.com/p/a344fa483655树什么是树树是一种数据结构。树是一种可以递归定义的数据解构。树是由n个节点组成的集合:如果n=0,那就是一颗空树。如果n>0,那存在1个节点作为树的根节点,其他节点分为m个集合,每个集合本身又是一颗树。普通树一些其他的概念根节点根节点就是将整棵树倒立...原创 2020-03-02 12:42:47 · 171 阅读 · 0 评论 -
2.7 算法 --6 插入排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5插入排序示意图示意图来自菜鸟教程插入排序流程图插入排序思路列表分为有序区与无序区两个部分,最初有序区只有一个元素。每次从无序区选择一个元素,插入到有序区的位置,直到无序区元素为空。换成大白话来说,就是打斗地主时的序牌,把小牌往前放,打牌往后放,而确定抽到的...原创 2020-02-29 12:54:30 · 155 阅读 · 0 评论 -
2.7 算法 --9 归并排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5归并排序流程图归并排序思路1.满足归并排序输入的(一个无序列表里面有两个有序列表),直接使用归并算法处理。2.两个有序列表混合排序,将两个列表当做两个有序区,使用归并算法处理。3.将一个无序列表排序,需要先分解再合并。分解与合并代码#归并算法def m...原创 2020-03-03 15:17:31 · 193 阅读 · 0 评论 -
2.6 数据结构 --1.1 栈
数据结构子目录https://www.jianshu.com/p/a344fa483655栈什么是栈栈是一个数据集合,可以理解为只能在一端进行插入或者删除操作的列表。栈模型就好像一摞书,你只能在最上面放一本书,或者把一本书从最上面拿走。栈的特点后进先出栈的概念栈顶栈底栈的基本操作入栈:push出栈:pop取栈顶:gettop用列表表示...原创 2020-03-08 12:16:45 · 105 阅读 · 0 评论 -
2.7 算法 -- topK问题
算法子目录:https://www.jianshu.com/p/02492be3c5f5题现在有n个数,设计算法找出前k大个数解决思路排序后切片使用快排排序后切片,复杂度为O(nlogn+k)“LOW B” 三人组因为这三种排序可以通过控制外部循环决定排序次数,时间复杂度为O(kn)相比之下,这种方法比第一种要快。堆排序最后就是堆排序,我们的主角。使用堆排...原创 2020-03-03 11:24:20 · 188 阅读 · 0 评论 -
2.7 算法 --4 冒泡排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5分析图冒泡排序的思路比对列表里面所有相邻的两个数,如果前面的数大于后面的数,就交换他们,比对的次数多了,大的数肯定会逐渐往后,小的数不断往前。这就和上体育课时的列队,老师让自己调整大小个,肯定大个子的会自觉往后,小个子会被挤到前面来。有序区与无序区冒泡排序中有有序区与无序...原创 2020-02-27 13:11:25 · 152 阅读 · 0 评论 -
2.7 算法 --11 计数排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5思路计数排序的基本思想在于给定的输入序列中的每一个元素x,确定该序列中值小于等于x元素的个数,然后将x直接存放到最终的排序序列的正确位置上。有点类似MapReduce的map过程。代码import randomfrom A.cat_time import cal_time@cal...原创 2020-03-05 13:23:06 · 115 阅读 · 0 评论 -
2.7 算法 --3 二分查找
算法子目录:https://www.jianshu.com/p/02492be3c5f5题从列表中查找指定的元素,列表为有序列表。要求输入列表,带查找元素。输出元素下标或未找到元素解第一种方法:顺序查找我们从列表查找元素有两种方法:in关键字,和index()方法。例如我们有一个列表如下:li=[1,2,3,4,5,6,7,8,9,]print(6 in li...原创 2020-02-26 16:54:23 · 160 阅读 · 0 评论 -
2.7 Python-算法 - 子目录
总目录:https://www.jianshu.com/p/e406a9bc93a9VisualgoLeetCode0 算法基础(含斐波那契数列多种算法)递归类浅谈递归1 跳台阶2 汉诺塔尾递归3 二分查找排序类排序 low B 三人组4 冒泡排序5 选择排序6 插入排序排序 NB 三人组7 快速排序8 堆排序9 归并排序六种常用排序小结其他...原创 2020-02-23 13:51:07 · 204 阅读 · 0 评论 -
2.7 算法 --12 桶排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5思路首先将元素分在不同的桶中,然后对每个桶中的元素进行排序。我们有个列表:[29,5,10,68,40,90,75]我们大概得出数据分布在0-100之间,那么我们可以建立五个桶,每个桶表示0-100之间五分之一的范围。t1=[5,10] (0~20)t2=[29,40]...原创 2020-03-06 10:27:20 · 176 阅读 · 0 评论 -
2.7 算法 --2 汉诺塔
算法子目录:https://www.jianshu.com/p/02492be3c5f5题大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一...原创 2020-02-25 11:20:10 · 178 阅读 · 0 评论 -
2.7 算法 --5 选择排序
算法子目录:https://www.jianshu.com/p/02492be3c5f5分析图选择排序思路一趟遍历最小的那个元素放在无序区最小的位置,划分为有序区,然后再遍历出无序区最小的元素,放在最小的位置。现在有个问题:怎么选出最小的数?使用内置函数min()。 ×遍历对比。 √我们在学习算法的时候,能不用内置函...原创 2020-02-28 10:22:42 · 133 阅读 · 1 评论 -
2.6 数据结构 --1.5 哈希表
数据结构子目录https://www.jianshu.com/p/a344fa483655哈希表在了解哈希表之前,我们要先认识一下直接寻址表。什么是直接寻址表直接寻址表我们确定key值就在某个范围之内,那么直接寻址就是一个很有效的办法。这个图确定了key值只能在0--9之内,就可以建立一个0--9的列表,用来存储相应的key与value的指针。直接寻址表的...原创 2020-03-13 12:20:41 · 112 阅读 · 0 评论 -
2.6 数据结构 --1.4 链表
数据结构子目录https://www.jianshu.com/p/a344fa483655顺序表顺序表按照存储的元素类型,可以分为两种,一种是单类型顺序表,一种是多类型顺序表。Python中的列表和元组便是多类型顺序表,多类型顺序表的内存不是连续开辟的。数组是单类型顺序表。顺序表的弊端需要先预知数据大小来开辟空间,如果需要扩充就需要对数据进行迁移。链表相比于顺序表,...原创 2020-03-12 13:37:58 · 131 阅读 · 0 评论