本来第二篇想解析一下LinkedList,不过扫了一下源码后,觉得LinkedList的实现比较简单,没有什么意思,于是移步PriorityQueue。 PriorityQueue通过数组实现了一个堆数据结构(相当于一棵完全二叉树),元素的优先级可以通过一个Comparator来计算,如果不指定Co ...
分类:
编程语言 时间:
2019-07-03 20:27:13
阅读次数:
133
概述 应用场景: 多模字符串匹配问题 。 KMP解决的问题是两个字符串之间的互相匹配,而如果有多个字符串要和一个字符串进行匹配呢?如果还用KMP的话,复杂度依然上天,所以,一个正常的想法是在KMP的基础上堆数据结构。 所以AC自动机=在Trie树上跑KMP,它其中也存在失配数组,与KMP类似。 初见 ...
分类:
其他好文 时间:
2019-02-24 21:46:05
阅读次数:
245
数据结构与算法分析 优先队列 模型 Insert(插入) == Enqueue(入队) DeleteMin(删除最小者) == Dequeue(出队) 基本实现 简单链表:在表头插入,并遍历该链表以删除最小元 时间代价昂贵 二叉查找树 二叉查找树支持许多不需要的操作,实现麻烦,不值得 最合适:二叉堆 ...
分类:
编程语言 时间:
2018-09-08 16:00:13
阅读次数:
200
支持两种操作:删除最大元素和插入元素的数据类型叫做优先队列。 队列:删除最老的元素。 栈:删除最新的元素。 基于二叉堆数据结构的一种优先队列的经典实现方法,用数组保存元素并按照一定条件排序。 数据结构二叉堆能够很好地实现优先队列的基本操作。在二叉堆的数组中,每个元素都要保证大于等于另两个特定位置的元 ...
分类:
其他好文 时间:
2018-05-10 23:26:54
阅读次数:
198
基本概念 哈夫曼树的求法 例3.3 哈夫曼树(1172) 为了方便快捷高效率的求得集合K中权值最小的两个元素,我们需要使用堆数据结构。它可以以O(logn)的复杂度取得n个元素中的最小元素。为了绕过对堆的实现,我们使用标准模板库中的相应的标准模板--优先队列。 ...
分类:
其他好文 时间:
2018-02-05 23:25:22
阅读次数:
542
从磁盘到数据,从数据到文件,从文件到目录,从目录到文件系统,从文件系统到操作系统。构成了计算机中的IO读写机制。 整个磁盘可以分为1个MBR(Master Boot Record)和4个partitions。一个分区,其实就是一个文件系统,文件系统就是管理组织硬盘上数据的一堆数据结构程序,一个文件系 ...
分类:
系统相关 时间:
2017-11-21 14:21:08
阅读次数:
112
堆排序,顾名思义就是利用堆这个数据结构对数据项进行排序。前面提到过。堆数据结构中。节点大于或等于自己的子节点。那么我们能够将待排序的数据项依次加入到堆中,然后再依次取出根节点就可以。从堆中取出的数据项是从大到小排列的。由于根节点永远是最大的。而堆中永远是取根节点。假设对堆这样的数据结构不太了解的话, ...
分类:
编程语言 时间:
2017-07-27 15:56:03
阅读次数:
182
容易证明: 一棵高为h的完全二叉树有2^h 到 2^(h+1)-1个结点。 这就意味着,完全二叉树的高是[logN] 特点: 任意位置i: 左儿子在位置2i上,右儿子在位置2i+1上,父亲在i/2上 一个堆数据结构将由一个Comparable数组和一个代表当前堆的大小的整数组成: 优先队列的接口: ...
分类:
其他好文 时间:
2017-05-19 23:57:14
阅读次数:
175
STL中priority_queue优先队列采用堆数据结构实现。堆算法具有nlog(n)的算法时间复杂度,底层采用vector实现堆的数据机构。默认为根节点大于左右子树值即最大堆。 1、元素入堆:push_heap(first,last [,comp]) 辅助函数:push_heap(first,h ...
分类:
其他好文 时间:
2017-03-10 12:44:36
阅读次数:
218
定义:一种支持删除最大元素和插入元素的数据结构。 经典实现:基于二叉堆数据结构。 2.4.1 API 1. 只要我们能够高效地实现insert()和delMin(),下面的优先队列用例中调用了MinPQ的TopM就能使用优先队列解决这个问题。 2.4.2 初级实现 1. 数组实现(无序):修改pop ...
分类:
编程语言 时间:
2016-11-27 07:48:14
阅读次数:
167