番禺网站制作价格秦皇岛建设网站

diannao/2025/10/14 0:15:11/文章来源:
番禺网站制作价格,秦皇岛建设网站,做西装的网站,网站建设产品heap【堆】掌握 手写上浮、下沉、建堆函数 对一组数进行堆排序 直接使用接口函数heapq 什么是堆#xff1f;#xff1f;#xff1f;堆是一个二叉树。也就是有两个叉。下面是一个大根堆#xff1a; 大根堆的每一个根节点比他的子节点都大 有大根堆就有小根堆#xff1…heap【堆】掌握 手写上浮、下沉、建堆函数 对一组数进行堆排序 直接使用接口函数heapq 什么是堆堆是一个二叉树。也就是有两个叉。下面是一个大根堆 大根堆的每一个根节点比他的子节点都大 有大根堆就有小根堆 我们可以看到红9在绿9的下一层大小堆中我们需要注意【只有根节点对子节点的大小比较】没有子节点之间的比较。 一、手写函数 def siftup(heap, pos):endpos len(heap)startpos posnewitem heap[pos]# Bubble up the smaller child until hitting a leaf.childpos 2*pos 1 # leftmost child positionwhile childpos endpos:# Set childpos to index of smaller child.rightpos childpos 1if rightpos endpos and not heap[childpos] heap[rightpos]:childpos rightpos# Move the smaller child up.heap[pos] heap[childpos]pos childposchildpos 2*pos 1# The leaf at pos is empty now. Put newitem there, and bubble it up# to its final resting place (by sifting its parents down).heap[pos] newitemup操作只是将孩子提上去但是没有保证根节点比孩子小现在比较孩子和父节点如果父节点更大往下覆盖孩子节点并且往上继续比较上面的父节点直至到头start将原来的子节点的值覆盖在此时的父节点上。siftdown(heap, startpos, pos)up与down一起维持小根堆性质 def siftdown(heap, startpos, pos):newitem heap[pos]# Follow the path to the root, moving parents down until finding a place# newitem fits.while pos startpos:parentpos (pos - 1) 1parent heap[parentpos]if newitem parent:heap[pos] parentpos parentposcontinuebreakheap[pos] newitemdef heappop(heap):Pop the smallest item off the heap, maintaining the heap invariant.lastelt heap.pop() # raises appropriate IndexError if heap is emptyprint(pop:, lastelt)if heap:returnitem heap[0]heap[0] lasteltsiftup(heap, 0)print(heap:, heap)print(returnitem, returnitem)return returnitemreturn lasteltdef heapify(x):Transform list into a heap, in-place, in O(len(x)) time.n len(x)for i in reversed(range(n//2)):从最后一个根节点开始将孩子节点最小的覆盖根节点并不断往下找将较小的孩子提上来。直到没有孩子将根节点的值覆盖到此时的孩子节点上siftup(x, i)def heap_sort(arr):# 将数组转换为小根堆heapify(arr)print(arr)# 弹出堆顶元素直到堆为空每次pop最后一个节点并输出根节点。将最后一个节点覆盖在根节点上并且进行up——down操作位置小根堆性质return [heappop(arr) for _ in range(len(arr))]if __name__ __main__:# 示例数组arr [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]# 执行堆排序sorted_arr heap_sort(arr)# 打印排序后的数组print(sorted_arr, sorted_arr) 二、调用python接口 import heapq def heap_sort(arr):# 将数组转换为小根堆heapq.heapify(arr)print(arr)# 弹出堆顶元素直到堆为空每次pop最后一个节点并输出根节点。将最后一个节点覆盖在根节点上并且进行up——down操作位置小根堆性质return [heapq.heappop(arr) for _ in range(len(arr))]if __name__ __main__:# 示例数组arr [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]# 执行堆排序sorted_arr heap_sort(arr)# 打印排序后的数组print(sorted_arr, sorted_arr) 输出 [1, 1, 2, 3, 3, 9, 4, 6, 5, 5, 5] sorted_arr [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9] 三、时间复杂度 siftup(heap, pos) 函数 这个函数将一个元素上浮到它应该在的位置。在最坏的情况下它可能需要上浮到堆的根节点时间复杂度是 O(log n)其中 n 是堆中元素的数量。 siftdown(heap, startpos, pos) 函数 这个函数将一个元素下沉到它应该在的位置。同样在最坏的情况下它可能需要下沉到叶子节点时间复杂度也是 O(log n)。 heappop(heap) 函数 这个函数移除并返回堆顶元素最小元素然后通过调用 siftup 来修复堆。siftup 的时间复杂度是 O(log n)所以 heappop 的时间复杂度也是 O(log n)。 heapify(x) 函数 这个函数将一个数组转换成一个堆。它从最后一个父节点开始向上调用 siftup。由于堆的最后一个父节点的索引是 n/2 - 1n 是数组的长度所以它实际上调用了大约 n/2 次 siftup。因此heapify 的时间复杂度是 O(n)。 heap_sort(arr) 函数 这个函数首先调用 heapify 将数组转换成一个堆然后通过 n 次调用 heappop 来移除所有元素。由于 heapify 的时间复杂度是 O(n)并且 heappop 的时间复杂度是 O(log n)heap_sort 的总时间复杂度是 O(n log n)。 总结 时间复杂度 siftup: O(log n)siftdown: O(log n)heappop: O(log n)heapify: O(n)heap_sort: O(n log n) 整体上对于堆排序算法的时间复杂度分析如下 构建堆Heapifyheapify 函数将数组转换成一个堆。对于一个长度为 n 的数组heapify 的时间复杂度是 O(n)。这是通过从最后一个父节点开始向上调用 siftup 实现的每个 siftup 操作的时间复杂度是 O(log n)但由于堆的结构特性实际上 heapify 的总体时间复杂度是线性的。 堆排序Heap Sort在 heap_sort 函数中首先调用 heapify 将数组转换成一个堆然后通过 n 次调用 heappop 来移除所有元素。每次 heappop 操作的时间复杂度是 O(log n)。因此n 次 heappop 的总时间复杂度是 O(n log n)。 综合以上两点堆排序的整体时间复杂度是 O(n n log n)简化后为 O(n log n)。这是因为在堆排序过程中构建堆是一次性的而移除元素需要 n 次操作每次操作的复杂度是 log n。 空间复杂度O(1)因为所有操作都是原地进行的。

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

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

