网站优化哪家好鹤山市城乡住房建设部网站

news/2025/9/30 6:22:10/文章来源:
网站优化哪家好,鹤山市城乡住房建设部网站,纯文本网站连接,泰安网站建设哪里找heap不属于STL容器的组件#xff0c;属于幕后角色#xff0c;是priority_queue的助手priority_queue 允许用户以任何次序将任何元素推入容器内#xff0c;但是取出的时候需要从优先级最高(也就是数值最高)的元素开始取#xff0c;这种思想是基于heap的函数实现如果使用list…heap不属于STL容器的组件属于幕后角色是priority_queue的助手priority_queue 允许用户以任何次序将任何元素推入容器内但是取出的时候需要从优先级最高(也就是数值最高)的元素开始取这种思想是基于heap的函数实现如果使用list作为 priority_queue 的底层实现机制元素的插入操作可以使用常数的时间但是不好找 极值需要进行线性扫描和遍历如果考虑到大小这个关键因素进行元素的排序随后进行元素之间的衔接降低了元素的插入效率使用binary search tree作为priority的底层机制这样对于元素的插入和取极值就有O(logN)的表现但是缺点是1binary search tree需要具备足够的随机性2binary search tree实现很难binary heap是一种 complate binary tree(完全二叉树)除了最底层叶节点之外都是处于饱和的状态而最底层的叶节点从左只有不得有空隙示例如下complate binary tree(完全二叉树)整棵树内部没有任何的节点漏洞好处1使用array存储所有的节点保留#0 元素的位置 (将其设为无限大或者无限小),那么当 complate binary tree(完全二叉树)的某个节点位于array数组中的i处的时候其左子树节点必然位于array的 2i 处其右子树的节点必然位于array的 2*i1 的位置。 ( 这里的 / 表示取整数)通过保留#0 的操作可以使用array轻而易举实现出complate binary tree。使用数组的方式表达完全二叉树的方式 称为隐式 表述法考虑到array无法动态的改变大小使用vector代替array实现 完全二叉树根据元素的排列方式 heap分为max-heap和min-heap前者每个节点的键值 都大于或者等于其子节点的键值 后者 每个节点的键值都小于或者等于其每个子节点的键值max-heap 最大值在根节点其总是位于底层的array或者vector的开头min-heap 最小值在根节点其总是位于底层的array或者vector的开头STL 供应的是 max-heap 本文所有的heap都按照 max-heap处理 heap的算法 push_heap 算法 新加入的元素一定是放在最下一层作为叶节点并填补从左到右的第一个空格也就是底层vector()的end()处执行上溯程序将新节点和父接地那记性比较如果大于父节点就进行父子对换如此一直上溯直到不需要对换或者直到遇到根节点为止接收两个迭代器表示heap的底部操作(vector)的头尾并且新的元素插入到底部容器的最尾端如果不符合这两个条件那么push_heap的结果是不可预期的distance_type 方便的决定某个迭代器的类型 参考链接如下STL源码剖析 5中迭代器型别_CHYabc123456hh的博客-CSDN博客 templateclass RandomAccessIterator inline void push_heap(RandomAccessIterator first,RandomAccessIterator last){//函数被调用的时候 新元素应已经置于底部容器的最尾端//distance_type 用于判断迭代器的类型从而判定是否进行偏特化操作__push_heap_aux(first,last,distance_type(first),value_type(first)); }template class RandomAccessIterator,class Distance,class T inline void __push_heap_aux(RandomAccessIterator first,RandomAccessIterator last,Distance *,T*){//根据implicit representation heap的结构特性新值必须置于底部容器的最尾端即第一个洞号(last-first)-1__push_heap(first,Distance((last-first)-1),Distance(0),T(*(last-1))); }//以下这组push_back() 不允许指定 大小比较的标准 template class RandomAccessIterator,class Distance, class T void __push_heap(RandomAccessIterator first,Distance holeIndex,Distance topIndex,T value){Distance parent (holeIndex - 1)/2; //找出父节点//当holeIndex并没有到达顶峰的同时 父节点还小于新值 不符合heap的次序特性//使用operator 进行元素的比较因此STL heap是一种max-heap//父节点是动态变化的//每次是和value进行比较因此不需要进行父子元素值的对调直接让子元素接管父亲的数值while(holeIndex topIndex *(first parent) value){*(first holeIndex) *(first parent); //令洞值为父值,也就是孩子赋予了父亲的数值父亲位置holeIndex parent; //调整洞号向上提升至父节点parent (holeIndex - 1)/2;//新洞的父节点}//持续至顶端或者满足 heap的次序特性为止*(first holeIndex) value;//令新洞为新的数值完成插入操作 }pop_heap() 算法 弹出最大元素根节点缺失需要使用最末尾的元素进行弥补然后执行下放程序将根节点的数值和最大的叶子节点进行互换以此类推直到这个洞的键值大于左右两个子节点或者下放至叶子节点为止pop_heap代码  //这个堆没有指定 大小比较的标准 template class RandomAccessIterator,class T,class Distance inline void __pop_heap(RandomAccessIterator first,RandomAccessIterator last,RandomAccessIterator result,T value,Distance *){*result *first; //设定尾值为首值也就是此刻的尾值为先前的根节点//可以通过底层容器的 pop_back()取出尾值//重新调整 heap 洞号为0(即树根处)将其数值设定为 value(先前的尾节点的数值)__adjust_heap(first,Distance(0),Distance(last-first),value); }//这个堆没有指定 大小比较的标准 template class RandomAccessIterator,class Distance,class T void __adjust_heap(RandomAccessIterator first,Distance holeIndex,Distance len,T value){Distance topIndex holeIndex;Distance secondChild 2 * holeIndex 2;//洞节点的右子节点while(secondChild len){//比较洞节点的左右两个孩子的数值然后以secondChild代表较大的子节点if (*(first secondChild) *(first secondChild -1)){secondChild--;}//令较大的子值为洞值 再令洞号下降至较大的子节点处*(first holeIndex) *(first secondChild);holeIndex secondChild;//找出新洞节点的右子节点secondChild 2 * (secondChild 1);}if (secondChild len){//没有右边节点 只有左边的节点//将左子值设为洞值 再令洞号下移至 左子节点处*(firstholeIndex) *(first secondChild - 1);holeIndex secondChild - 1;}*(first holeIndex) value; }pop_heap之后最大元素将被放置于底部容器的最尾端并没有被取走。可以使用底部容器提供的back()函数获取这个数值也可以使用vector提供的pop_back()函数将其移除 sort_heap() pop_heap可以获得heap中键值最大的元素持续使用pop_heap,不断得到最大的元素就可以实现排序。需要注意的是每没用一次pop_heap都需要将操作范围从后向前缩减一个元素。sort_heap()函数接收两个迭代器用来表现一个heap底部容器的头尾。如果不符合这个条件sort_heap的排序结果未可预期。*排序过后的heap已经被破坏不再是一个合法的堆了相当于操作底层的元素修改了元素破坏性是无法修改的 template class RandomAccessIterator void sort_heap(RandomAccessIterator first,RandomAccessIterator last){//每执行一次pop_heap(),极值(在STL heap中为极大值)就会被放在尾端//扣除尾端再次执行pop_heap()次极值又被放在新的尾端按照上述流程一直执行最后得到排序结果while (last - first 1){std::pop_heap(first,last--);//每次执行pop_heap()一次操作范围即缩减一格} } make_heap() 这个函数的目的是为了将一段现有的数据将其转化为堆的形式主要依据就是complate binary tree 的隐式表述 template class RandomAccessIterator,class T,class Distance void __make_heap(RandomAccessIterator first,RandomAccessIterator last,T*,Distance *){if (last - first 2){ //如果长度为0或者为1不需要重新排列return;}Distance len last - first;//找出第一个需要重新排列的子树的头部以parent标定//考虑到任何节点不需要执行perlocate down因此使用hole Index进行命名更好Distance parent (len - 2)/2;while (true){//重新排列以parent为首的子树//len的目的是为了让__adjust_heap() 判断操作的范围__adjust_heap(first,parent,len,T(*(first parent)));if (parent 0){return; //走完根节点 结束}parent--; // (即将重拍子树的)头部向前一个节点} } heap没有迭代器 heap不提供遍历的功能也不提供迭代器 测试用例 int main(){int ia[9] {0,1,2,3,4,8,9,3,5};std::vectorint i_vec(ia,ia9);std::make_heap(i_vec.begin(),i_vec.end());for (int i 0; i i_vec.size(); i) {std::cout i_vec[i] ; //9 5 8 3 4 0 2 3 1}std::cout std::endl;i_vec.push_back(7);std::push_heap(i_vec.begin(),i_vec.end());for (int i 0; i i_vec.size(); i) {std::cout i_vec[i] ; //9 7 8 3 5 0 2 3 1 4}std::cout std::endl;std::pop_heap(i_vec.begin(),i_vec.end());std::cout i_vec.back() std::endl; //9 return but no removei_vec.pop_back(); //remove last elem and no returnfor (int i 0; i i_vec.size(); i) {std::cout i_vec[i] ; //8 7 4 3 5 0 2 3 1}std::cout std::endl;std::sort_heap(i_vec.begin(),i_vec.end());for (int i 0; i i_vec.size(); i) {std::cout i_vec[i] ; //0 1 2 3 3 4 5 7 8}std::cout std::endl;{//test heap (底层使用array实现)int ia[9] {0,1,2,3,4,8,9,3,5};std::make_heap(ia,ia9);//array不能动态的改变大小因此不可以对满载的array进行push_heap()操作//需要先在array的尾端增加一个元素std::sort_heap(ia,ia9);for (int i 0; i 9; i) {std::cout ia[i] ; //0 1 2 3 3 4 5 8 9}std::cout std::endl;//经过排序之后的heap 不再是一个合法的heap//重新再做一个heapstd::make_heap(ia,ia9);std::pop_heap(ia,ia9);std::cout ia[8] std::endl; //8} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络科技公司名字取名大全seo网站推广计划

