Treap=BST+Heap,BST指的是二叉搜索树,而Heap指的是二叉堆,在此处我们使用的是小根堆. Treap上的每一个结点都维护五个值,一个是它本身的权值data,一个是用于维护堆的性质的权值key(他是随机赋上的一个值),那么我们为什么要给每一个点赋一个随机的key值呢?可以由玄学证明ke ...
分类:
其他好文 时间:
2018-11-18 14:11:54
阅读次数:
181
1.堆(二叉堆):可以视为一棵完全的二叉树,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素 2.给出某个结点的下标,可以计算出父结点的和孩子结点的下标; parent(i)=floor(i/2) left(i)=2i right=2i+1 3.最大堆和最小... ...
分类:
编程语言 时间:
2018-10-22 20:44:23
阅读次数:
143
二叉树的定义:二叉树是每个结点最多有两个子树的树结构。子树被称为“左子树” 和 “右子树”。 二叉树常被用于实现二叉查找树和二叉堆。 基本概念:二叉树是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:1、空二叉树 2、只有一个根节点的二叉树 3、只有左子树 4、只有右子树 5、完全二叉 ...
分类:
其他好文 时间:
2018-10-22 11:34:10
阅读次数:
214
一、堆和二叉堆的介绍 堆的定义 堆(heap),这里所说的堆是数据结构中的堆,而不是内存模型中的堆。堆通常是一个可以被看做一棵树,它满足下列性质: [性质一] 堆中任意节点的值总是不大于(不小于)其子节点的值; [性质二] 堆总是一棵完全树。将任意节点不大于其子节点的堆叫做最小堆或小根堆,而将任意节 ...
分类:
其他好文 时间:
2018-10-14 16:35:57
阅读次数:
159
一、左倾堆的介绍 左倾堆(leftist tree 或 leftist heap),又被成为左偏树、左偏堆,最左堆等。它和二叉堆一样,都是优先队列实现方式。当优先队列中涉及到"对两个优先队列进行合并"的问题时,二叉堆的效率就无法令人满意了,而本文介绍的左倾堆,则可以很好地解决这类问题。 左倾堆的定义 ...
分类:
其他好文 时间:
2018-10-14 16:18:42
阅读次数:
205
堆:什么是堆?又该怎么理解呢? ①堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值; ·堆总是一棵完全二叉树。 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。 ②堆是在程序运行时,而 ...
分类:
其他好文 时间:
2018-10-13 19:48:07
阅读次数:
149
第一个堆模板 二叉堆性质优先级最大的在堆顶 插入操作是开出一个空间然后从堆底切换到一个合适的位置 删除操作就是把最下面的和最上面的换位置,再进行调整 有stl,但还是了解一下原理为好 第二个快排 系统也为其提供了函数 知其然,知其所以然 第三个ST表模板 利用的倍增法 第四个lca最近公共祖先模板 ...
分类:
其他好文 时间:
2018-10-08 13:58:52
阅读次数:
170
读数据结构与算法分析 插入排序 核心:利用的是从位置0到位置P都是已排序的 所以从位置1开始排序,如果当前位置不对,则和前面元素反复交换重新排序 实现 希尔排序 使用hk增量序列进行一趟排序后,对每个i都有 重要性质:一个hk排序的文件在之后的排序中将保持hk排序性 实现 ht = [N / 2] ...
分类:
编程语言 时间:
2018-09-08 16:00:38
阅读次数:
195
数据结构与算法分析 优先队列 模型 Insert(插入) == Enqueue(入队) DeleteMin(删除最小者) == Dequeue(出队) 基本实现 简单链表:在表头插入,并遍历该链表以删除最小元 时间代价昂贵 二叉查找树 二叉查找树支持许多不需要的操作,实现麻烦,不值得 最合适:二叉堆 ...
分类:
编程语言 时间:
2018-09-08 16:00:13
阅读次数:
200