数据结构既包括各数据存储的方式和彼此间的关系结构,又含有“添加”、“取出”等对数据的操作,同时也带有取出和添加数据时的规则。如队列和栈就是以数据抵达的先后顺序来形成这一规则的,但优先级队列则是以数据内的键值作为基准来判断谁先被取出。 二叉搜索树(按照左子节点、父节点、右子节点的顺序将键值由小到大排序 ...
分类:
其他好文 时间:
2017-10-14 23:31:31
阅读次数:
204
1.改造二叉树 【题目描述】 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树。通常子结点被称作“左孩子”和“右孩子”。二叉树被用作二叉搜索树和二叉堆。随后他又和他人讨论起了二叉搜索树。 什么是二叉搜索树呢?二叉搜索树首先是一棵二叉树。设key[p]表示 ...
分类:
其他好文 时间:
2017-10-10 17:43:24
阅读次数:
168
event 事件是个很不错的线程同步,以及线程通信的机制,在python的许多源代码中都基于event实现了很多的线程安全,支持并发,线程通信的库 对于优先队列的堆实现,请看《python下实现二叉堆以及堆排序》, python的event请看<python lock, semaphore, eve ...
分类:
编程语言 时间:
2017-10-05 13:08:30
阅读次数:
248
因为二叉堆满足完全二叉树,一颗高为h的完全二叉树有2^h到2^h-1个节点,那么就可以用数组来表示。public class HeapDemo>{ public HeapDemo(){ this(DEFAULT_CAPACITY); } public HeapDemo(int capacity){ ... ...
分类:
其他好文 时间:
2017-10-03 18:13:09
阅读次数:
142
今天早上起来完成了一个完整的基于二叉堆实现的优先队列,其中包含最小优先和最大优先队列。 实际上上篇也说了优先队列的特性,通过建堆和堆排序操作,我们就已经看到了这种数据结构中的数据具有某种优先级别,要么非根节点大于他的子节点,要么就相反,在最大优先队列中最大优先级别就是指节点值最大的数据为根节点,每次 ...
分类:
其他好文 时间:
2017-09-26 10:06:11
阅读次数:
241
在介绍优先队列的博文中,我们提到了数据结构二叉堆,并且说明了二叉堆的一个特殊用途——排序,同时给出了其时间复杂度O(N*logN)。这个时间界是目前我们看到最好的(使用Sedgewick序列的希尔排序时间复杂度为O(N4/3),下图为两者函数图像对比,但是注意,这并不是希尔排序与堆排序的对比,只是两 ...
分类:
编程语言 时间:
2017-09-20 21:50:32
阅读次数:
173
时间复杂度的对比,d-堆插入较快,合并较快 ...
分类:
其他好文 时间:
2017-09-17 19:02:42
阅读次数:
185
简介 设计一种堆结构像二叉堆那样高效的支持合并操作而且只使用一个数组似乎很困难。原因在于,合并似乎需要把一个数组拷贝到另一个数组中去,对于相同大小的堆,这将花费O(N)。正因为如此,所有支持高效合并的高级数据结构都需要使用指针。 像二叉堆那样,左式堆也有结构性和堆序性。不仅如此,左式堆也是二叉树,它 ...
分类:
其他好文 时间:
2017-09-17 18:56:54
阅读次数:
154
d-堆 二叉堆因为实现简单,因此在需要优先队列的时候几乎总是使用二叉堆。d-堆是二叉堆的简单推广,它恰像一个二叉堆,只是所有的节点都有d个儿子(因此,二叉堆又叫2-堆)。下图表示的是一个3-堆。注意,d-堆要比二叉堆浅得多,它将Insert操作的运行时间改进为。然而,对于大的d,DeleteMin操 ...
分类:
其他好文 时间:
2017-09-17 18:55:39
阅读次数:
161
左偏树(Leftist Tree) 由于生病了所以不得不回家几天,但也不能太颓。。 左偏树的blog网上一抓一大把。 左偏树无非就是一个堆的变种—— 它并不一定是一棵完全二叉树,但是它依然能做到很优秀。 为什么要引进左偏树?因为二叉堆不能合并——或者说,合并的效率极其低下。 介绍一下左偏树的性质—— ...
分类:
其他好文 时间:
2017-09-15 21:37:16
阅读次数:
118