Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对未排序整数列表中k个最小值的最优搜索

对未排序整数列表中k个最小值的最优搜索
EN

Stack Overflow用户
提问于 2009-02-17 13:09:17
回答 2查看 2K关注 0票数 5

我刚刚被问了一个问题,我很好奇答案应该是什么。本质上,问题在于:

假设您有一个未排序的n个整数列表。如何找到这个列表中的k个最小值?也就是说,如果你有一个10,11,24,12,13的列表,并寻找2个最小值,你会得到10,11。

我得到了一个O(n*log(k))的解决方案,这是我最好的解决方案,但我很好奇其他人会想出什么。我将避免通过发布我的解决方案来污染人们的大脑,并将在一小段时间内编辑它。

编辑#1:例如,如下所示的函数: list getMinVals(list &l,int k)

编辑#2:它看起来像是一种选择算法,所以我也会抛出我的解决方案;迭代列表,并使用优先级队列保存最小值。优先级队列的规范是,最大值最终将位于优先级队列的顶部,因此在将顶部与元素进行比较时,顶部将被弹出,较小的元素将被推入。这假设优先级队列具有O(log )推送和O(1)弹出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-17 13:16:14

这是quickSelect算法。这基本上是一种快速排序,您只需递归数组的一部分。下面是一个用Python编写的简单实现,它的目的是简洁性和可读性,而不是效率。

代码语言:javascript
运行
AI代码解释
复制
def quickSelect(data, nLeast) :
    pivot = data[-1]
    less = [x for x in data if x <= pivot]
    greater = [x for x in data if x > pivot]
    less.append(pivot)

    if len(less) < nLeast :
        return less + quickSelect(greater, nLeast - len(less))
    elif len(less) == nLeast :
        return less
    else :
        return quickSelect(less, nLeast)

这将以O(N)的平均速度运行,因为在每次迭代中,您需要将data的大小减少一个乘法常量。不会对结果进行排序。最坏的情况是O(N^2),但这种情况的处理方式基本上与快速排序相同,使用3的中位数。

票数 6
EN

Stack Overflow用户

发布于 2009-02-17 13:17:53

这通常在selection algorithms或“线性选择”下的算法书籍中。下面是具体的section on min/max k values in a list。是O(nlog(k))。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/558729

复制
相关文章
位、字节、字的区别
字(Word)代表计算机处理指令或数据的二进制数位数,是计算机进行数据存储和数据处理的运算的单位。
Lokinli
2023/03/09
6740
原子操作和互斥锁的区别
这个系列的文章里介绍了很多并发编程里经常用到的技术,除了Context、计时器、互斥锁还有通道外还有一种技术--原子操作在一些同步算法中会被用到。今天的文章里我们会简单了解一下Go语言里对原子操作的支持,然后探讨一下原子操作和互斥锁的区别。
KevinYan
2020/06/16
4.6K0
Jquery的属性操作和DOM操作
       3 val()    :     获取或设置表单内容    (原生JS使用value)
