分类目录:《算法设计与分析》总目录
相关文章:
· 顺序统计量:最大值与最小值
· 顺序统计量:期望为线性时间的选择算法
· 顺序统计量:最坏情况为线性时间的选择算法


在一个有nnn个元素的集合中,我们可以很容易地给出n−1n-1n−1次比较这个上界来确定其最小元素:依次遍历集合中的每个元素,并记录下当前最小元素。当然,最大值也可以通过n−1n-1n−1次比较找出来。

这的确就是我们能得到的最好结果吗。对于确定最小值问题,我们可以得到其下界就是O(n)O(n)O(n)次比较。对于任意一个确定最小值的算法,可以把它看成是在各元素之间进行的一场锦标赛。每次比较都是锦标赛中的一场比赛,两个元素中较小的获胜。需要注意的是,除了最终获胜者以外,每个元素都至少要输掉一场比赛。因此,我们得到结论:为了确定最小值,必须要做O(n)O(n)O(n)次比较。因此,从所执行的比较次数来看,上述算法就是最优的。

同时找到最小值和最大值

在某些应用中,我们必须要找出一个包含nnn个元素的集合中的最小值和最大值。例如,一个图形程序可能需要转换一组(x,y)(x, y)(x,y)数据,使之能适合一个矩形显示器或其他图形输出装置。为了做到这一点,程序必须首先确定每个坐标中的最小值和最大值。

就这一点来说,用渐近最优的Θ(n)\Theta(n)Θ(n)次比较,在nnn个元素中同时找到最小值和最大值的方法是显然的:只要分别独立地找出最小值和最大值,这各需要n−1n-1n−1次比较,共需2n−22n-22n−2次比较。

事实上,我们只需要最多3⌊n2⌋3\lfloor\frac{n}{2}\rfloor3⌊2n​⌋次比较就可以同时找到最小值和最大值。具体的方法是记录已知的最小值和最大值,但我们并不是将每一个输入元素与当前的最小值和最大值进行比较。这样做的代价是每个元素需要2次比较,而是对输入元素成对地进行处理。首先,我们将对输入元素相互进行比较,然后把较小的与当前最小值比较,把较大的与当前最大值进行比较。这样,对每两个元素共需3次比较。

如何设定已知的最小值和最大值的初始值依赖于nnn是奇数还是偶数。如果nnn是奇数,我们就将最小值和最大值的初值都设为第一个元素的值,然后成对地处理余下的元素。如果nnn是偶数,就对前两个元素做一次比较,以决定最小值和最大值的初值,然后与nnn是奇数的情形一样,成对地处理余下的元素。

下面来分析一下总的比较次数。如果nnn是奇数,那么总共进行3⌊n2⌋3\lfloor\frac{n}{2}\rfloor3⌊2n​⌋次比较。如果nnn是偶数,则是先进行一次初始比较,然后进行3∗n−223*\frac{n-2}{2}3∗2n−2​次比较,共3n2−2\frac{3n}{2}-223n​−2次比较。因此,不管是哪一种情况,总的比较次数至多是3⌊n2⌋3\lfloor\frac{n}{2}\rfloor3⌊2n​⌋。

