当前位置: 首页 > news >正文

给定一个数组,如何用最小的比较次数获得最大最小值

💡 类比:你有4个苹果,想找出最重和最轻的。

暴力法:先两两比重→选出最重的(3次),再两两比轻→选出最轻的(3次),总共6次。

✅ 优化方案:成对比较法(为什么更好?)

核心思想:

每次比较两个元素,同时得到这对元素的「最大」和「最小」
→ 用1次比较获取2个信息(而不是暴力法的1次比较只获取1个信息)

步骤详解(以[3, 5, 1, 2]为例):

第1步:分组比较(每组2个元素)
分组比较结果说明
(3, 5)3 vs 55 > 3→ 这对的最大值=5,最小值=3
(1, 2)1 vs 22 > 1→ 这对的最大值=2,最小值=1

关键2组共2次比较,得到4个信息(2个最大值+2个最小值)

第2步:比较所有「最大值」→ 找全局最大
  • 有2个最大值:5(来自第一组)和 2(来自第二组)
  • 比较:5 vs 2 → 5 > 2 → 全局最大值=5 ✅ 1次比较
第3步:比较所有「最小值」→ 找全局最小
  • 有2个最小值:3(来自第一组)和 1(来自第二组)
  • 比较:3 vs 1 → 3 > 1 → 全局最小值=1 ✅ 1次比较
✅ 总计比较次数:
  • 分组比较:2次
  • 比较最大值:1次
  • 比较最小值:1次
    → 2 + 1 + 1 = 4次比较

💡 对比暴力法:4次 vs 6次 → 少2次!

📊 为什么这是最优解?(用公式证明)

计算公式:

  • 当数组长度 n 是偶数时
    总比较次数 = 3n/2 - 2
  • 当数组长度 n 是奇数时
    总比较次数 = 3(n-1)/2 - 1(先处理第一个元素)
http://www.dtcms.com/a/618155.html

相关文章:

  • 个人网站免费源码大全南宁seo管理
  • Linux服务器崩溃急救指南:快速诊断与恢复
  • 后端服务发现配置
  • wordpress建的手机网站合肥信息网
  • 我爱学算法之—— 字符串
  • 关于Function JS加密加密(仅于问题分析)
  • mysql基础——视图
  • win系统做网站wordpress侧边文本轮播图片
  • 免费微商城平台官网一直在做竞价的网站是不是不需要做seo
  • 输出纹波实测:ASP3605在不同输入与负载条件下的稳定性表现
  • RAG向量索引-HNSW Hierarchical Navigable Small World 介绍
  • 沈阳做网站的企业重庆房产网站建设
  • 让老版 IntelliJ IDEA 2020.1.4 支持 JDK 17 启动 springboot3 项目
  • 网站开发逻辑商丘网站建设求职简历
  • [Linux网络——Lesson1.初识计算机网络]
  • 电子电气架构全解析
  • 5G技术:推动数字经济的下一个革命性浪潮
  • 5G与AI赋能智能制造:未来生产的双重驱动力
  • 从工业互联网到智慧城市:5G与物联网的跨界融合
  • 5G NR PBCH与MIB技术介绍
  • 怎么查询网站的点击量招商网站建设全包
  • TCN‑Transformer‑GRU(单输入‑单输出)在 MATLAB 中的实现思路与完整示例代码
  • 重庆市建设工程信息网站诚信分东莞海天网站建设
  • 【Linux】文件操作篇(二):实战理解硬链接与软链接
  • 在RK3568开发板嵌入式开发中,配置NFS服务是实现与Ubuntu虚拟机之间文件共享的常用方法
  • 使用mysql报Communications link failure异常解决
  • 【Linux驱动开发】Linux USB驱动架构详解
  • Linux服务器配置ssh免密登陆多台服务器、服务器别名配置
  • 百度推广青岛公司网站在线优化
  • java学习3-redis集成