用户3159471
2018/09/13
1.4K0
Jquery的属性操作和DOM操作
SDRAM的操作和配置
在有的项目中我们需要扩展外扩SDRAM,所以需要操作SDRAM,以使用STM32H743主控芯片的FMC外设控制器为例子来说明,可以使用STM32CubeMX生成配置初始化代码,完了后需要添加一些代码才能保证SDRAM正常工作,本篇笔记主要介绍SDRAM的操作和读写。
用户1605515
2020/04/26
6920
比特、字节、字
计算机里的信息是以什么样的形式存在计算机里的呢?是不是说计算机里有一张纸,然后可以把信息写上去呢? 我想大家首先想到的硬盘……和内存。 这就是比特、字节和字的关系。
mwangblog
2018/07/04
3160
HTTP 1.0 和 HTTP 1.1 的主要区别是什么
HTTP 1.0 最早在网页中的使用是在 1996 年,那个时候只是使用一些较为简单的网页和网络请求上,而 HTTP 1.1 则在 1999 年才开始广泛应用于现在的各大浏览器网络请求中,同时 HTTP 1.1 也是当前使用最为广泛的 HTTP 协议。 两者的主要区别体现在:
happyJared
2019/06/20
4.1K0
常用的高防有哪几类?主要的区别是什么?
有一些用户受到DDOS攻击的时候,不知道自己该选择什么样的高防来防御攻击,墨者安全今天主要讲下常用的高防有哪几类?以及主要的区别?高防主要分为HTTPS高防、TCP高防、CDN高防、香港高防、海外高防。
墨者安全筱娜
2019/04/15
2.5K0
常用的高防有哪几类?主要的区别是什么?
NFS操作和部署
如果出现以上结果,表示服务端配置成功 最好在本地挂载一次,挂载成功在取消挂载,至少可以确认服务端配置正确,能够挂载 6) 设置开机自启动并检查
jackxiao
2021/11/16
5630
Cache 和 Buffer 都是缓存,主要区别是什么?
原文链接:https://www.zhihu.com/question/26190832/answer/830615125
业余草
2019/11/12
2750
Cache 和 Buffer 都是缓存,主要区别是什么?
提到这个问题,可能意味着题主意识到了两者的相关性。的确,他们确实有那么一些联系。
老钱
2019/09/25
1.6K0
Cache 和 Buffer 都是缓存,主要区别是什么?
Docker:镜像操作和容器操作
古时的风筝
2018/01/08
1K0
Cache 和 Buffer 都是缓存,主要区别是什么?
首先cache是缓存,buffer是缓冲,虽然翻译有那么一个字的不同,但这不是重点。
良月柒
2019/11/07
3610
css特殊操作和效果
(8) 渐变 background-image: repeating-linear-gradient(red, yellow 10%, green 20%);
前端小tips
2021/12/07
4250
css特殊操作和效果
java中的字节流和字符流的区别是什么?
java当中有两种流,一种是字节流(byte stream): 以1字节(8-bit)为单位进行读/写,一次处理一个字节。另一种是字符流(character stream):,以字符为单位,一次处理一个字符。
马克java社区
2021/05/06
4560
java中的字节流和字符流的区别是什么?
字节、字、bit、byte的关系
字 word 字节 byte 位 bit,来自英文bit,音译为“比特”,表示二进制位。 字长是指字的长度
全栈程序员站长
2022/09/01
3K0
Cache 和 Buffer 都是缓存,主要区别是什么?【转】
作者:Towser 链接:https://www.zhihu.com/question/26190832/answer/32387918 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 不知道为什么这问题突然火了,更新一个一句话总结:cache 是为了弥补高速设备和低速设备的鸿沟而引入的中间层,最终起到加快访问速度的作用。 而 buffer 的主要目的进行流量整形,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 I/O,以减少响应次数(比如从网上下电影
233333
2018/07/04
2K0
Nilearn中的基本操作和查看
Rose小哥今天给大家介绍一款用于神经成像工具Nilearn以及它的基本操作和数据保存查看。
脑机接口社区
2020/06/30
1.4K0
Nilearn中的基本操作和查看
Clojure文件操作和惰性序列
数据一般都是存储在纯文本文件当中,存储的形式多种多样。本文,我会介绍如何在Clojure中读取和写入这些数据。
lambeta
2018/08/17
3.2K0
Python列表常见操作和注意
常见操作 列表很常用,每一个元素之间用 , 隔开。 列表中的每一个元素可以是任意类型的数据 数字,字符串,列表,元组,集合,字典 列表可进行的操作 索引(从0开始)、切片、加、成员检查(in,not in),for循环。 Python 表达式 结果 描述 len([1, 2, 3]) 3 长度 [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合 ['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复 3 in [1, 2, 3] Tru
py3study
2020/01/19
4530
点击加载更多

相似问题

智能家居操作和DialogFlow操作之间的主要区别

10

伪操作和机器操作的区别?

12

Oozie >异步操作和同步操作之间的区别是什么?

16

Delphi字节操作和Java

11

增加虚拟字节的操作和函数

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档