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

算法第二章实践作业

1.随机选择数组中的一个元素作为基准值,将数组划分为三部分:小于基准值的元素(左子数组)、等于基准值的元素(中间部分)、大于基准值的元素(右子数组)。若左子数组的长度 ≥ k,则第 k小的元素一定在左子数组中,递归处理左子数组;若左子数组长度 < k 且 左子数组长度 + 中间部分长度 ≥ k,则基准值就是第k小的元素;否则, k小的元素在右子数组中,递归处理右子数组,此时 k 需更新为 k - 左子数组长度 - 中间部分长度。当子数组长度为 1 时,直接返回该元素。
2.最好时间复杂度:O(n)。每次划分时,基准值恰好将数组分为大小均衡的两部分,递归深度为O(logn),每层处理的元素总数为O(n),因此总时间为O(n);
最坏时间复杂度:O(n²)。若每次划分选择的基准值是当前子数组中的最大或最小元素,会导致子数组规模仅减少1,此时递归深度为O(n),每层处理O(n)个元素,总时间为O(n²)。
3.分治法核心思想:分治法通过 “分解(将大问题拆分为相似子问题)→ 解决(递归处理子问题)→ 合并(子问题结果整合为原问题解)” 三步,将复杂问题简化。其关键在于子问题与原问题的相似性,以及划分后子问题规模的显著减小。分治法能有效降低问题复杂度,尤其适用于可均匀划分的问题,如快速排序、归并排序、二分查找,此时时间复杂度可从O(n²)降至 O(nlogn)或O(logn)。适合并行计算,子问题可独立处理。

http://www.gsyq.cn/news/27828.html

相关文章:

  • 软考中级学习总结(4)
  • docker: Error response from daemon: failed to set up container networking 解决办法
  • “化零为整”的智慧:内存池如何绕过系统调用和GC,构建性能的护城河
  • 实验2 现代C++编程初体验
  • 10.13-10.19学习做题笔记
  • 20232411 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • Lampiao 靶场
  • ubuntu 25.10 修改源 - ldx
  • pytorch学习笔记(1)
  • 1020302118兰逸霏的第一次作业
  • 论学习有感——驳学习(读书)无用论
  • 《中华人民共和国网络安全法》第二十一条这一核心考点
  • 第九章-Where-1S-tHe-Hacker
  • CMC-C# Visual Studio2022 中不能进入断点設置方法
  • 10月22日
  • Seg T
  • OOP-实验二
  • 2025年,哪些微信公众号排版工具能带来效率变革?
  • 我对软件工程的理解
  • 数据分析工具Pandas
  • switch的简单运用
  • 英语_阅读_The power of curiosity_待读
  • goden-eye 靶场
  • leetcode477. 汉明距离总和
  • Java中的修饰符
  • 行列式+矩阵树定理
  • 测试金字塔与测试左移:提升软件质量的双翼策略
  • 兼职MOer的幸福生活
  • 20232323 2025-2026-1《网络与系统攻防技术》实验二实验报告
  • [职业技术学院逃生]