1,异常是导致程序bug最直接的原因,异常处理可以让程序员决定,出错时以(蓝屏,代码,报错,提示等)处理. 2,异常级别 初级:语法错误:编译不通过 中级:运行错误,调式来解决 高级:逻辑错误,需要经验,难以排查. 举例c#数组越界class Program{static void Main(string[] args){int[] a…

清除“请允许观看视频”通知页面的完整指南

本文详细介绍了如何移除“请允许观看视频”恶意通知页面,包括使用RKill、Malwarebytes、Zemana等专业工具进行完整系统清理的步骤,帮助用户彻底解决浏览器劫持和广告软件问题。移除“请允许观看视频”通知页面 什么是…

千亿芯片公司被股东“抛弃” ,AI芯片第一股前景几何?

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087近日,AI芯片明星企业寒武纪遭遇重要股东减持的消息引发市场广泛关…

网站用户访问统计关注公众号推广2元一个

1.什么是随机试验(random trial)? 如果一个试验满足试验可以在相同的条件下重复进行、试验所有可能结果明确可知(或者是可知这个范围)、每一次试验前会出现哪个结果事先并不确定,那么试验称为随机试验。 …

品牌网站建设费武进做网站的公司

#一、描述 记录第一课时,脚本的创建与使用基本的API #二、学习记录 (一)创建一个Cube方块 (二)在cube组件上添加一个脚本,选中cube组件,在屏幕右侧有着cube的组件属性栏,点击AddComp…

