c++ - 如何使用 buildHeap 方法和 insert 方法构建最小堆?
问题描述
我是编程新手 我想了解什么是最小堆以及如何使用buildHeap
方法和insert
方法找到给定数组的最小堆
解决方案
要学习最小堆,您必须首先了解二进制堆是什么。
二叉堆是具有以下属性的二叉树。
1)它是一棵完整的树(除了可能的最后一层,所有层都被完全填满,最后一层的所有键都尽可能左)。二叉堆的这一特性使它们适合存储在数组中。
2) 二叉堆是最小堆或最大堆。在最小二叉堆中,根处的键必须是二叉堆中所有键中的最小值。对于二叉树中的所有节点,相同的属性必须递归地为真。
要将元素“K”插入最小堆:
void MinHeap::insertKey(int k)
{
if (heap_size == capacity)
{
cout << "\nOverflow\n";
return;
}
heap_size++;
int i = heap_size - 1;
harr[i] = k;
while (i != 0 && harr[parent(i)] > harr[i])
{
swap(&harr[i], &harr[parent(i)]);
i = parent(i);
}
}
我不知道任何buildheap
或insert
功能,但 c++ stl 具有make_heap()
和push_heap()
功能相同的目的。
堆 c++ 实现
推荐阅读
- pandas - 使用 pandas 输出不正确的数据
- python - SQL alchemy 中的切片过滤条件
- sql - SQL case/if 条件 Join tbl A 或 tbl B
- flutter - Flutter - DropDownMenuItem 不要停留在 DropDownMenu 下面
- python - 使用 Python 将结果列表合并到单个变量中
- http - Kubernetes Ingress 有两个命名空间,将 /api/ 重写为 development/api/
- acumatica - 如何获得 Acumatica AR 文档版本的挂钩?
- javascript - 使用 JavaScript 处理对同一服务器的多个异步请求的正确方法是什么?当前和预报天气数据 API 请求
- java - JQPL 选择内部选择
- c - Clang-Tidy: 'fscanf' 用于将字符串转换为整数值,但函数不会报告转换错误;考虑改用“strtol”