随笔分类 -  数据结构与算法

摘要:1 词汇和定义 顶点(也称为“节点”)是图的基本部分。它可以有一个名称,我们将称为“键”。一个顶点也可能有额外的信息。我们将这个附加信息称为“有效载荷”。 边(也称为“弧”)是图的另一个基本部分。边连接两个顶点,以表明它们之间存在关系。边可以是单向的或双向的。如果图中的边都是单向的,我们称该图是有向 阅读全文
posted @ 2018-11-06 19:12 耐烦不急 阅读(552) 评论(0) 推荐(0) 编辑
摘要:首先,我将说说什么是图(它们不涉及X轴和Y轴),在我所知道的算法中,图算法应该是最有用的。再介绍第一种图算法——广度优先搜索(breadth-first search,BFS)。 广度优先搜索让你能够找出两样东西之间的最短距离,不过最短距离的含义有很多!使用广度优先搜索可以: 编写国际跳棋AI,计算 阅读全文
posted @ 2018-11-06 12:06 耐烦不急 阅读(7309) 评论(5) 推荐(5) 编辑
摘要:学习散列表的内部机制:实现、冲突和散列函数。 1 散列函数 散列函数是这样的函数,即无论你给它什么数据,它都还你一个数字。 如果用专业术语来表达的话,我们会说,散列函数“将输入映射到数字”。你可能认为散列函数输出的数字没什么规律,但其实散列函数必须满足一些要求。 它必须是一致的。例如,假设你输入ap 阅读全文
posted @ 2018-11-05 14:58 耐烦不急 阅读(473) 评论(0) 推荐(0) 编辑
摘要:1.动态规划理论 1.1动态规划基本思想 注意:斐波那契递归求解的时间复杂度为O(2n)。 子问题不独立适合动态规划算法设计。 分治:将原问题划分为互不相交的子问题,递归求解子问题,再将它们的解组合起来。 动态规划:子问题重叠的情况,不同的子问题具有公共的子子问题 利用动态规划需要满足: 1.2动态 阅读全文
posted @ 2018-09-01 22:49 耐烦不急 阅读(681) 评论(0) 推荐(0) 编辑
摘要:递归 递归的定义 直接递归调用: 间接递归调用: 编写递归函数时,必须告诉它何时停止递归。正因为如此,每个递归函数都有两部分:基线条件(base case)和递归条件(recursive case)。递归条件指的是函数调用自己,而基线条件则指的是函数不再调用自己,从而避免形成无限循环。 我们来给函数 阅读全文
posted @ 2018-09-01 22:40 耐烦不急 阅读(343) 评论(0) 推荐(0) 编辑
摘要:1 贪心算法 1.1 教室调度问题 假设有如下课程表,你希望将尽可能多的课程安排在某间教室上。 你没法让这些课都在这间教室上,因为有些课的上课时间有冲突。 你希望在这间教室上尽可能多的课。如何选出尽可能多且时间不冲突的课程呢?这个问题好像很难,不是吗?实际上,算法可能简单得让你大吃一惊。具体做法如下 阅读全文
posted @ 2018-09-01 22:36 耐烦不急 阅读(4945) 评论(0) 推荐(0) 编辑
摘要:树与树算法 树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个 阅读全文
posted @ 2018-06-29 15:31 耐烦不急 阅读(438) 评论(0) 推荐(0) 编辑
摘要:排序与搜索 一、排序 排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。 排序算法的稳定性 稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排 阅读全文
posted @ 2018-06-26 18:10 耐烦不急 阅读(372) 评论(0) 推荐(0) 编辑
摘要:队列 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队 阅读全文
posted @ 2018-06-26 18:04 耐烦不急 阅读(221) 评论(0) 推荐(0) 编辑
摘要:栈 栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一 阅读全文
posted @ 2018-06-26 16:25 耐烦不急 阅读(303) 评论(0) 推荐(0) 编辑
摘要:为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 链表的定义 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续 阅读全文
posted @ 2018-06-15 15:18 耐烦不急 阅读(682) 评论(0) 推荐(0) 编辑
摘要:内存、类型本质、连续存储: 顺序表 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。 对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,用元素在序列 阅读全文
posted @ 2018-06-15 11:12 耐烦不急 阅读(386) 评论(0) 推荐(0) 编辑
摘要:引入 先来看一道题: 如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合? 第一次尝试 import time start_time = time.time() # 注意是三重循环 for a in range(0, 1001): for 阅读全文
posted @ 2018-06-12 17:14 耐烦不急 阅读(435) 评论(0) 推荐(0) 编辑
摘要:堆(二叉堆) 堆(二叉堆)是一种完全二叉树 堆有两种类型: 大根堆小根堆 两种类型的概念如下: 大根堆(最大堆):每个结点的值都大于或等于左右孩子结点 小根堆(最小堆):每个结点的值都小于或等于左右孩子结点 因为比较抽象,所以专门花了两个图表示 那么,什么是完全二叉树呢? 完全二叉树 是 一种除了最 阅读全文
posted @ 2018-05-31 18:14 耐烦不急 阅读(570) 评论(0) 推荐(0) 编辑
摘要:一、哈夫曼树的概念和定义 什么是哈夫曼树? 让我们先举一个例子。 判定树: 在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来: if(score<6 阅读全文
posted @ 2018-05-31 17:49 耐烦不急 阅读(629) 评论(0) 推荐(0) 编辑
摘要:平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。 平衡二叉树是在二叉排序树(BST)上引入的(这一点很重要哦) 讨论:BST为什么需要平衡化?平衡二叉树很好的解决了二叉查找树退化成 阅读全文
posted @ 2018-05-30 22:48 耐烦不急 阅读(291) 评论(0) 推荐(0) 编辑
摘要:注意:对一个二叉排序树进行中序遍历时,得到的序列是一个按值从小到大排列的有序序列 查找性能的分析: 阅读全文
posted @ 2018-05-30 16:43 耐烦不急 阅读(218) 评论(0) 推荐(0) 编辑
摘要:def BinarTree(r): return [r,[],[]] def insertLeft(root,newBrach): t=root.pop(1) if len(t)>1: root.inset(1,[newBrach,t,[]]) else: root.insert(1,[newBrach,[],[]]) ... 阅读全文
posted @ 2018-05-30 16:18 耐烦不急 阅读(163) 评论(0) 推荐(0) 编辑
摘要:树: 二叉树: 空结点对应的为空树;无左右子树的结点对应于叶子结点; 只有左子树的结点、只有右子树的结点对应于度为1的结点; 具有左右子树的结点对应于度为2的结点。 度为2的结点数的出边数为2,所以N2*2;度为1的结点数的出边数为1;N-1为树的边数=总结点数-1 结论:叶子结点数目=度为2的结点 阅读全文
posted @ 2018-05-30 15:39 耐烦不急 阅读(276) 评论(0) 推荐(0) 编辑
摘要:from collections import deque dq=deque() dq.append(1) dq.append(2)#尾部添加 print(dq) dq.popleft()#首部删除 print(dq) dq.popleft() print(dq) 阅读全文
posted @ 2018-05-30 14:37 耐烦不急 阅读(185) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示