大气自适应网站源码池州建设机械网站

项目经理的职责: 1、项目范围的定义 2、项目计划的制定、分解、分配、协调、汇报 3、项目质量控制 4、项目需求变更配置 工作职责: 1、负责产品的研发任务的立项计划及实施; 2、负责收集统计各项资料数据,完成自主研发部…

海西州网站建设公司网站开发费怎样入账

来源:资本实验室,本文摘自《2021全球区块链应用市场报告》当我们谈论区块链的时候,但凡对区块链有所了解的人都能够就相关主题或多或少地表达出自己的一些见解。例如:从技术体系上看,区块链是分布式数据存储、点对点传…

easyui网站开发实战电子书php网站美化

Frame是一层一层的概念, 有的位于上层,有的位于下层。 1.加载菜单 2.加载页面层 3.首页拆分出内容层,这个时候内容层位于页面层的上方,当点击其他页面的时候,内容层遮挡住了他们 解决方案一 判断是否是首页&#xff0c…

网站后台怎么做友情链接如何进入设计公司网站

转自 http://kuanghy.github.io/2015/12/30/sudo-vim :w !sudo tee %

DeepSeek-V3.2-Exp 发布,训练推理提效,API 同步降价

微信视频号:sph0RgSyDYV47z6快手号:4874645212抖音号:dy0so323fq2w小红书号:95619019828B站1:UID:3546863642871878B站2:UID: 3546955410049087正式发布 DeepSeek-V3.2-Exp 模型,这是一个实验性(Experimental)…

