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

1 2 下一页
堆栈区别与快慢
摘要:区别 一.堆栈空间分配bai区别: 1.栈(操作系统du):由操作系统自动分配释放 ,存放zhi函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 2.堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 二.堆栈缓存方式区别: 1 阅读全文
posted @ 2020-10-06 10:38 topass123 阅读(321) 评论(0) 推荐(0) 编辑
广度优先算法
摘要:图算法——广度优先搜索(breadth-first search,BFS) https://www.cnblogs.com/tianqizhi/p/9914539.html 阅读全文
posted @ 2020-07-26 11:13 topass123 阅读(89) 评论(0) 推荐(0) 编辑
贪心算法
摘要:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态 阅读全文
posted @ 2020-06-07 13:42 topass123 阅读(91) 评论(0) 推荐(0) 编辑
Python堆的几个常用的方法
摘要:heapq.heappush(heap,item):将item,推入heap #堆内数据不一定是有序的,但是如果每个数据都是一次次push进来的,那么数据将会是有序的 >>> items = [1,2,9,7,3] >>> heapq.heappush(items,10) >>> items [1, 阅读全文
posted @ 2020-06-06 14:31 topass123 阅读(206) 评论(0) 推荐(0) 编辑
散列表(22)
摘要:散列表也叫哈希表,是一种通过键值对直接访问数据的机构。在初中,我们就学过一种能够将一个x值通过一个函数获得对应的一个y值的操作,叫做映射。散列表的实现原理正是映射的原理,通过设定的一个关键字和一个映射函数,就可以直接获得访问数据的地址,实现O(1)的数据访问效率。在映射的过程中,事先设定的函数就是一 阅读全文
posted @ 2020-05-28 21:17 topass123 阅读(118) 评论(0) 推荐(0) 编辑
图解红黑树的删除
摘要:一直没能弄明白红黑树的删除的操作,直到今天才明白。 红黑树的删除,主要是处理围绕我的三代人之间的关系。 1)在删除的节点是红色的话,直接。删除即可。 2)删除黑节点将会有以下的7种情况 1.如果是我的堂兄弟,没有子节点。(brb)处理如下:【父亲是红的】 2.我的堂兄弟有一个红节点,且在左边(brb 阅读全文
posted @ 2020-05-10 14:41 topass123 阅读(320) 评论(0) 推荐(0) 编辑
红黑树的实现
摘要:红黑树的一般操作包括:红黑树的定义、左旋转、右旋转、红黑树的上色、元素的插入等,具体代码使用Python编写如下: import functoolsimport random class RBNode: def __init__(self, val, color="R"): self.val = v 阅读全文
posted @ 2020-05-10 11:29 topass123 阅读(373) 评论(0) 推荐(0) 编辑
二叉树的实现
摘要:递归的方式:1.二叉树遍历实现注意: 1.数据构造是根据中间,左,右的方式实现的。 2.树的建成都是由底部到顶部 3.先序遍历【中左右】 中序遍历【左中右】 后序遍历【左右中】class TreeNode(object): def __init__(self, data=0,left=0,right 阅读全文
posted @ 2020-04-16 13:36 topass123 阅读(141) 评论(0) 推荐(0) 编辑
红黑树
摘要:黑树属于平衡二叉树。它不严格是因为它不是严格控制左、右子树高度或节点数之差小于等于1,但红黑树高度依然是平均log(n),且最坏情况高度不会超过2log(n)。红黑树(red-black tree) 是一棵满足下述性质的二叉查找树:1. 每一个结点要么是红色,要么是黑色。2. 根结点是黑色的。3. 阅读全文
posted @ 2020-04-12 11:11 topass123 阅读(225) 评论(0) 推荐(0) 编辑
hash算法解决冲突的方案
摘要:1, 开放定址法: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 公式为:fi(key) = (f(key)+di) MOD m (di=1,2,3,……,m-1) ※ 用开放定址法解决冲突的做法是:当冲突发生时,使用某种探测技 阅读全文
posted @ 2020-04-12 09:27 topass123 阅读(173) 评论(0) 推荐(0) 编辑
堆和堆排序
摘要:堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。 两种类型的概念如下:大根堆(最大堆):每个结点的值都大于或等于左右孩子结点小根堆(最小堆):每个结点的值都小于或等于左右孩子结点 以大根堆为例子:【堆是无序的】 堆的三种操作:插入,删除,构建。 阅读全文
posted @ 2020-04-09 18:55 topass123 阅读(480) 评论(0) 推荐(0) 编辑
稳定排序和不稳定排序的区别和代表
摘要:稳定性的定义与意义: 通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。 如果是不稳定排序,则需要第二次排序,会增加系统开销。 选择排序: 举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏 阅读全文
posted @ 2020-04-09 11:43 topass123 阅读(3082) 评论(0) 推荐(0) 编辑
平衡二叉树与哈夫曼树(5)
摘要:有了二叉排序树就可以使插入、搜索效率大大提高了,为什么还要引入平衡二叉树? 二叉搜索树的结构与值的插入顺序有关,同一组数,若其元素的插入顺序不同,二叉搜索树的结构是千差万别的。举个例子,给出一组数[1,3,5,8,9,13]。 若按照[1,3,5,8,9,13]这样的顺序插入 如果在上面的二叉搜索树 阅读全文
posted @ 2020-04-08 22:15 topass123 阅读(506) 评论(0) 推荐(0) 编辑
数据结构树(1)
摘要:树的相关概念; 根节点:有一个特定的结点被称为根结点或树根(root) 节点:每个元素称为结点(node) 边:入边与出边 如下图: 空集合也是树,称为空树。空树中没有结点。 结点的度:一个结点含有的子结点的个数称为该结点的度; 叶结点或终端结点:度为0的结点称为叶结点; 双亲结点或父结点:若一个结 阅读全文
posted @ 2020-04-08 15:10 topass123 阅读(123) 评论(0) 推荐(0) 编辑
二叉排序树(4)
摘要:二叉排序树(Binary Sort Tree),亦称二叉搜索。 特点: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的结点。 平均查找长度= 每个结点的深度 阅读全文
posted @ 2020-04-08 15:09 topass123 阅读(158) 评论(0) 推荐(0) 编辑
数据结构树-二叉树的实现(3)
摘要:使用列表实现二叉树: def BinarTree(r): return [r,[],[]] def insertLeft(root,newBrach): t=root.pop(1) if len(t)>1: root.inset(1,[newBrach,t,[]]) else: root.inser 阅读全文
posted @ 2020-04-07 14:20 topass123 阅读(129) 评论(0) 推荐(0) 编辑
理解kmp算法
摘要:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。 暴力匹配算法 假设现在我们面临这样一个 阅读全文
posted @ 2020-04-05 21:55 topass123 阅读(132) 评论(0) 推荐(0) 编辑
动态规划(8)
摘要:定义一个二维数组dp,dp[i][j]表示s的前i个字符和p的前j个字符是匹配的dp[i][j]的计算方式如下 首先设置dp[0][0]为true,因为两个空字符是匹配的 如果i = 0, 那么表示以空字符串去匹配p的前j个字符,我们期望p[j] == , 这样之前的字符不用出现,dp[i][j] 阅读全文
posted @ 2020-04-05 15:51 topass123 阅读(108) 评论(0) 推荐(0) 编辑
动态规划(7)
摘要:class Solution: def cuttingRope(self, n: int) -> int: dp=[0 for _ in range(n+1)] dp[2]=1 for i in range(3,n+1): for j in range(i): dp[i]=max(dp[i],max 阅读全文
posted @ 2020-04-05 14:52 topass123 阅读(182) 评论(0) 推荐(0) 编辑
动态规划(6)
摘要:class Solution: def cuttingRope(self, n: int) -> int: dp = [0 for _ in range(n + 1)] # dp[0] dp[1]其实没用 dp[2] = 1 # 初始化 res = -1 for i in range(3, n + 阅读全文
posted @ 2020-04-05 13:27 topass123 阅读(147) 评论(0) 推荐(0) 编辑

1 2 下一页
点击右上角即可分享
微信分享提示