Python笔试题目:求最大的K个数子,解法二,适合小型数据集的情况
2014-10-13 22:00
405 查看
题目:
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.
我的解答:
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 numbers from random import randint # low and high limit of the numbers of the random number low = -10000000 high = 10000000 # total_number of the numbers total_number = 10000 # the number of beggest number we need max_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 log def 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 numbers def 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()
相关文章推荐
- Python笔试题目:求最大的K个数子,解法三,适合大型数据集的情况
- Python笔试题目:求最大的K个数子,解法一,最快速实现的方法
- 阿里巴巴笔试题目(接示本质的解法)
- 2014年亚马逊在线笔试题目及解法_9_24(字符串编辑距离升级版)
- 【Python】 网易笔试编程题( 最大的奇约数)
- 最大子段和解法及python实现
- 阿里云笔试题:最大子段和问题的动态规划解法
- 最大K个数问题的Python版解法总结
- 最大K个数问题的Python版解法总结
- 整理的一些PYTHON笔试面试题目
- Python算法笔试题目,破解Hash值,回溯法
- 李航《统计学习方法》第六章——用Python实现最大熵模型(MNIST数据集)
- 求数组中最大和为零的子串 滴滴打车2016笔试题目
- 阿里云笔试题:最大子段和问题的动态规划解法
- 最大公共子串问题的Python解法
- 2017网易游戏雷火盘古实习生招聘笔试真题:最大和 [python]
- 微软201604笔试题目3 Demo Day 动态规划解法
- Python算法笔试题目,破解Hash值,N进制法
- 2015年阿里在线笔试题:求两个字符串的最大公共子序列长度的C语言解法
- 阿里巴巴笔试题目妙解(接示本质的解法)