上海网站搜索排名手机娱乐网站制作

kmp算法作为串的一个重要内容,必然有一定的难度,而在看到各类教辅书里的概念与解释后,其晦涩难懂的内容直接劝退一部分人,现在,让我们来看看吧 KMP解决的问题类型 KMP算法的作用就是在一个已知的字符串中查找子串的位…

a市最牛的网站wordpress 机械模板下载地址

汇聚层(池化层) 通常当我们处理图像时,我们希望逐渐降低隐藏表示的空间分辨率、聚集信息,这样随着我们在神经网络中层叠的上升,每个神经元对其敏感的感受野(输入)就越大。 而我们的机器学习任…

网站查icp备案查询系统百度推广退款电话

90%的中大型企业都会选用SSH?8分钟让你明白它赢在哪里!附实验操作_哔哩哔哩_bilibili 远程登录的安全协议SSH(会进行加密) (公有密钥,私有密钥) 公有密钥大家都可以获得。 (为了…

福州企业建站服务提供手机网站建设企业

本文转载自公众号:浙大 KG。作者:余海阳机构:浙江大学代码地址: https://github.com/zjunlp/deepkeOpenKG 发布地址: http://openkg.cn/tool/deepke一、系统简介关系抽取是知识图谱构建的基本子任务之一,它主要面向非结构化的文本…

做网站用中文路径中国人做英文网站

入门第一式: IndexReader.Open(Dir,readOnly); 当readOnly为true的时候效率最高,最好不要用Reader删除修改记录; 入门第二式: reader.Reopen(readOnly); 优点:比第一式效率高,推荐使用; 缺点&am…

图片任意切割工具(Python 3.8 实现)

图片任意切割工具(Python 3.8 实现) 在日常工作或个人创作中,我们经常会遇到需要把一张图片按比例切割的情况,比如:将长截图拆分成若干小段,方便排版展示 把一张大图切割成网格,用于拼接、打印或艺术化处理 测试…

免费手机端网站模板下载安装天津设计网站公司

问题描述 元宵佳节&#xff0c;一场别开生面的灯笼大赛热闹非凡。NN 位技艺精湛的灯笼师依次落座&#xff0c;每位师傅都有相应的资历值&#xff0c;其中第 ii 位师傅的资历值为 AiAi​。从左到右&#xff0c;师傅们的资历值逐级递增&#xff08;即 A1<A2<⋯<ANA1​&l…

咸宁手机网站建设全屋定制十大品牌排行榜前十名

继上一篇文章《阿里云ECS服务器无法发送邮件问题解决方案》之后&#xff0c;又发现登录的时候发送邮件中的时间和自己windows上的时间不一样&#xff0c;大概找了一下原因&#xff0c;是LocaDateTime使用的时区不一样导致的远程服务器和本机时间不一致。 只需要在LocaDateTime…

免费写作网站视频在线生成链接

文章目录1. 题目2. 解题1. 题目 小易有一个古老的游戏机&#xff0c;上面有着经典的游戏俄罗斯方块。因为它比较古老&#xff0c;所以规则和一般的俄罗斯方块不同。 首先&#xff0c;荧幕上一共有 n 列&#xff0c;每次都会有一个 1 x 1 的方块随机落下&#xff0c;在同一列中…

和平网站建设公司品牌建设的路径

在众多编程语言中&#xff0c;似乎已经没有什么能够阻挡Python的步伐。本月Python又是第一名&#xff0c;市场份额达到了13.42%&#xff0c;在2023年&#xff0c;Python已经连续7个月蝉联榜首&#xff0c;遥遥领先于其他对手。 每个月榜单发布后&#xff0c;都有小伙伴会好奇&…