ts-ds-tool
Version:
Data structure and algorithm of TypeScript
112 lines (100 loc) • 2.66 kB
Markdown
# 二项堆 BinomialHeap\<T>
二项堆是是二项树的集合或是由一组二项树组成。二项堆具有良好的性质。在O(logn)的时间内即可完成两个二项堆合并操作,所以二项堆是可合并堆,而仅仅需要O(1)的时间,二项堆即可完成插入操作。因此,基于二项堆实现的优先队列和进程调度算法有着很好的时间性能。同时由于二项树的结构特性和性质,二项树在网络优化等诸多领域也应用广泛。

## 基本操作的API及示例
### 属性
#### 节点个数 Count
##### Count:number
``` text
实例:
const binomialHeap = new BinomialHeap();
const count = BinomialHeap.Count;
console.log(count);
//0
```
#### 头节点 Head
##### Head:LinkNode<HeapNode\<T>>
``` text
实例:
const binomialHeap = new BinomialHeap();
const head = BinomialHeap.Head;
```
###方法
#### 插入 insert
##### insert(value: T):LinkNode<HeapNode\<T>>
``` text
实例:
const binomialHeap = new BinomialHeap();
const node = binomialHeap.insert(1);
console.log(node.Value.value);
// 1
```
#### 删除最小节点 deleteExtremum
##### deleteExtremum(): T
``` text
实例:
const binomialHeap = new BinomialHeap();
binomialHeap.insert(3);
binomialHeap.insert(1);
binomialHeap.insert(2);
const value = binomialHeap.deleteExtremum();
console.log(value);
// 1
```
#### 查找最小节点 findExtremum
##### findExtremum(): T
``` text
实例:
const binomialHeap = new BinomialHeap();
binomialHeap.insert(3);
binomialHeap.insert(1);
binomialHeap.insert(2);
const value = binomialHeap.findExtremum();
console.log(value);
// 1
描述:
此方法不删除元素
```
#### 合并堆 union
##### union(heap: BinomialHeap\<T>): BinomialHeap\<T>
``` text
实例:
const binomialHeap = new BinomialHeap();
binomialHeap.insert(5);
binomialHeap.insert(4);
binomialHeap.insert(6);
const binomialHeap2 = new BinomialHeap();
binomialHeap2.insert(3);
binomialHeap2.insert(1);
binomialHeap2.insert(2);
binomialHeap.union(binomialHeap2);
console.log(binomialHeap.Count);
// 6
console.log(binomialHeap.findExtremum());
// 1
```
#### 是否为空 isEmpty
##### isEmpty(): boolean
``` text
实例:
const binomialHeap = new BinomialHeap();
const isEmpty = binomialHeap.isEmpty();
console.log(isEmpty);
// true
```
#### 清空 clear
##### clear(): void
``` text
实例:
const binomialHeap = new BinomialHeap();
binomialHeap2.insert(3);
binomialHeap2.insert(1);
binomialHeap2.insert(2);
let isEmpty = binomialHeap.isEmpty();
console.log(isEmpty);
// false
binomialHeap.clear();
isEmpty = binomialHeap.isEmpty();
console.log(isEmpty);
// true
```