给定n个元素,找出元素中的第二大元素。该问题如果用线性扫描的方法的话,

首先找出最大值,比较n-1次

然后从n-1个元素中找出最大值,比较n-2次

下面考虑设计一个选第二大元素的分治算法

1.将n个元素从中间一分为二

2.递归两个子问题,分别求出两个子问题的最大值,同时将被淘汰的较小元素记录在较大元素的列表中。在最大值的淘汰元素列表中找第二大元素。

实现

用字典存储被较大元素淘汰的元素,每个元素的key是给定的n个元素,value是一个列表,包括所有被该元素淘汰的元素

1.首先定义一个find_max()函数,实现第一阶段的操作:接收n个元素的列表a_list,要查找的问题的边界left和right。输出n个元素的最大值,同时将被淘汰的元素插入到字典相应key的value中

def find_max(arr,left,right):global dicif left>=right:return arr[left]mid=(left+right)//2left_max=find_max(arr,left,mid)right_max=find_max(arr,mid+1,right)if left_max>right_max:dic[left_max].append(right_max)return left_maxelse:dic[right_max].append(left_max)return right_max

2.定义find_max函数:接收最大值淘汰的元素列表,顺序查找列表中的最大值,即为n个元素的第二大元素

def find_second(n_max):n=len(n_max)second_max=n_max[0]for i in range(1,n):if n_max[i]>second_max:second_max=n_max[i]return second_maxarr=[6,12,3,7,2,18,90,87,54,23]
n=len(arr)
dic={}
for i in range(n):dic.update([(a_list[i],[])])#初始化字典列表
first_max=find_max(a_list,0,n-1)
second_max=find_second(dic[first_max])
print(dic[first_max])
print(second_max)

选第二大元素python(分治)相关推荐

  1. 选第二大算法(锦标赛算法)

    算法描述 算法:FINDSECOND 输入:n个数的数组a[0...n-1] 输出:数组中的第二大的数second 算法思路 在选最大选最小算法中,我们将数组中的数两两分组进行比较,然后在较大的一组中 ...

  2. 求解第二大元素——锦标赛算法(Tournament Algorithm)

    问题 给定一个长度为的数组,请用比较次数小于的算法求出数组中的第二大元素. 求解 看到题目中的比较次数小于就知道不能先用一次循环找出最大元素,接着利用最大元素再一次循环找到第二大元素. 那么,应该怎么 ...

  3. 【锦标赛算法】找第二大元素FindSecond()

    考虑找第二大元素,会想到调用两次Findmax()算法函数(推导可以参考上篇文章).先用Findmax()算法找出最大值,然后从L中删除max,再调用Findmax()找出剩下元素中的最大元素,就是输 ...

  4. 求数组第二大元素 和 字符串拷贝的实现

    int main() {int a[] = {5,100,32,45,21,67,32,68,41,99,13,71};//首先默认第一个成员和第二个成员就是最大和第二大int max = 0; // ...

  5. 取出数组第一大和第二大元素

    [php] view plaincopy # 取出数组最大的元素 function getMax( $arr ){ if( !is_array($arr) ){ exit('参数必须是数组'); } ...

  6. Python 面试题:输入一个数组,输出该数组的第二大的数字

    问题: 输入一个数组,输出该数组的第二大的数字,并且编写相关的测试用例 注意: 1.如果list含有非int, float元素需要remove 2.如果list有重复的最大元素,需要自己处理,内置的l ...

  7. 如何寻找无序数组中的第K大元素?

    如何寻找无序数组中的第K大元素? 有这样一个算法题:有一个无序数组,要求找出数组中的第K大元素.比如给定的无序数组如下所示: 如果k=6,也就是要寻找第6大的元素,很显然,数组中第一大元素是24,第二 ...

  8. python返回列表中最大和第二大的元素

    设计一个函数返回传入的列表中最大和第二大的元素的值. 测试输入:[1,2,3,4,5,6] 预期输出:(5,6) 测试输入:[11,2,30,4,55,6] 预期输出:(30,55) 要求不破坏原来的 ...

  9. python列表求平均值_长篇文讲解:Python要求O(n)复杂度求无序列表中第K的大元素实例...

    本文内容主要介绍了Python要求O(n)复杂度求无序列表中第K的大元素实例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧! 昨天面试上来就是一个算法,平时基本的算法还行,结果变个法 ...

最新文章

  1. EXTJS实现的WEBQQ可以传文件了哈
  2. 线程池中keepAliveTime的理解
  3. ubuntu下安装zabbix
  4. java线程之线程通信控制
  5. matlab计算系统过渡过程时间,MATLAB在电机拖动拖动系统过渡过程分析中的应用
  6. java class教程_深入理解Java Class文件格式(七)
  7. [转载] 七龙珠第一部——第029话 冒险再度开始
  8. Go Revel - Filters(过滤器链)
  9. Contest 7.21(贪心专练)
  10. 图书管理系统sql语句
  11. 手把手教你学51单片机
  12. 高数 | 常用求极限方法总结
  13. 电脑怎么设置扬声器播放麦克风的声音
  14. java 中文分词转拼音_如何实现拼音与汉字的互相转换
  15. VM虚拟机安装及使用
  16. APPInventor网络数据库浏览器(TinyWebDB查询API)
  17. L1正则项-稀疏性-特征选择
  18. 如何实现 JS 运行时的 Inspector 能力
  19. 从全球最大同性交友网站抄了一份不一样的2048小游戏
  20. 正则表达式-包含数字和字母的组合

热门文章

  1. 讨教大学|聊聊可靠性工程师的就业前景怎么样?
  2. 商城模板网站html5手机端_玩转手机网站建设,选择模板还是不选择模板呢?
  3. one body.one heart.一个人,一颗心
  4. 总结一下sun 公司自己的 JAX-WS WebService 用法
  5. e1载波的数据速率是_电力公司常用抄表方案 电力载波抄表系统
  6. VMWare虚拟机桥接模式下设置静态IP实现上网
  7. Linux Shell脚本 Linux C程序 获取指定的范围内 or 系统可用端口
  8. 路与远方:从方舟开源,说到中国软件行业的生态未来
  9. CAD入门基本操作命令
  10. LVS简介及LVS-NAT负载均衡群集的搭建(要像记得回家的路一样记得理想和远方)