相关文章

手机网站类型网站开发预算报价表

往期回顾 【QT入门】 Qt代码创建布局之setLayout使用-CSDN博客 【QT入门】 Qt代码创建布局之多重布局变换与布局删除技巧-CSDN博客 【QT入门】 QTabWidget各种常见用法详解-CSDN博客 【QT入门】 QListWidget各种常见用法详解之列表模式 QListWidget有列表和图标两种显示模式&a…

空间站建造阶段网站建设验收期

正题 题目大意 nnn个武器(n≤2n\leq2n≤2),mmm个符文 符文1:直接改变一个武器的攻击力(最多一个) 符文2:增加一个武器的攻击力 符文3:使一个人的武器攻击力翻若干倍 求武器攻击力乘积最大,输出答案的自然对数。 解题思路 首先log(ab)log(a)log(b)lo…

html5行业网站湛江做网站从

读写Excel打包后无法运行可能的解决方案 💡.适用于NPOI、EPPlus。 💡.下载 资源包👈,解压后把dll放到Assets目录中再重新打包即可。

手机端网站做appiis做网站上传速度慢

《C语言编写modbus协议》由会员分享,可在线阅读,更多相关《C语言编写modbus协议(23页珍藏版)》请在人人文库网上搜索。1、include / 字地址 0 - 255 (只取低 8位) / 位地址 0 - 255 (只取低 8位)/* CRC 高位字节值表 */ const uint8 code auchCRCHi 0x0…

广东茶叶网站建设做普通网站多少钱

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法,其…

广东事业单位网站vs2013网站开发代码

随着数字营销的崛起,搜索引擎优化(SEO)已成为企业提升在线可见度、吸引潜在客户的关键手段。面对独立站谷歌SEO外包服务和自建SEO团队两种选择,企业往往会感到困惑。本文将深入探讨这两种方式的优势与局限,帮助您做出明…

php网站实例教程深圳网站搭建哪里找

