实验内容

给定任意几组数据,利用分治法的思想,找出数组中的最大值和最小值并输出

实验原理

利用分治法,将一个数组元素大于 2 的数组分成两个子数组,然后对每一个子数组递归调用,直到最小的子数组的元素个数为 1 个或者是 2 个,此时就能直接得出最大值与最小值,然后逐步往上合并子数组,比较 2 个子数组的最大值与最小值,依次进行下去,最后就能找到整个数组的最大值与最小值。

实验步骤

① 先解决小规模的问题,如数组中只有 1 个元素或者只有两个元素时候的情况。
② 将问题分解,如果数组的元素大于等于 3 个,将数组分为两个小的数组。
③ 递归的解各子问题,将中分解的两个小的数组再进行以上两个步骤最后都化 为小规模问题。
④ 将各子问题的解进行比较最终得到原问题的解

代码实现

import timedef findbest(A, low, high):if high - low <= 1:                 #如果数组中元素只剩下两个,则可以直接比较if A[low] <= A[high]:return A[high], A[low]else:return A[low], A[high]mid = (low + high) // 2             #从中点分成两个子数组,进行递归查找result1 = findbest(A, low, mid)result2 = findbest(A, mid+1, high)if result1[0] < result2[0]:         #比较找到的两个子数组的最大值的大小关系if result1[1] < result2[1]:     #再比较找到的两个子数组的最小值的大小关系return result2[0], result1[1]   #返回结果(最大值,最小值)else:return result2[0], result2[1]else:if result1[1] < result2[1]:return result1[0], result1[1]else:return result1[0], result2[1]def main():from random import samplerand_array = sample([x for x in range(-1000, 1000)], 10)#在-1000~999中产生10个随机数print(rand_array)start = time.time()result = findbest(rand_array, 0, 9)print("最大值为:%d" %(result[0]))print("最小值为:%d" %(result[1]))end = time.time()print("共耗时:\n" + str(end - start) + " s")if __name__ == '__main__':main()

时间复杂度分析

时间消耗主要在 findbest 函数的执行过程中,因为该函数过程中实际上就是对整个数组进行了一次遍历,那么时间复杂度就是 O(n),n 为输入规模

运行结果

[-246, 559, -696, -618, -519, 650, -619, -38, -288, 410]
最大值为:650
最小值为:-696
共耗时:
0.0 s[-811, -93, -116, 436, -804, 431, -968, 632, -351, 863]
最大值为:863
最小值为:-968
共耗时:
0.0 s[-585, 406, -32, 940, 737, 745, 168, -606, -929, -631]
最大值为:940
最小值为:-929
共耗时:
0.0 s

