
数据结构与算法设计(大结构)
码手西风
这个作者很懒,什么都没留下…
展开
-
优先队列
1.优先队列的概念优先队列也是和栈/队列一样的缓存结构,但是它的独特点在于:每个进入缓存的元素都会附有一个数值,这个数值代表着取用时的先后顺序。举一个简单的例子:我把附带优先数值2 3 1 5 4的元素,依次放入优先队列;尽管先放进去的是附加值为4的元素,但是它不会像队列一样,最先被取出;尽管最后放入的是附加值为2的元素,但是它也不会像栈一样,优先被弹出;它的正确取出方式是按照附加值从小到...原创 2018-09-15 21:00:59 · 487 阅读 · 0 评论 -
动态规划
前言: 谈到动态规划,其实最好的切入方向,就是先了解一下最经典的几个例子;找出这些例子的共性;再凝聚这些特征进行模型的分类;分类完成后,在每个分类里面学几个经典的例题。例题选好了,就可以去刷 leetcode。这样下来;动态规划的水平也就形成了。阶段一:入门了解的例子 例1:求第 n 个斐波那契数列方法一:递归既然递归式子都列出来了,那么最直男的方法必定就是它了,...原创 2018-10-06 17:57:22 · 271 阅读 · 0 评论 -
哈夫曼树
1. 首先要知道扩充二叉树的概念扩充二叉树:在原有的二叉树上面,添加叶节点;使原有的节点都变成度数为2的分支节点;这样得到的树就是扩充二叉树扩充二叉树中;所有新增的节点就是外部节点;原有的节点就称为内部节点;由于前面的公式:叶节点的数量 n1 = 分支节点数量 n2 + 1 ,我们可知道对于扩充二叉树来说,就是外部节点 = 内部节点 + 1外部路径长度E:是树根到每一个外部节点的路径长...原创 2018-09-25 17:16:21 · 4087 阅读 · 1 评论 -
平衡二叉树
引出:同样是12个月份数据,用不同的二叉树组成方式,他们的平均查找深度都不一样:对于第一棵树:平均查找深度 = (1x1 + 2x2 + 3x3 + 3x4 + 2x5 +1x6)/12 = 3.5第二棵树:3.0第三棵树:6.5由此我们看出:越是平衡的树,查找效率越高。1. 平衡二叉树概念在二叉搜索树的基础上:左右两个子树的平衡因子 <= 1;这里的子树是包...原创 2018-09-19 15:35:56 · 4574 阅读 · 2 评论 -
迷宫问题求解实现
1.思路:可以敏锐的察觉,迷宫这个问题可以采用递归的思路查询当前位置是否是出口 是:返回True 否:继续查找本位置的四个邻边位置 用for 循环 每一个邻边位置都要找 if 一旦有找到,立即停止搜寻。返回True 在程序最后还没有返回True 只好返回 Flase从这个递归过程,让我再一次深刻认识到递归的实现过程:从最简单的情况开始,返回结果 如果没有到达,最简单的情况...原创 2018-07-06 23:33:20 · 1082 阅读 · 0 评论 -
队列的两种实现方式
1. 线性表的实现 # 队列的顺序表实现# 值得注意的是,为了节省list的空间,申请固定的list长度#用以形成循环顺序表队列十分有必要。class Lqueue(): def __init__(self,capcity): # 队列的容量 self.list = (capcity+1)*[0] # 申请空间 self.en_p = ...原创 2018-07-06 09:59:02 · 875 阅读 · 0 评论 -
栈的两种实现方式
1. 基于线性表的实现# 栈的顺序表实现# 1 是否空 2 是否满 3 压入 4弹出 5 查询最顶元素class St_list: def __init__(self,max_): self.max=max_ self.elems=[None]*self.max self.top=-1 def is_empty(self):...原创 2018-07-05 19:27:15 · 1419 阅读 · 0 评论 -
1.1 线性表
1.1.1 顺序表和链表都是线性表的一种。那么什么是线性表?线性表:同类型数据元素有序的线性(一维) 结构。它是一种数据结构:①名字:线性表②对象:n个元素构成的有序序列③操作:查找,删除,插入,添加。1.1.2 线性表的存储实现方式1----顺序表1.1.2.1在用python实现顺序表的各种操作之前,我们需要学习python已有的顺序表list,有助于我们写出自...原创 2018-06-18 18:49:35 · 329 阅读 · 0 评论 -
枚举算法
1. 枚举算法设计步骤:确定枚举对象(即问题解的表达形式,一般需要用若干参数来描述) 逐一列举可能(根据枚举对象的参数构造循环,一一列举其表达式的每一种取值情况) 逐一验证可能解( 根据问题解的要求,验证枚举对象表达式的每一个取值,如果满足条件,则采纳它,否则抛弃之。)这里注意:①对象不能重复,不能遗漏; ② 每个参数要相互独立,这个时候算法才能...原创 2018-09-17 17:08:08 · 7708 阅读 · 0 评论 -
搜索二叉树
1. 二叉搜索树概念:查找插入与删除操作:1. 查找2. 查找最大最小值 3. 插入 4. 删除 5. 具体实现代码如下:# 节点类建成的二叉树# 用已经建成的二叉搜索树 实例,作为输入from queue import Queuequeue = Queue()class BinTree: def __init__(...原创 2018-09-17 10:45:39 · 5542 阅读 · 0 评论 -
二叉树遍历
1. 基于递归的前序遍历 代码实现如下:# 二叉树的构建class BinTree: def __init__(self, data, left=None, right=None): self.data = data self.left = left self.right = right# 操作函数def count...原创 2018-09-17 10:43:55 · 204 阅读 · 0 评论 -
分治思想
分治思想的基本概念:将原问题划分成或归结成规模较小的子问题 递归或者迭代求解子问题 将子问题综合得到原问题的解但是:子问题必须要和原问题性质完全一样 子问题可以独立求解 递归停止的时候,子问题必须足够的小,以至于直接可以给出答案 另外:分治和递归一般是分不开的举个例子:二分搜索:第一步,将给定的数和这个有序列表的中位数比较;(归结成规模小的子问题) ...原创 2018-09-16 23:41:32 · 2007 阅读 · 0 评论 -
树的定义/性质/实现
一种层次数据结构:很多时候在管理上比线性表更为高效。1.树的定义:由有限个节点以树的连接方式的集合:有一个唯一的根节点,若干个子树,其中每一个子树也有唯一的根节点,这个根节点下又分为若干的子树的递归定义2. 有关树的基本术语:节点的度 树的度 根节点 叶节点 分支节点 父节点 子节点 兄弟节点 子孙节点 祖先节点 节点的层次(根节点层次是1) 路径 路径长度 树的深度3. 二叉...原创 2018-09-16 11:59:55 · 773 阅读 · 0 评论 -
贪心算法
什么是贪心算法贪心算法是一种对某些求解最优问题的更为简单的方法。贪心算法每次都考虑一个局部最优解,总是考虑当前状态下的最优的选择。所以贪心算法并不是对每个问题都有最优解的,但是某些问题,比如单源最短路径,最小生成树问题。(关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关) 贪心算法的基本要素贪心选择:所求问题的整体最优解...原创 2018-11-04 20:54:02 · 1277 阅读 · 0 评论