/* 构造Haffman树 */ HaffmanTree createHaffmanTree() { int i; // 由字典构造最小堆 Heap H = createHeap(MAXSIZE); for (i = 0; i < 128; i++) { if (dic.charNode[i]->count > 0) { insertMinHeap(H, dic.charNode[i]); } } // 构造Haffman树 while (H->size > 1) { // 创建新结点,值为两最小结点的和 HaffmanTree newNode = createHaffmanNode(); HaffmanTree left = deleteMinHeap(H); HaffmanTree right = deleteMinHeap(H); newNode->count = left->count + right->count; newNode->lchild = left; newNode->rchild = right; left->parent = newNode; right->parent = newNode; // 将新结点插入堆中 insertMinHeap(H, newNode); } HaffmanTree root = deleteMinHeap(H); return root; }的时间复杂度分析
时间: 2024-03-30 21:38:35 浏览: 16
这段代码的时间复杂度可以分为两部分考虑:
1. 创建最小堆的时间复杂度
该部分的时间复杂度为 O(nlogn),其中 n 是字典中非零计数的字符数量,因为最小堆的创建需要遍历整个字典,并且每次插入元素的时间复杂度为 logn。
2. 构造Haffman树的时间复杂度
该部分的时间复杂度为 O(nlogn),其中 n 是字典中非零计数的字符数量,因为每次从最小堆中取出两个最小结点,并创建一个新结点的时间复杂度为 logn,而最小堆中最终只剩下一个结点,因此整个构造过程最多进行 n-1 次。
综上所述,该段代码的时间复杂度为 O(nlogn)。
相关问题
haffman树的构造原理
Huffman树是一种经典的数据压缩算法,其构造原理如下:
1. 统计每个字符出现的频率,将其存储在一个频率表中。
2. 将频率表中的所有字符按照出现频率从小到大排序。
3. 选取出现频率最小的两个字符,构造一个只有这两个字符的二叉树,其中出现频率较小的字符作为左子树,出现频率较大的字符作为右子树。同时将这两个字符的频率相加,作为新节点的频率。
4. 将新节点插入频率表中,并将频率表按照出现频率从小到大排序。
5. 重复3和4步骤,直到只剩下一个节点,此时生成的二叉树即为Huffman树。
6. 对于每个叶子节点,将其对应的字符编码为从根节点到该叶子节点的路径上的0和1,其中向左走为0,向右走为1。
7. 将所有字符编码拼接在一起,即为压缩后的结果。
通过上述步骤,Huffman树能够将出现频率较高的字符用较少的比特数表示,从而实现数据压缩的目的。
// 按Haffman码长度从小到大排序,便于译码时查找 - 冒泡 HaffmanTree tmp; for (i = 0; i < types; i++) { for (j = 0; j < types - i - 1; j++) { if (strlen(dic_decode.charNode[j]->code) > strlen(dic_decode.charNode[j + 1]->code)) { tmp = dic_decode.charNode[j]; dic_decode.charNode[j] = dic_decode.charNode[j + 1]; dic_decode.charNode[j + 1] = tmp; } } }
这段代码实现了对哈夫曼编码树节点按照编码长度从小到大进行排序的功能,目的是为了在解码时能够更快地查找对应的字符。其中:
- `types` 表示哈夫曼编码树中不同字符的个数;
- `dic_decode.charNode` 是一个指向哈夫曼编码树节点的指针数组,其中 `charNode[i]` 表示字符集中第 i 个字符的节点;
- `strlen(dic_decode.charNode[j]->code)` 表示节点 j 的编码长度;
- `tmp` 是一个临时变量,用于交换节点位置;
- 外层循环控制排序次数,内层循环进行比较交换操作。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)