算法--分治法寻找中值
来源:互联网 发布:优学派软件下载 编辑:程序博客网 时间:2024/06/05 00:26
问题描述
给定任意一个整数列,寻找这个整数列的中值。
解题思路
由于要用到分治算法,会递归求解,所以推广问题为:寻找一个整数列的第k大的数字。
思路1:将序列排序后再寻找第k大的数字,可以用到快速排序或归并排序。
思路2:使用快速排序的切分思想,将序列切为大于,等于,小于pivot的三个数组,分别叫L,M,R。如果k小于L的长度,那么在L里面递归;如果k大于L+M的长度,在R里面寻找第(k - len(L+M))大的数字。其余情况就是等于pivot,直接return就好。
def selection(arr,k): print(arr) if len(arr) == 1: #当只有一个元素,直接返回 return arr[0] pivot = arr[0] #这步以后就是快速排序的切分 left, right = 1, len(arr)-1 while left != right: while arr[right] >= pivot and left < right: right -= 1 while arr[left] < pivot and left < right: left += 1 if left < right: arr[left], arr[right] = arr[right], arr[left] arr[0], arr[left] = arr[left], arr[0] if k-1 > left: #k-1是因为索引从0开始 return selection(arr[left+1:],k-1-left) elif k-1 < left: return selection(arr[:left],k) else: return arr[k-1]array = [5,1,9,3,7,2,8,10,12,4,6,11]ans = selection(array,10)print(ans)
阅读全文
0 0
- 算法--分治法寻找中值
- 分治算法寻找硬币
- 算法笔记04--分治法之寻找最大最小元素
- 分治算法--寻找第k大数
- 分治算法经典例题 寻找假币
- 分治算法寻找第K小数
- 大数据算法课程笔记1:寻找中值算法之随机选取,中值的中值,One Pass算法
- 算法——寻找两个有序数组的中值
- 分治法 寻找第K小元素
- 寻找最近点对-分治法
- 分治法:寻找最大子数组
- 计蒜客 寻找插入位置(分治法)
- 寻找数组中最大值和最小值—分治算法
- 分治算法寻找假银币问题(六)
- 算法(07):分治法
- 常用算法 --- 分治法
- 基础算法--分治法
- 算法学习--分治法
- Eclipse启动项目成功,IDEA报错java.lang.ClassNotFoundException: javax.servlet.Filter
- 观点|如何做好计算机视觉的研究?
- Eqs POJ
- C#NPOI读取Excel
- groupByKey 和reduceByKey 的区别:
- 算法--分治法寻找中值
- 白话debounce和throttle
- 3ds Max插件开发(一)Wizard 安装
- QT学习-1.Hello Word解析
- dumpsys 常用命令
- TCP的握手与挥手
- 话语笔录-坚持
- description
- How are neural networks related to Fourier transforms