数据结构六——堆的应用

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。
堆比较适合动态数据的场景。

1 应用一:优先级队列

一个优先级队列就是一个堆。

1.1 合并小文件

假设我们有100个小文件。每个文件中的字符串按照从小到大排序好了。现在需要把这100个小文件合并为1个大文件,并且还要按照字符串从小到大排序。
  这和归并排序算法的合并操作有点类似。我们从每个文件读取一条数据,形成一个长度为100的数组。然后排序数组,将最小的文本写入最终合并的文件中,并且从最小文本所在的文件读取一条数据,再次形成长度100的数组。这里有个排序操作,按照快排的时间复杂度O(nlogn)。我们可以对这一步做改进。
  使用最小堆来存放这100条数据。在堆顶的元素就是最小元素。
  1 我们从100个小文件分别读一条数据,插入最小堆。
  2 删除堆顶元素,写入最终合并的文件中。
  3 从从最小文本所在的文件读取一条数据,插入最小堆。重复步骤2。
  插入数据、删除数据的时间复杂度都是O(logn),比原来的排序优化了。

1.2 高性能定时器

对于定时器一般的做法是,每个一秒(一定时间)检查任务队列的中的任务是不是到了执行时间。到了,就执行。
  优化的做法是:按照定时器的开始执行时间,建一个最小堆。在堆顶任务开始执行之前都不需要检查其他任务。

2 应用二:求Top k

求top k可以分为两种场景。一种是静态场景,数据不会发生变化,另一类是动态场景,数据在实时变化。
  静态场景下的解决方法是排序数组,然后返回前k个元素。
  动态场景下如果每次都排序,时间复杂度高。我们建一个容量为k的最小堆。当遇到比堆顶元素大的数据,则删除堆顶元素,插入新数据。这样在某个时刻堆中的所有元素就是top k 元素。

3 应用三:求中位数

中位数:如果数组长度n是奇数,下标等于n2\dfrac{n}{2}2n的元素是中位数。如果n是偶数,则下标等于n2−1\dfrac{n}{2}-12n1n2\dfrac{n}{2}2n两个元素都是中位数,我们可以取下标n2\dfrac{n}{2}2n的元素。
我们可以利用两个堆:一个最大堆,一个最小堆。最大堆中所有的元素都小于最小堆。我们将数组中的前n2\dfrac{n}{2}2n个元素放入最大堆,后面的元素放入最小堆。这样最大堆的堆顶就是中位数。

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

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

相关文章

第四十四期:Keep突然大裁员,回应称“属正常调整”!

10 月 24 日程序员节原本是程序员们最开心的一天,但 Keep 程序员却开心不起来,因为不少人突然面临失业危机。\ 作者:51CTO 10 月 24 日程序员节原本是程序员们最开心的一天,但 Keep 程序员却开心不起来,因为不少人突然…

[hackinglab][CTF][解密关][2020] hackinglab 解密关 writeup

咕咕咕 暂时发现写得最好的 参考链接:https://blog.csdn.net/s0mor/article/details/102969444 参考链接:https://zhuanlan.zhihu.com/p/21740238?referquickresponse

oracle备份和还原

用exp命令即可完成,但要看具体的备份方式。  1. 导出一个完整数据库    exp system/manager filebible_db logdible_db fully    2. 导出数据库定义而不导出数据    exp system/manager filebible_db logdible_db fully rowsn    3. 导出一个或一…

第四十五期:万亿级日访问量下,Redis在微博的9年优化历程

Redis在微博内部分布在各个应用场景,比如像现在春晚必争的“红包飞”活动,还有像粉丝数、用户数、阅读数、转评赞、评论盖楼、广告推荐、负反馈、音乐榜单等等都有用到Redis。 作者:兰将州来源 一、Redis在微博的应用场景 Redis在微博内部…

数据结构七——图

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 基本概念 顶点、边 微信:A和B是好朋友,B也和A是好朋友,A和B之间有条边。 入度:每个顶点链接的边的个数每个人好朋友…

[CTF][Web][PHP][JavaScript]弱类型问题

弱类型问题 类型转换是无法避免的问题。例如需要将GET或者是POST的参数转换为int类型,或者是两个变量不匹配的时候,PHP会自动地进行变量转换。但是PHP是一个弱类型的语言,导致在进行类型转换的时候会存在很多意想不到的问题。 如果在用于密…

