前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、堆是什么?
堆是一种数据结构,就是每个节点根据某种规则排序, 从根节点往下都符合某种规律。
堆是一个完全二叉树,树中每个节点的值都不小于(或不大于)其左右孩子的值。 如果父节点是大于等于左右子节点就是大顶堆,小于等于左右孩子就是小顶堆。大顶堆每次先弹出最大元素,小顶堆每次弹出最小元素。
二、以里扣347题为例
思路:
1.题目要求取前k频次的数,用小顶堆把小数弹出留下的就是大数。
2.先建立hash_map存储各数频次。
3. 利用优先级队列,本质为heap。优先级队列内部元素是自动依照元素的权值排列。缺省情况下priority_queue利用大顶堆完成对元素的排序,这个大顶堆是以vector为表现形式的complete binary tree(完全二叉树)。
实现:
C++构建大小顶堆(示例):
//构造大顶堆 priority_queue,less > big_heap;
//构造小顶堆 priority_queue,greater > small_heap; p.s.: priority_queue< type, container, function > type:数据类型; container:实现优先队列的底层容器; function:元素之间的比较方式; 用less,greater 需要 #include ,也可以自己创建函数替代。