身份证实名认证接口分为身份证二要素、三要素、三要素人像核验接口,被广泛的应用于婚恋、交友、电商等等一系列行业领域,身份证实名认证需要实时数据,对于数据源来说也需要可靠,那么,身份证实名认证的价格是不是很贵呢…

搭建微网站平台辽宁建设厅的证到底在哪个网站查

瑞士数学家雅克伯努利(Jacques Bernoulli,1654~1705)首次研究独立重复试验(每次成功率为p)。在他去世后的第8年(1713年),他侄子尼克拉斯出版了伯努利的著作《推测术》。在书中,伯努利指出了如果这样的试验次数足够大,那么成功次数…

Wordpress网站防止采集优设网网站

正题 大意 一个字符串,要求第k小的子串。 解题思路 先建立一个后缀自动机,然后用一个numinum_inumi​表示第iii个节点的可以到达的点所表示的子串总和,然后从第1号点开始查找,判断一下找到第k小所在的节点后,然后查找…

消防器材厂家东莞网站建设东莞麻涌网站建设

文件上传一个经常用到的功能,它有许多中实现的方案。 页面表单 RFC1897规范 http协议上传 页面控件(flash/html5/activeX/applet) RFC1897规范 http协议上传 页面控件(flash/html5/activeX/applet) 自定义数据规范 http协议上传 页面控件(flash/html5/act…

谁给个好网站wordpress 头像不见

关于文件上传,这边介绍一个第三方工具,叫AutoIt,简单来说,这个是一个能支持桌面GUI自动化的工具,它支持脚本语言编写。这里,我们用AutoIt来做文件上传的演示。在Selenium脚本中如果需要AutoIt来协助这个文件…

专业手机移动网站建设网站上传页面

Django是Python下的一款网络服务器框架。Python下有许多款不同的框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。虽然Django之于Python,达不到Rail之于Ruby的一统江湖的地位,但Django无疑也是Python在网络应用方面的一位…

潍坊网站建设小程序制作网络优化工程师主要做什么

目录 1.响应式说明 2.vue3的ref及reactive的使用 3.reactive响应式失效问题 4.总结 1.响应式说明 vue的响应式是vue框架中的核心概念之一,它是指当数据发生变化时,vue能够自动更新视图。vue2的响应式是基于Object.defineProperty进行实现的。 当你把…

seo站内优化公司免费制作微信网页网站

真机调试现在发生了改变,在Xcode7以前进行真机调试是需要证书的,正是由于这个原因,这个过程比较麻烦;在Xcode7以后是免证书的,使用起来就简单很多了。 Xcode7以前的步骤如下: 原链接地址为:http…

中国建设银行北海招聘信息网站龙岗做网站公司

一、栈 1.1、栈的基本概念 1.1.1、栈的定义 栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。 栈顶(Top):线性表允许…

企业集团网站源码手机能看禁止网站的浏览器

目录 1.煤球数量; 2.生日蜡烛; 3.凑算式 4.方格填数 5.四平方和 6.交换瓶子 7.最大比例 1.煤球数量 题目解析:可以根据题目的意思,找到规律。 1 *- 1个 2 *** 3个 3 ****** 6个 4 ********** 10个 不难发现 第…

网站源码生成器水滴查企业查询

文章目录八皇后问题解决思路代码实现运行结果八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击&#x…

南京小程序开发网站制在线做网站 自动生成手机版

这里我想首先说明一下,虽然我们经常会拿垃圾回收器来做比较,虽然想挑选一个最好的收集器出来,但是目前也没有说哪一款收集器是完美的,更不存在万能的收集器,我们也只是对收集器选择最适合场景的一个收集器。 那么作者将…

织梦中英文网站源码网站权重如何速度增加

职场口才提升之道 在职场中,口才的重要性不言而喻。无论是与同事沟通协作,还是向上级汇报工作,亦或是与客户洽谈业务,都需要具备良好的口才能力。一个出色的职场人,除了拥有扎实的专业技能外,还应具备出色…

家政服务网站做推广有效果吗太原网站制作建设

HarmonyOS是华为自主研发的面向全场景的分布式操作系统。它的技术特点主要体现在以下几个方面: 分布式架构:HarmonyOS采用了分布式架构设计,通过组件化和小型化等方法,支持多种终端设备按需弹性部署,能够适配不同类别的…