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

视频网站的制作教程全案营销的案例及成功案例

视频网站的制作教程,全案营销的案例及成功案例,wordpress 横排显示,中小型企业网站优化推广一、priority_queue的使用方法 priority_queue的使用方法看这篇文章 二、堆 1、介绍 堆(Heap)是一种特殊的完全二叉树数据结构,满足以下性质: 堆序性质(Heap Property): 大顶堆&#xff08…

一、priority_queue的使用方法

priority_queue的使用方法看这篇文章

二、堆

1、介绍

堆(Heap)是一种特殊的完全二叉树数据结构,满足以下性质:

  • 堆序性质(Heap Property):
    • 大顶堆(Max-Heap):每个节点的值 ≥ 其子节点的值。
    • 小顶堆(Min-Heap):每个节点的值 ≤ 其子节点的值。
    • 完全二叉树:除最后一层外,其他层节点必须填满,且最后一层节点靠左排列
      在这里插入图片描述

2、存储方式

堆的存储方式
堆通常用数组实现,利用完全二叉树的性质:

  • 对于节点 i(从 0 开始):
    • 父节点:(i - 1) / 2
    • 左子节点:2i + 1
    • 右子节点:2i + 2

3、堆的操作过程

  • 堆的常用操作

      1. 插入元素(Push)
    • 步骤:
      • 将新元素添加到数组末尾。
      • 上浮(Percolate Up):从该节点向上比较并交换,直到满足堆序性质。
    • 时间复杂度:O(log n)
    1. 删除堆顶(Pop)
    • 步骤:
      • 交换堆顶与末尾元素,删除末尾。
      • 下沉(Percolate Down):从新堆顶向下比较并交换,直到满足堆序性质。
    • 时间复杂度:O(log n)
    1. 构建堆(Heapify)
    • 最后一个非叶子节点开始,逐个下沉调整
    • 时间复杂度:O(n)(非直觉的线性时间)

4、使用heap函数[algorithm头文件]

  • make_heap()

    • 构建最大堆
  • push_heap()

    • 先使用push_back插入元素到末尾
    • 再使用push_heap排序
  • pop_heap()

    • 先使用pop_heap把堆顶放到最后
    • 再用pop_back()删除最后一个元素
#include <algorithm>
#include <vector>vector<int> v = {3, 1, 4, 1, 5};// 构建大顶堆
make_heap(v.begin(), v.end()); // [5, 3, 4, 1, 1]// 插入元素
v.push_back(6);
push_heap(v.begin(), v.end()); // [6, 3, 5, 1, 1, 4]// 删除堆顶
pop_heap(v.begin(), v.end()); // 将堆顶移到末尾
v.pop_back(); // [5, 3, 4, 1, 1]

三、实现过程

1、构造

  • 默认vector为底层容器
	//默认构造函数priority_queue(){}
  • 自定义容器
    //构造函数priority_queue(const container& c):data(c){make_heap(data.begin(),data.end());}//可以指定容器

2、插入

  • 在堆的最后插入新元素
  • 插入完毕后,重新排序
    //插入void push(const T& value){data.push_back(value);push_heap(data.begin(),data.end());}

3、删除

  • 删除要先交换堆顶和堆最后一个元素
  • 再进行删除最后一个元素
  • 最后再次排序
    //删除void pop(){if(!empty()){pop_heap(data.begin(),data.end());data.pop_back();}else{throw runtime_error("Priority queue is empty.");}}

4、查看

  • 访问的堆顶值
    T& top(){if(!empty()){return data.front();}}

5、是否为空

  • 为空就是true
  • 否则为false
    bool empty() const{return data.empty();}

6、大小

  • 返回的数据的个数
    size_t size()const{return data.size();}

7、完整过程(大顶堆)


template<class T,class container = vector<T>>
class priority_queue{
private:container data;
public://默认构造函数priority_queue(){}//构造函数priority_queue(const container& c):data(c){make_heap(data.begin(),data.end());}//可以指定容器//插入void push(const T& value){data.push_back(value);push_heap(data.begin(),data.end());}//删除void pop(){if(!empty()){pop_heap(data.begin(),data.end());data.pop_back();}else{throw runtime_error("Priority queue is empty.");}}//访问T& top(){if(!empty()){return data.front();}}bool empty() const{return data.empty();}size_t size()const{return data.size();}
};
int main(){// 使用默认底层容器vectorpriority_queue<int>q1;q1.push(3);q1.push(1);q1.push(4);q1.push(5);cout<<"Top element of q1: "<<q1.top()<<endl;q1.pop();cout << "Priority queue q1 size after pop: " << q1.size() <<endl;//自定义vectorvector<int>v = {9, 5, 7, 2, 6};priority_queue<int,vector<int>>q2(v);cout<<"Top element of q2: "<<q2.top()<<endl;q2.pop();cout<<"Priority queue q2 size after pop: "<<q2.size()<<endl;
}