大数据学习第1天

大数据学习第一天 Linux系统文件目录初记 /bin:存放ls、rm、mv等常用可执行文件(命令)的地方。 /sbin:存放系统管理常用的程序,如fdisk、mount等命令,与/bin不同的是该目录下存放的程序是root等系统管理员使用的程序。 /boot:用…

第四十六期:最近程序员频繁被抓,如何避免面向监狱编程?!

最近,有很多关于程序员被抓甚至被判刑的新闻在朋友圈疯传:"某程序员因为接了个外包,帮别人写了个软件,结果这个软件被用于赌博导致被抓。某公司利用爬虫抓取用户信息,最后被发现,导致该公司的程序员被…

算法五——字符串匹配(上)

文章内容、图片均来自极客时间。 如何借助哈希算法实现高效字符串匹配 1 概念和用途 字符串匹配:查找一个字符串A在字符串B中是否出现,这个过程就是字符串匹配。A称为模式串,B称为主串。主串的长度记为n,模式串长度记为m。n>…

[hackinglab][CTF][综合关][2020] hackinglab 综合关 writeup

[hackinglab][CTF][解密关][2020] hackinglab 上传关 writeup 综合关 1 渗透测试第一期 概要:在于绑定admin用户,进行修改密码!(手机号码仔细!!!) 知识点:在进行绑定的…

selenium3+python-多窗口、句柄(handle)

一、获取当前窗口句柄 1.元素有属性,浏览器的窗口其实也有属性的,只是你看不到,浏览器窗口的属性用句柄(handle)来识别。 2.人为操作的话,可以通过眼睛看,识别不同的窗口点击切换。但是脚本没长…

算法五——字符串匹配(中)

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1文本编辑器中的查找功能怎么实现 在word中有一个功能:查找某个字符串,将其替换为另一个字符串,就会用到这个功能。 需要新算法的…

第四十七期:漫画:什么是公有云、私有云和混合云?

为了方便大家理解,我们尽量用通俗的语言和举例子的方式讲解,并且文中还配备了漫画供大家参考学习。 作者:漫话编程 为了方便大家理解,我们尽量用通俗的语言和举例子的方式讲解,并且文中还配备了漫画供大家参考学习。 …

[攻防世界][CTF][2020][MISC] 攻防世界 MISC writeup

咕咕咕 新手练习区精选write up https://blog.csdn.net/weixin_43550772/article/details/106028357 https://www.cnblogs.com/sesefadou/p/11788090.html https://blog.csdn.net/qq_42906381/article/details/105335021

第四十八期:你太菜了,竟然不知道Code Review?

我一直认为Code Review(代码审查)是软件开发中的优秀实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。 作者:宝玉 我一直认为Code Review(代码审查)是软件开发中的优秀实践之一,可以有效提高整体代码质量&…

算法五——字符串匹配(下)KMP

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 KMP,是三个作者(D.E.Knuth,J.H.Morris和V.R.Pratt)的简称。   KMP算法和BM一样,也是一个字符串匹配算法。…

点击回车事件(登录)

//增加点击回车事件$(document).keypress(function(e) {var eCode e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;//eCode等于13代表回车事件if (eCode 13){//ajax提交表单,若成功跳转页面,不成功提示输入的账号密码错误!$.ajax({type : …

修电脑

无法启动 无法找到驱动 需要进BISO BIOS SECURE BOOT disabled 后即可进入 重装系统 1.启动盘制作 https://rufus.ie/ 2. F10(各品牌不同 ) 选择U盘重装即可

第四十九期:大牛总结的MySQL锁优化,写得太好了!

随着 IT 技术的飞速发展,各种技术层出不穷,让人眼花缭乱。尽管技术在不断更新换代,但是有些技术依旧被一代代 IT 人使用至今。 作者:崔皓 随着 IT 技术的飞速发展,各种技术层出不穷,让人眼花缭乱。尽管技…

数据结构八-Trie树

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 Trie树的使用场景 搜索引擎中的搜索词建议。当你在搜索引擎中输入词,搜索引擎提示给你一个词的列表,帮助你快速输入想搜索的词。 这个功能…