算法设计与分析——顺序统计量:最大值与最小值相关推荐

  1. 算法设计与分析——顺序统计量:期望为线性时间的选择算法

    分类目录:<算法设计与分析>总目录 相关文章: · 顺序统计量:最大值与最小值 · 顺序统计量:期望为线性时间的选择算法 · 顺序统计量:最坏情况为线性时间的选择算法 选择算法指的是在一个 ...

  2. 算法设计与分析基础-笔记-上

    算法设计与分析基础 绪论 什么是算法 一系列解决问题的明确指令,对于符合一定规范的输入,能够在有限的时间内获得要求的输出. 例子:最大公约数:俩个不全为0 的非负整数 m m m和 n n n的最大公 ...

  3. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

  4. C++算法设计与分析课后习题(第三章)

    C++算法设计与分析课后习题[第三章] 前言 一.求2+22+222+2222+...+22...(n个2)...22(精确计算) 变量解释 运行截图 二.编写一个算法,其功能是给一维数组a输入任意6 ...

  5. 算法设计与分析复习笔记(上)

    简介:本文是博主在复习算法设计与分析的笔记,参考了北大算法设计与分析以及王晓东编著的<计算机算法设计与分析>第四版相关内容,如有错误,欢迎指正. 文章目录 设计技术 分治 动态规划 设计技 ...

  6. 算法设计与分析——分治法

    主要思想 (其实有这个思想也想不出来): 1.划分:整个问题划分成多个子问题 2.求解:求解各子问题的解 3.合并:合并子问题的解 (手说:"我会了",脑子:"不会&qu ...

  7. 算法设计与分析——蒙特卡罗算法(简单、通俗、易懂)C++

    算法设计与分析--蒙特卡罗算法(简单.通俗.易懂) 虽然都是文字描述,但都是较为通俗的语言,相信你看完应该能理解 在实际应用中会遇到一些问题,不论采用确定性算法还是随机性算法,都无法保证每次能到到正确 ...

  8. 软件算法设计与分析 期中复习

    软件算法设计与分析 期中复习 第四章 蛮力法 蛮力法/多项式求值 最近点对问题 蛮力法的优缺点 旅行推销商问题 背包问题 分配问题 穷举法特点 第五章 分治法 5.1 分治法的基本思想 5.2 寻找最 ...

  9. 哈工大威海算法设计与分析_【斯坦福算法分析和设计02】渐进分析

    点击上方蓝字,关注公众号 目录 1. The Gist 1.1 为什么要学它(Motivation) 1.2 High level idea 1.3 4个例子 2. Big-Oh Notation 2 ...

  10. 格雷码算法c语言实验报告,算法设计与分析实验报告

    本科生实验报告 课程名称:算法设计与分析 实验项目:递归和分治算法 实验地点:计算机系实验楼110 专业课:物联网1601学生.2016002105 学生姓名:于 指导员:郝晓丽 2018年5月4日 ...

最新文章

  1. 写一个不能被继承的类(友元的不可继承性)
  2. (转)Spring AOP的底层实现技术
  3. 使用graphite和grafana进行应用程序监控
  4. 【android】如何让WebView对Video标签的支持更强力
  5. operator.ne_Python operator.ne()函数与示例
  6. python numpy中对ndarry按照index(位置下标)增删改查
  7. 5.5.35 - mysql 同步_MySQL 5.6.35主从同步配置案例
  8. php eclipse 插件安装,Eclipse的PHP插件PHPEclipse安装和使用
  9. c语言蜂鸣器放音乐程序,蜂鸣器音乐程序设定C语言.doc
  10. html 属于mvvm框架,vue.js是mvvm框架吗
  11. App Store 上架审核指北【翻译】
  12. Unity3D_3dsMax-Vray材质导入
  13. 开发环境搭建——从零到实盘1
  14. 基于LSTM算法的股票预测
  15. Mysql拼接查询结果
  16. 《测绘综合能力》——海洋测绘
  17. 纯js 编canvas处理图片, 涂鸦笔、画布图片内容旋转 放大缩小 裁剪框 。兼容ie9及以上 谷歌、360、火狐浏览器
  18. 揭开程序员身上的「专业面纱」:非科班程序员,都来自哪些专业?
  19. C++从1~m数字中任取k个元素,求所有组合算法
  20. 开源的多媒体播放器MPV

热门文章

  1. WEEK-3 实战作业
  2. Linux 之四 Ubuntu 20.04 WiFi 无法使用、设置无法显示、远程桌面、常用快捷键、SSH、Git、PPA、FFmpeg 等各问题记录
  3. android实现箭头流程列表_Android弹出选项框及指示箭头动画选择
  4. 台式计算机显示不了无线网络,我是台式电脑,插上无线网卡怎么我的链接里不显示无线...
  5. linux 切换ked桌面,manjaro更换桌面环境
  6. kali Linux桌面环境切换
  7. 基于主从博弈的智能小区代理商定价策略及电动汽车充电管理
  8. CodeWarrior使用教程第一部分: 认识 CodeWarrior
  9. 即时通讯软件七大优势详解
  10. 一个在线的文件密码破解网站( rar文件、zip文件、pdf文件、ppt文件、xls文件)