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

算法第二次作业

1.关于我的找第k小数的分治算法,我的代码的实现是基于分治思想的随机化 Quickselect 算法,用来在无序数组中找到第 k 小的元素(第 k 小按 1-based 计数)。我是将问题分解:通过一次“划分(partition)”操作把数组分成两部分:小于等于 pivot 的部分和大于 pivot 的部分。然后根据 pivot 的位置判断目标元素落在哪一侧:若 pivot 恰好是区间内第 k 小(即 pivot 的秩等于 k),返回 pivot。若目标在左半部分,对左侧子区间递归求第 k 小。若目标在右半部分,对右侧子区间递归求第 (k - leftCount) 小。每次递归只处理一侧子区间,因此总体只访问数组的一个子集,平均时间复杂度为线性 O(n)。
2.关于我这算法,平均时间复杂度为O(n),最坏时间复杂度为O(n^2)。
3.分治法的核心思想主要是把大问题递归地分解成若干个相同或相似的子问题,分别解决这些子问题,然后把子问题的解合并成原问题的解。而其关键步骤通常是:划分(divide)、解决(conquer)、合并(combine)。分治强调“局部处理、递归合成”,适合能够通过局部信息构造全局解的场景。常见的模式有几种,如二分分治、随机化分治、三路/多区间划分、分治与动态规划结合。分治法的优点也很明显,思想直观、构造性强,把复杂问题拆解成较小子问题,便于理解与实现。同时在时间/空间有优势,许多场景下能把复杂度降到最优(如归并排序的 O(n log n)、Quickselect 的平均 O(n))。当然,有利必有弊,分治法的最坏情形可能退化,就像Quickselect/Quicksort 在极端划分下会退化为 O(n^2)。而且递归开销、重复计算等问题还是需要通过其他手段来优化。总的来说,分治是一把非常强的通用“工具”,它能把复杂问题拆解、局部优化、再合并成整体。而其真正的艺术在于如何选择划分策略、如何高效合并、以及在实现上用工程手段(随机化、阈值切换、数据结构支持)来降低最坏情况或常数开销。掌握分治不仅能写出高效算法,还能培养把复杂问题拆解成可管理模块的思维方式。

http://www.jsqmd.com/news/28723/

相关文章:

  • 个人电脑上的知识管理利器:访答知识库深度体验
  • 安卓手机搭建gitea
  • 总结2
  • 总结1
  • 总结3
  • 电子丨PCB设计中的“3W原则”和“20H原则”
  • 从廊桥分配学习优先队列
  • 电子丨导通占空比
  • [SWPUCTF 2022 新生赛]奇妙的MD5 WP
  • DELL笔记本加内存的流水账 - zhang
  • 静电服对人体是安全的
  • Scala反射API
  • CSP-S 2025 差点(貌似真的)坠机记
  • 一切的终点
  • 题解:AT_abc304_f [ABC304F] Shift Table
  • 题解:CF1936C Pokmon Arena
  • CSP-S 2023 游记
  • 软件技术基础的第二次作业
  • 补发周五日报10.31
  • CSP2025-S 游记
  • langgraph-reflection
  • 学习日报11.2
  • 2025CSP-S游记
  • 获取网页logo图标(ico文件)
  • 题解:P6811 「MCOI-02」Build Battle 建筑大师
  • [KaibaMath]1017 关于收敛数列与其子数列之间的关系定理的证明
  • Day9综合案例一
  • 以数据为中心的计算机视觉模型性能分析工具-FiftyOne -1
  • [Linux] Linux创建用户流程
  • Zabbix 数据库 history_uint 表损坏修复