当前位置: 首页 > news >正文

做爰直播网站在线数据分析工具

做爰直播网站,在线数据分析工具,东莞建站,百度云做网站C初学者指南-5.标准库(第二部分)–二叉堆操作 文章目录 C初学者指南-5.标准库(第二部分)--二叉堆操作背景什么是“堆”二叉最大堆二叉树的表示 堆操作C标准库中的堆初始化堆收缩堆增长堆 辅助操作sort_heap (Heap → Sorted Array)is_heapis_heap_until 相关内容 不熟悉 C 的标…

C++初学者指南-5.标准库(第二部分)–二叉堆操作

文章目录

  • C++初学者指南-5.标准库(第二部分)--二叉堆操作
    • 背景
      • 什么是“堆”
      • 二叉最大堆
      • 二叉树的表示
    • 堆操作
      • C++标准库中的堆
      • 初始化堆
      • 收缩堆
      • 增长堆
    • 辅助操作
      • sort_heap (Heap → Sorted Array)
      • is_heap
      • is_heap_until
    • 相关内容

不熟悉 C++ 的标准库算法? ⇒ 简介

背景

什么是“堆”

  • 一组数据结构(不要和动态存储的内存分区搞混)
  • 它们包含可以排序的对象(键)
  • 它们根据排序被称为“最大堆”或“最小堆”
  • 它们通常用于实现优先队列

支持的操作通常包括:

通常在 O(1)(常数时间)内获取最大值
通常在 O(log N)(对数时间)内移除最大值
通常在 O(1) 或 O(log N) 的时间内插入新键
通常在 O(1) 或 O(log N) 的时间内增加/减少键的变化值

维基百科:“堆”数据结构

二叉最大堆

  • 键存储在二叉树的节点中
  • 键必须是可排序的,即可比较的。
  • 堆属性:父节点的所有子节点的键必须小于或等于父节点的键 P ⇒ 根节点具有最大值
    在这里插入图片描述
    操作的时间复杂度:
  • 获取最大值:O(1)(恒定时间)
  • 删除最大值:O(log N)(对数时间)
  • 插入:O(log N)
  • 增加键:O(log N)

二叉树的表示

几乎所有的完全二叉树都可以用数组来表示。

  • 树要么由一个节点组成,要么在所有内部层级上必须是完整的。
  • 可能没有最右边的叶节点。
    在这里插入图片描述
    在这里插入图片描述

堆操作

C++标准库中的堆

  • 二叉最大堆
  • 由一个类似数组的容器表示
  • 最大值 = 树根 = 数组中的第一个元素
  • 键必须可排序(默认使用运算符 <)
    在这里插入图片描述

堆操作 = 是重排(迭代器)范围内元素的算法

  • make_heap:将一串键值重新排序成二叉堆
  • push_heap:插入新键
  • pop_heap:删除最大值

注意:如果你只想要一个优先队列,可以使用专门的标准容器类型 std::priority_queue。

初始化堆

在这里插入图片描述
cppreference

std::vector<int> h {1,6,4,2,9,7,8};
// make max heap (default)
make_heap(begin(h), end(h));
for (int x : h) { cout << x << ' '; }  // 9 6 8 2 1 7 4
// make min heap
make_heap(begin(h), end(h), std::greater<>{});
for (int x : h) { cout << x << ' '; }  // 1 2 4 9 6 7 8

运行示例代码
在这里插入图片描述
cppreference

收缩堆

在这里插入图片描述
cppreference

std::vector<int> h {1,2,4,9,8,7,6};
make_heap(begin(h), end(h));  // 9 6 8 2 1 4 7
// remove element from heap:
pop_heap(begin(h), end(h));
auto oldmax = h.back();  // oldmax = 9
h.pop_back();
for (int x : h) { cout << x << ' '; }  // 8 6 7 2 1 4

运行示例代码
在这里插入图片描述
cppreference

示例:连续收缩
在这里插入图片描述

增长堆

在这里插入图片描述
cppreference

std::vector<int> h {1,2,4,8,6,7};
make_heap(begin(h), end(h));  // 8 6 7 2 1 4
// add new element to heap:
h.push_back(9);
push_heap(begin(h), end(h));
for (int x : h) { cout << x << ' '; }  // 9 6 8 2 1 4 7

运行示例代码
在这里插入图片描述
cppreference

示例:不断增长
在这里插入图片描述

辅助操作

sort_heap (Heap → Sorted Array)

在这里插入图片描述
cppreference
在这里插入图片描述
cppreference

is_heap

在这里插入图片描述
cppreference
在这里插入图片描述
cppreference

is_heap_until

在这里插入图片描述
cppreference
在这里插入图片描述
cppreference

相关内容

“堆”数据结构
标准算法概述
C++标准库算法介绍
标准序列容器(vector、deque、list、…)
标准关联容器(map、set、…)
标准序列视图
cppreference:算法库
cppreference:容器库
视频:什么是 C++ 标准库?
视频:一小时内掌握 105 个 STL 算法 (Jonathan Boccara,2018)
C++ 之旅:容器和算法
算法概述表:
在这里插入图片描述

附上原文链接
如果文章对您有用,请随手点个赞,谢谢!^_^

http://www.hkea.cn/news/109107/

相关文章:

  • 做视频网站要什么格式好网络营销公司怎么注册
  • 企业专业网站建设快速网站搭建
  • 武威建设网站的网站google谷歌搜索
  • 长沙公司做网站多少钱推广平台怎么做
  • 现在大家做电商网站用什么源码营销策略都有哪些
  • 可以做试卷的网站英语怎么说seo关键词排名优化系统源码
  • 网站怎么设置支付功能企业网站的主要类型有
  • 成都圣都装饰装修公司北京搜索优化排名公司
  • 境外建设网站贴吧互联网域名注册查询
  • 广州建站工作室淘客推广怎么做
  • 中国最大的网站建设公司百度广告联盟点击一次多少钱
  • wordpress单页主题营销seo手机关键词网址
  • dedecms做电影网站韩国最新新闻
  • 哪个网站做废旧好如何在百度上发布自己的广告
  • 网站表单及商品列表详情模板如何搭建自己的网站
  • 网站域名登记证明百度高级搜索怎么用
  • 国外网站在国内做镜像站点网站搭建费用
  • 网站后台如何添加关键词软件开发公司
  • 手机做网站的网站windows优化大师卸载不了
  • 万网速成网站有哪些 功能自己的网站怎么推广
  • 邯郸哪有做网站的河南百度推广公司
  • 我是做环保类产品注册哪些浏览量大的网站推销自己的产品比较好呢西安网站seo优化公司
  • 网页传奇游戏排行昆明网络推广优化
  • 商城模板网站模板网站软文是什么
  • 校园网站推广方案怎么做网站排名推广工具
  • 深圳罗湖企业网站建设报价网络媒体发稿平台
  • 用别人公司域名做网站线下推广的渠道和方法
  • php mysql的网站开发外贸推广平台
  • 济南网站建设认可搜点网络能百度指数有三个功能模块
  • 网上商城网站建设意义在线代理浏览网页