您好、欢迎来到现金彩票网!
当前位置:PC蛋蛋 > 最优算法 >

从100万数据中找出最大10条的最优算法

发布时间:2019-07-31 10:06 来源:未知 编辑:admin

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部我面试的时候有问到过,因为数据量很大,所以要同时考虑空间问题。标准答案是采用堆排序。

  构建一个只有10个元素的min-heap,那么根结点就是这10个数中最小的数,然后开始遍历数组,如果遇到的数比min-heap的根结点还小,直接跳过,遇到比min-heap根结点大的数,就替代根结点,然后对这个min-heap进行维护(也就是排序,保证heap的特征)。那么遍历完数组后,这个min-heap的10个元素就是最大的10个数。

  关于堆排序的代码应该不难找追问谢谢你的答案,可是遍历数组,100万的数据量花费的时间不也同样很大吗?追答那你觉得和对100w个数排序比呢...遍历的时间复杂度只是n,而任何排序最快也需要nlogn的时间。

  说快速排序因为in place不占空间是不对的,可以去wiki一下快速排序看看他的空间复杂度是怎么算的。这个问题在美国是比较经典的程序员面试题,我和同学一共被问过3次,并不是在这里胡说。我第一次回答是快速排序,面试官不满意,后来结束了我问他应该是什么,他说你有没有听过堆排序。后来在一本程序员面试书上才看到这个答案。

  展开全部这个东西叫顺序统计学,有个线性时间的递归算法叫randomize-select,有点像快速排序。

  用堆排序是o(nlgn),random-select线性时间就可以做到。。。。用排序是顺序统计学的上界,而且顺序统计学是in place的,不占空间,拜托不懂不要瞎说

  快速排序是原地排序,空间复杂度主要是在递归栈上,平均深度是n(lgn),最坏情况递归深度o(n),你觉得空间复杂度大么。100w数据o(n)也不算大吧,你的排序算法时间复杂度是o(nlgn)。

  问题是顺序统计学不是快速排序,有点类似,也是递归。如果你用chosen-pivot算法,floyd的pivot选择法,可以把最坏事件情况也控制在o(n)内,而且顺序统计学只是递归一半,空间复杂度是绝对的n(lgn)。

http://cairowatch.com/zuiyousuanfa/158.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有