从n个数中取出m个最大的最好的算法是什么?
来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/04/28 01:36:52
从n个数中取出m个最大的最好的算法是什么?
有很多算法,复杂度也不尽相同.以下简单举几个例子:
1.n×m遍扫描
【算法基本描述】n×m遍扫描
【算法思想】每次都扫描一遍数组,取出最大元素,这样扫描m遍就能得到m个最大的数
【算法复杂度】O(nm)
2.排序后取最大m个数
【算法基本描述】对n个数排序,对拍完序后的序列取m个最大的数
【算法复杂度】视排序的复杂度,一般为O(nlogn)或O(n^2)
3.最小堆
【算法基本描述】一遍扫描+最小堆
【算法伪代码】
00-建立一个最小堆(优先队列),最小堆的大小控制在m之内
01-for 每个数:
02-----if 这个数比最小堆的堆顶元素大:
03---------弹出最小堆的最小元素
04---------把这个数插入到最小堆
05-最小堆中的m个元素就是所要求的元素
06-其中最小堆的作用就是保持里面始终有m个最大元素,且m个元素中最小的元素在堆顶.
【算法复杂度】O(nlogm) 遍历O(n) 最小堆O(logm)
【其他】如果要求n个数中取最小的m个,只要把算法反一下即可
总结:当n与m差不多大时,采用复杂度较低的排序是比较可取的,因为简单.当m
1.n×m遍扫描
【算法基本描述】n×m遍扫描
【算法思想】每次都扫描一遍数组,取出最大元素,这样扫描m遍就能得到m个最大的数
【算法复杂度】O(nm)
2.排序后取最大m个数
【算法基本描述】对n个数排序,对拍完序后的序列取m个最大的数
【算法复杂度】视排序的复杂度,一般为O(nlogn)或O(n^2)
3.最小堆
【算法基本描述】一遍扫描+最小堆
【算法伪代码】
00-建立一个最小堆(优先队列),最小堆的大小控制在m之内
01-for 每个数:
02-----if 这个数比最小堆的堆顶元素大:
03---------弹出最小堆的最小元素
04---------把这个数插入到最小堆
05-最小堆中的m个元素就是所要求的元素
06-其中最小堆的作用就是保持里面始终有m个最大元素,且m个元素中最小的元素在堆顶.
【算法复杂度】O(nlogm) 遍历O(n) 最小堆O(logm)
【其他】如果要求n个数中取最小的m个,只要把算法反一下即可
总结:当n与m差不多大时,采用复杂度较低的排序是比较可取的,因为简单.当m
从n个数中取出m个数字的所有情况,用什么算法解决,哪种效率比较高呢?
C语言程序:从N个数中随机取出100个不同的数
怎么理解从n个不同元素中取出m个元素的组合数
n个连续的自然数,任取m个,要求取出的m个数中没有相邻的数字,问共有几种取法?
从1、2、3...2007中取N个不同的数,取出的数中任意三个的和能被15 整除,N最大为多少
从1,2,3,4.,2009中取N个不同的数,取出的数中任意三个的和能被18整除.,N最大是多少?
c语言编程问题,计算出从n 个不同元素中取出m 个元素(m≤n)的排列数。
c语言编程问题,计算出从n 个不同元素中取出m 个元素(m≤n)的组合数。编写程序
其他排列与组合公式 从n个元素中取出m个元素的循环排列数=A(n,m)/m=n!/m(n-m)!.我不太明白他表达的意思
一道c语言算法题写一个实现从n个数中找出含有数字3的个数
从和为55的10个不同的非零自然数中,取出3个数后,余下的数之和是55的711,则取出的三个数的积最大等于( )
从一个包含m个数的整型数组中挑出n个数要求这n个数大于等于其他数,其中m>n,m个数各不相同.