算法系列-topk问题

来源:互联网 发布:java助理工程师要求 编辑:程序博客网 时间:2024/05/18 20:46

1.问题描述

有N(N>>10000)个整数,求出其中的前K个最大的数。(称作Top k或者Top 10)

2.思考过程

若解答者脑袋中存储的现成数据结构很少,第一反应就是将整个整数序列排序,然后取前K个,即为前k个最大的数。然后问题就变成了怎样将超大整数集合排序的问题

然而,我们碰到问题时,要仔细分析问题中给予我们的尽可能利用的条件,就像数学解析,我们要充分利用他们特征。此题中,找出前k个最大的数,也就是说我们没必要对所有整数排列浪费时间。我们知道,最值问题我们可以使用堆结构来搞定,一次堆结构可以找到一个最值,现在我们要找到k个最值,那就每次调整一个堆后,移除出去最值,加进没有比较的值成员进去继续调整堆。

此题解决方案具体步骤如下:

 (1)先取整数集合中的K个值建立最小堆

 (2)如果后续整数不大于根结点,直接舍弃,继续下一个,直到后续整数大于根结点,则替换根结点,继续调整,直到又变成最小堆

 (3)继续2步骤的操作,直到所有整数都加入过堆

留在堆中的值集合便是 top k了。

由于仅仅保存了K个数据,调整最小堆的时间复杂度为O(lnK),因此TOp K算法(问题)时间复杂度为O(nlnK).




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 英语短文不会读怎么办 你的孩子怎么办 英文 头发掉在地上怎么办 行李箱轮子太响怎么办 货车横拉杆弯怎么办 拉杆轮子坏了怎么办 外拉杆球头旷了怎么办 古早味蛋糕回缩怎么办 孩子迷上嘻哈怎么办 吃扇贝过敏了怎么办 海鲜和杨梅一起怎么办 我买东西没眼光怎么办 兔子身上有跳蚤怎么办 物业不提供发票怎么办 购房发票 不给怎么办 新锐大灯光散不聚怎么办 网络碰到垃圾人怎么办 有人侮辱我家人怎么办 亲人欠网贷还不上现在病重怎么办 亲人欠网贷现在病重怎么办 小孩子大嘴巴病怎么办 小孩子有心胀病怎么办 小孩子有胃痛病怎么办 大修基金用完了怎么办 基金买错了怎么办 基金公司倒闭了怎么办 桔子分期有风险怎么办 想买vivox21没钱怎么办 中介收钱不办事怎么办 手机应用程序几个运行怎么办 网上彩票是骗局怎么办 辞职后不想辞职怎么办 口头辞职后悔了怎么办 纸质承兑丢了怎么办 天天利财倒闭怎么办 网络理财平台诈骗怎么办 银行理财产品到期后怎么办 30岁没工作怎么办 理财投资被骗了怎么办 支付宝不想收钱怎么办 信融财富逾期怎么办