![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dsa
文章平均质量分 93
Shine__Wong
明天一定好好学习。
展开
-
Splay Tree伸展树
伸展树基本概念伸展树的基本思想。伸展树完全是基于局部性原理(locality)的。局部性原理是计算机科学中非常重要的原理,很多设计,比如说多级存储器,缓存,都是基于局部性原理。简单说来就是<刚访问过的数据,在一段时间内极有可能再次被访问>。因此,对于物理存储器而言,会将刚刚访问过的数据,转移存储到更高级的存储介质中,比如内存或者缓存,以便下次访问这些数据时可以高效地进行。而对...原创 2019-10-24 20:49:54 · 412 阅读 · 0 评论 -
skiplist 跳转表基本概念
跳转表的基本概念跳转表是一个基于列表list的数据结构,从结构上来说,它是由多个列表组成的。各个列表在纵向形成多层,其中第一层(最底层)拥有跳转表中的所有数据节点,以上各层列表中的数据都是其底层列表的一个子集,特别地,最顶层的列表不包含任何数据,仅含有两个头尾哨兵。跳转表的结构如图所示:用地铁站对跳转表打一个比方,设想有一个城市的地铁分为多层,其中最底层的地铁要经过该城市的所有站台;所有这些...原创 2019-09-29 20:56:17 · 1132 阅读 · 0 评论 -
完全二叉堆(complete binary heap)
优先级队列在很多具体的应用条件下,我们都只关心一组数据中的最大值或者最小值,比如考完试大家首先都是看谁是第一名,谁又是最后一名;比如我只知道世界最高峰是珠穆朗玛峰,却不知道后面的第二第三都是什么;比如在操作系统中的诸多算法,都是基于优先级来进行的,像是页面置换算法还有进程调度算法,这个时候总是选出其中优先级最高的页面将它换出,或者优先级最高的进程,让它占用CPU。支持上面这种操作,即每次只是获...原创 2019-09-29 21:07:29 · 1809 阅读 · 1 评论 -
左式堆(leftist heap)
堆合并堆合并是指,对于任意两个堆,将其合并为一个更大的堆,如下图所示:为了解决这个问题,我们可以首先进行一些初步的尝试。简明的插入策略最简明的思路,无非是将一个堆中的元素,逐个删除并且依次插入到另一个堆中。不妨设两个堆的规模分别为m和n,则这种策略的时间复杂度为O(m * (logm + log(m + n))) = O(m * log(m + n))。Floyd批量建堆算法...原创 2019-09-29 21:11:31 · 3242 阅读 · 2 评论 -
串匹配之kmp算法
字符串匹配问题是算法中的常见问题,即对于一个较长的文本串T,以及一个较短的模式串P,返回模式串P在文本串T中是否出现,或者首先出现的位置,或者所有出现的位置。实际上,在实际生活中,具有大量的字符匹配问题的应用场景,例如一般的编辑器软件,都具有的查找替换功能,还有像是google这种软件,本质上就是从整个因特网的文本数据中,去查找用户搜索的字符串。以下主要讨论如何实现串匹配问题。一种简明的策略...原创 2019-10-02 16:56:14 · 392 阅读 · 0 评论 -
串匹配之bm算法
以终为始在串匹配之kmp算法中,已经简单介绍了kmp算法的基本原理与实现。kmp算法的基本思想,是利用已经成功匹配的字符的信息,快速跳过无意义的对齐位置,从而实现更高的效率。下面,我们首先对这样的思想进行更深入的研究。在实际的串匹配问题中,字符集的规模往往是挺大的,比如说英文字符集,就至少有52个字符,更不要提ASCII码,还有中文字符集了。这样,在随机的情况下,一次比对成功的概率只有1/52...原创 2019-10-04 10:07:12 · 2421 阅读 · 1 评论 -
散列的基本概念
散列的基本概念什么是散列?为什么需要散列?散列是一种思想。与已经学过的其他数据结构相比较,向量是采用循秩访问(call by rank)的访问方式,列表是采用循位置访问(call by position)的访问方式,二叉搜索树是采用循关键码访问(call by key)的访问方式,散列与他们都不一样,是采用循值访问(call by value)的访问方式。举个例子,你现在身处同济大学嘉定...原创 2019-10-04 21:14:05 · 14319 阅读 · 1 评论 -
串匹配之karp-rabin算法
万物皆数回想我们平时对整数进行的比较,都可以在O(1)的时间内完成,而任何数据在计算机中的存储都是一系列的字节构成的二进制整数,串也不例外,那为什么不可以把对整数高效的比较操作也移植到串匹配问题上呢?这就是karp-rabin的基本思想。一般地,对于任意一个串,设字符集的大小为d,则该串中的任意一个字符都可以用一个d+1进制的整数来表示。需要注意的是,这里是d+1进制,而不是d进制,是因为不能...原创 2019-10-04 21:16:08 · 1143 阅读 · 0 评论