分治法查找数组元素的最大值和最小值(python实现)相关推荐

  1. 算法设计——用分治法查找数组元素的最大值和最小值、用分治法实现合并排序、最小费用问题、树的最大连通分支问题(代码实现)

    代码链接:pan.baidu.com/s/15inIth8Vl89R1CgQ_wYc2g  提取码:gf13 算法分析与设计第 1 次实验 时间 2020.3.31 地点 软件大楼 127 实验名称 ...

  2. [python] 分治法查找数组元素的最大值和最小值

    分治法查找数组元素的最大值和最小值 分治法简介: 分治法从字面上的解释是"分而治之",就是把一个复杂的问题分成两个或者更多相同或者相似的子问题,再把子问题分成更小的子问题,直到最后 ...

  3. 用分治法查找数组元素的最大值和最小值

    算法分析: 代码实现: #include "stdio.h" #include "stdlib.h" #include "time.h" # ...

  4. 实验4.1对任意一个一维数组,从中找出数组元素的最大值和最小值并输出 。 要求: 1)数组有10个元素; 2)使用scanf函数实现数组元素的输入,输入前给出必要的提示信息; 3)输出时,首先输出数组

    /*SY4.1 题目描述 对任意一个一维数组,从中找出数组元素的最大值和最小值并输出 . 要求: 1)数组有10个元素: 2)使用scanf函数实现数组元素的输入,输入前给出必要的提示信息: 3)输出 ...

  5. Python算法——分治法查找数组中元素最小最大值

    要求: 给定数组a1,a2,a3,...an,找出数组中最大值和最小值.(数组中两两各不相同) 分析: 算法思想类似于上图,将数组两两分为一组,如果数组元素奇数个,就把最后一个元素单独分为一组,然后分 ...

  6. python查找序列元素的最大值和最小值_pthon基础知识(索引、切片、序列相加、乘法、检查元素是否是序列成员、计算序列长度、最大最小值)...

    序列   数据存储方式  数据结构 python 列表.元组.字典.集合.字符串 序列: 一块用于存放多个值的连续内存空间,并且按一定顺序排列,可以通过索引取值 索引(编号): 索引可以是负数 从左到 ...

  7. python中用于返回元组中元素最小值的是_• 编写函数,查找序列元素的最大值和最小值。给定一个序列,返回一个元组,其中元组第一个元素为序列最大值,第二个元素为序列最小值 。_学小易找答案...

    [计算题]编写函数 demo(m,n) ,接收两个正整数作为参数,返回一个元组,其中第一个元素为最大公约数,第二个元素为最小公倍数. (4.0分) [计算题]递归算法计算组合数.实现函数 cni(n, ...

  8. 查找数组元素最大值和最小值(分治法)

    1. 问题 给定一个数组,要求找出数组中的最大值和最小值,假设数组中的值两两各不相同 2. 思路 2.1 首元素比较法 定义变量 max.min , 分别将第一个元素分别赋值给这两个变量,然后依次遍历 ...

  9. Java实现利用分治法找到数组中的最大最小元素

    Java实现利用分治法找到数组中的最大最小元素 基本思路: 不断的寻找数组的左子数组和右子数组,当左子数组和右子数组的长度为1时,最大最小元素均为本身,当左子数组和右子数组的长度为2时,直接进行一次比 ...

最新文章

  1. python是如何进行内存管理的
  2. WEB应用数据验证指南
  3. sed替换每行最后一个字符
  4. python怎么安装模块-Python模块及其导入
  5. Android 使用jtds远程访问数据库
  6. SQL工作笔记-达梦数据库关于时间的函数
  7. 初学者学python,列表推导到zip()函数,必须会的五种技巧
  8. [Luogu] 软件包管理器
  9. App内存优化-实践
  10. 编辑器统一 快捷键
  11. [转载] wikipedia 维基百科 语料 获取 与 提取 处理 by python3.5
  12. ImportError: libcudart.so.10.0: cannot open shared object file
  13. 【活动报名】1024,一起过节,一起品网易/美团/贝壳/PingCAP/爱奇艺云原生实践干货!
  14. [国家集训队]矩阵乘法 整体二分
  15. 随记:PNP和NPN三极管区别
  16. 移动硬盘提示RAW的资料找到办法
  17. BNN网络量化与8bit量化之间关系
  18. Android 第三方 ROM
  19. usc week 5 计算几何(包含凸包) 队内练习题
  20. 系统注册表常用设置100例

热门文章

  1. DDR学习笔记---DDR3基本知识
  2. GBA 开发简单入门
  3. 【算法学习笔记】74. 枚举 状态压缩 填充方案 SJTU OJ 1391 畅畅的牙签袋(改)...
  4. 全球及中国二手车贷款行业运行分析及项目动态研究报告2021年版
  5. 爸爸,我们一起把这本书讲给更多人吧!
  6. 十年架构师留下最完整的Java学习路线,学完年薪40W
  7. 跟alex学python_跟Alex学Python之
  8. 单灯闪烁c语言程序,51单片机,C语言编程,控制指示灯闪烁的频率
  9. css firefox火狐浏览器下的兼容性问题
  10. 送书 |《Python数据分析从小白到专家》