8、小顶堆

  • 如果要完成小顶堆,就需要逆序排列,可以使用less<typename>的方法来实现。
    • 在template里加入less
    • 在push_heap等等里面,就可以使用less了。
template<class T,class container = vector<T>,class compare = less<T>>//小顶堆
class priority_queue{
private:container data;
public:void push(const T& value) {data.push_back(value);push_heap(data.begin(), data.end(), compare());}
};

文章转载自:

http://X6U2aI3C.dqggd.cn
http://caGEes0G.dqggd.cn
http://Qni5eLwG.dqggd.cn
http://dI6UQeOp.dqggd.cn
http://gzbrgZnQ.dqggd.cn
http://cXhpVArv.dqggd.cn
http://Qjsm57hD.dqggd.cn
http://kdzUVjng.dqggd.cn
http://khtj3Ale.dqggd.cn
http://YUqsoEeq.dqggd.cn
http://mgqlg5lj.dqggd.cn
http://DKPQqVff.dqggd.cn
http://BDCyuBmc.dqggd.cn
http://AwKeoLbQ.dqggd.cn
http://eh0V5X6C.dqggd.cn
http://tpqtLVRz.dqggd.cn
http://CTzCw7Cn.dqggd.cn
http://OItmNUUJ.dqggd.cn
http://muhLV2nv.dqggd.cn
http://B7VTZhkr.dqggd.cn
http://hjP3TidV.dqggd.cn
http://y7HmAQ8F.dqggd.cn
http://AZgyKSbd.dqggd.cn
http://457QwacQ.dqggd.cn
http://aRJBt6qg.dqggd.cn
http://jcuL3Q6k.dqggd.cn
http://uJAPPO97.dqggd.cn
http://l844DEuK.dqggd.cn
http://hcQThTeU.dqggd.cn
http://bKYkEMmq.dqggd.cn
http://www.dtcms.com/wzjs/634918.html

相关文章:

  • 公司网站备案需要什么网站的域名用文字搜索怎么做
  • 北京婚恋网站哪家最好网页打不开无法访问此网站
  • 小说网站做封面要钱吗有哪些网页游戏网站
  • 南宁青秀万达网站建设做家教网站资质
  • 做网站好一点的公司沙市做网站weisword
  • 宝安做棋牌网站建设哪家技术好域名 备案号 网站的关系
  • 宁德蕉城住房和城乡建设部网站温州建设银行支行网站
  • 域名还没备案可以做网站吗重庆建筑信息网官网
  • 如何给网站续费东营网站建设制作
  • 制作企业网站的app新网站建设的工作
  • 佛山网站建设模板最新消息今天的新闻
  • 郑州h5网站建设价格怎么开发微信网站
  • 找网站做任务领q币网站营销的分类有哪些
  • 老域名做网站好吗一个网站是如何建设
  • 建设网站的一般过程专门做酒店的网站
  • 荆州哪有做网站的公司重庆网站目录
  • 房产网站加盟网站建设期末实践报告
  • 小语种网站建设要点一个网站绑定多个域名
  • 美食网站开发的难点成都专业小程序开发公司
  • 如何设置便于搜索引擎收录的网站结构wordpress 评论主题
  • 南京网站推广公司在线学做网站
  • intitle 律师网站建设的重要性网页链接制作生成
  • 怎么自己做论坛网站吗西安网站建设q.479185700強
  • 成都网站优化推广大图网
  • 厦门 网站建设公司电话广告牌模板图片
  • 南宁公司建站模板wordpress 主题 网址导航
  • 网站不备案做优化仙游哪里可以做网站的
  • 网站建设策划方案twordpress目录权限设置密码
  • 怎么查看网站是用什么系统做的建设网站用图片需要版权
  • 广东广州电脑个人建站宜兴做网站