随笔分类 -  数据结构

some notes
摘要:[toc] 一、 定义 ​ 我们知道,左式堆每次操作的时间界是$O(logN)$。二项队列支持 合并、插入、删除最小值 ,每次插入的平均时间为 常数时间 ,而最坏时间是$O(logN)$。 ​ 二项队列: 不是一棵堆序的树,而是堆序的树的集合,成为 森林 。 森林的每棵树都是 二项树(binomia 阅读全文
posted @ 2019-04-01 22:20 undifinedException 阅读(866) 评论(0) 推荐(0)
摘要:[toc] 一、定义 ​ 左式堆是为了有效的支持合并操作(merge),将2个堆进行合并,不只是合并2个数组,还要维护其中的堆结构。 左式堆 像二叉堆那样具有结构性和有序性。也有堆序性质,也是二叉树,但它不是平衡的,而是趋向于非常不平衡。 1.1 一些特点和定义 ​ 我们为左式堆做如下定义: 零路径 阅读全文
posted @ 2019-03-31 19:26 undifinedException 阅读(2472) 评论(0) 推荐(1)
摘要:[toc] 一、定义 ​ 一般在优先队列里面说“堆”这个词,指的都是 二叉堆 这种数据结构实现。堆的最大结构特定是能很顺利的找到最小值! ​ 堆是一棵 完全二叉树 ,他总是满足,父节点的元素值小于其子节点的元素。并且每个子树都是堆! 堆是一棵完全二叉树 父节点元素小于(或等于)子节点元素 完全二叉树 阅读全文
posted @ 2019-03-24 23:14 undifinedException 阅读(606) 评论(0) 推荐(0)
摘要:一、说明 ​ 在有些情况下,当有许多任务同时出现时,需要程序堆这些任务进行调度,就像windows的进程管理系统,为进程分配时间片,就是这种情况。 ​ 操作系统调度程序必须决定在若干进程中运行哪个进程。一般一个进程只被允许运行一个固定的时间片。一般来说,短的作业要尽可能快的结束,这一点很重要,因此在 阅读全文
posted @ 2019-03-21 21:50 undifinedException 阅读(245) 评论(0) 推荐(0)
摘要:[toc] 1、定义 前言: ​ 线性探测法是在散列位置的相邻点开始探测,这会引起很多问题,于是各种优化版本例如平方探测、双散列等被提出来改进其中的聚集问题。但是探测相邻位置和第二次散列相比,显然探测相邻位置更有优势,所以线性探测仍然是实用的,甚至是最佳选择。 1.1 描述 ​ 跳房子散列的思路: 阅读全文
posted @ 2019-03-20 23:16 undifinedException 阅读(1721) 评论(0) 推荐(0)
摘要:[toc] 完美散列 一、介绍 ​ 在部分散列表(分离链接,开放定址)中,当 装填因子$\lambda$合理,散列函数合适的 情况下,期望的插入、删除、和查找的平均时间都是$O(1)$,即在没有冲突的情况下计算散列所需要的时间。 ​ 但是在 最坏情况(冲突)下 ,查找的最坏情形是多少? ​ 我们期望 阅读全文
posted @ 2019-03-19 21:52 undifinedException 阅读(748) 评论(0) 推荐(0)
摘要:[toc] 再散列 1、定义 ​ 当散列表的内容达到装填因子$\lambda$时,散列表需要进行 扩容 。扩容后形成新的散列表, 将原散列表的值再散列到新的散列表 ,这个过程叫做 再散列 。 2、图解 2.1 图解说明 ​ 在大小为7的散列表 图1 中,我们再插入 23 ,此时$\lambda$达到 阅读全文
posted @ 2019-03-17 19:19 undifinedException 阅读(741) 评论(0) 推荐(0)
摘要:[toc] 一、介绍 ​ 分离链接散列算法的缺点是使用链表。在新单元分配地址需要时间,不同的语言需要的时间不一致,这会导致算法的速度有些减慢。分离链接法也是 固定定址 的一种,与之对应的另有一种叫 开放定址法 ,意味着散列算法得到的地址不是固定的,或者说 不是一定要遵守 的。 开放定址 ​ 在散列算 阅读全文
posted @ 2019-03-15 07:39 undifinedException 阅读(2498) 评论(0) 推荐(1)
摘要:[toc] 一、介绍 ​ 散列表的实现被叫做 散列 ,是一种用于常数平均时间执行插入、删除和查找的技术。通常做法是保存 key value 的数据结构,理想的散列表数据结构不过是 具有固定大小的数组 , key 作为关键字, value 是真正存储的数据。将不同的 value 根据各自的 key 存 阅读全文
posted @ 2019-03-10 16:30 undifinedException 阅读(718) 评论(0) 推荐(0)
摘要:1、AVL树 带有平衡条件的二叉查找树,所以它必须满足条件: 1 是一棵二叉查找树 2 满足平衡条件 1.1 平衡条件: 1)严格的平衡条件:每个节点都必须有相同高度的左子树和右子树(过于严格而不被使用)。 2)AVL树的平衡条件:每个节点的左子树和右子树的高度最多差1的二叉查找树(空树的高度定义为 阅读全文
posted @ 2019-03-03 20:37 undifinedException 阅读(455) 评论(0) 推荐(0)
摘要:网站的伸缩性架构中,分布式的设计是现在的基本应用。 在memcached的分布式架构中,key-value缓存的命中通常采用分布式的算法 一、余数Hash 简单的路由算法可以使用余数Hash: node编号=HashCode(key)%服务器数目 例如: key=‘BEIJING'的hash值为49 阅读全文
posted @ 2019-02-28 17:43 undifinedException 阅读(596) 评论(0) 推荐(0)
摘要:1、定义 对于每个节点X,它的左子树中所有的项的值小于X的值,右子树所有项的值大于X的值。 如图:任意一个节点,都满足定义,其左子树的所有值小于它,右子树的所有值大于它。 2、平均深度 在大O模型中,二叉查找树的平均深度是O(logN) 。 证明:查找某个节点x的算法深度,即从根出发找到节点x的路径 阅读全文
posted @ 2019-02-24 22:42 undifinedException 阅读(553) 评论(0) 推荐(0)
摘要:1、定义 二叉树是一颗树,其中每个节点最多有两个子节点(最多2个儿子) 图: 特征: 1.每个节点最多2个儿子。 2.分为左子树和右子树(相对于树来说,一般树不分左子树和右子树,而二叉树一定分左右子树)。 ps 盗图一张: 2、二叉树的分类 2.1 满二叉树 特点:N阶的二叉树,除了叶结点外每一个结 阅读全文
posted @ 2019-02-24 21:39 undifinedException 阅读(368) 评论(0) 推荐(0)
摘要:一棵树: 一、基础概念:除上图描述之外 1.路径:节点O到H的走向,叫做O到H的路径。 2.路径长:该路径的边的条数。 3.深度:对任意节点i,节点i的深度是根节点到i的唯一路径的长。所以,根的深度为0。一棵树的深度等于它最深的叶子的深度,等于这颗树的高。 4.高:任意节点i的高,是节点i到最一片树 阅读全文
posted @ 2019-02-24 19:43 undifinedException 阅读(313) 评论(0) 推荐(0)
摘要:求幂运算的算法简述,在常规按次数乘的情况下,增加点思路,可以优化时间! 阅读全文
posted @ 2018-12-02 21:17 undifinedException 阅读(2821) 评论(0) 推荐(0)