Python笔试题目:求最大的K个数子,解法二,适合小型数据集的情况
来源:互联网 发布:直播平台 知乎 编辑:程序博客网 时间:2024/06/07 16:46
题目:
Givena array of 10,000 random intergers, select the biggest 100 numbers.
1)The order of the result numbers does not matter;
2)Take care about the algorithm performance and big O complexity.
我的解答:
#coding=utf-8## generate random numbersfrom random import randint# low and high limit of the numbers of the random numberlow = -10000000high = 10000000# total_number of the numberstotal_number = 10000# the number of beggest number we needmax_number = 100# use () for [] will be more efficient ?numbers = [randint(low,high) for elem in xrange(total_number)]#print numbers""" when the dataset is not large, we still consider the method of "sort and then select" take quick sort for example, its average complexity is O(N*logN), then take the K beggest numbers with complexity O(K). So time complexity is O(N*logN) + O(K) = O(N*logN) in total. If we only find the biggest K numbers and let the N-K number alone, the complexity is O(N*K) using part_sorting. comparing O(N*logN) and O(N*k), we can find that quick sort algorithm is more efficient that the latter one when k > logN and vice versa. """from math import logdef quick_sort(numbers): return [] if numbers == [] else quick_sort([y for y in numbers[1:] if y < numbers[0]]) + \ [numbers[0]] + quick_sort([y for y in numbers[1:] if y >= numbers[0]]) def selection_sort_part(numbers): size = len(numbers) # the range is [0...max_number-1] ,rather than [0,len(numbers)]. so the selection performs only K times, for i in range(max_number): k = i for j in range(i + 1, size): # if numbers[j] > numbers[k]: k = j if k is not i: numbers[i], numbers[k] = numbers[k], numbers[i] return numbersdef main(): if max_number >= log(total_number,2): print 'result from quick_sort algorithm:',quick_sort(numbers)[-max_number:] else: print 'result from selection_sort_part algorithm:',selection_sort_part(numbers)[:max_number]if __name__ == '__main__': main()
0 0
- Python笔试题目:求最大的K个数子,解法二,适合小型数据集的情况
- Python笔试题目:求最大的K个数子,解法三,适合大型数据集的情况
- Python笔试题目:求最大的K个数子,解法一,最快速实现的方法
- 寻找最大的K个数--递归解法
- N个数求最大的k个数
- 四.求一组数据中最大的K个数
- 利用MapReduce求海量数据中最大的K个数
- 编程之美2.5寻找最大的K个数 解法二 Java版
- 求数组中最大的k个数
- 求数组中最大的K个数
- 求数组的最大K个数
- 求连续K个数的和最大
- hdu1024求n个数分成k段的最大子序列和
- 求n个数中最大的k个数
- 利用K-堆求最大的K个数
- 求数组中最大和为零的子串 滴滴打车2016笔试题目
- 2015年阿里在线笔试题:求两个字符串的最大公共子序列长度的C语言解法
- 最小的k个数--适合处理海量数据
- IT公司盈利模式分析
- 有关在ACM/ICPC竞赛环境下的GCC/G++的拓栈外挂的研究记录
- 发现许多编程网css知识有点落后
- hdu 5051 找规律?+大trick
- JSP实现网页,数据库分页功能
- Python笔试题目:求最大的K个数子,解法二,适合小型数据集的情况
- //转//Revisiting Android disk encryption
- malloc函数详解
- sphinx4 FrontEnd
- C# 6.0 (C# vNext) 新功能之:Nameof Expressions
- QT 编译慢
- 大三第五个星期
- 一个简单的Android客户端从服务器端获取json数据并解析的实现代码
- Java 第二课数据类型