当前位置: 首页 > 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.hskmm.com/?act=detail&tid=36935

相关文章:

  • 解决homebrew下载报错问题
  • 软考中级学习总结(5)
  • 软考中级学习总结(4)
  • 每日反思(2025_10_22)
  • docker: Error response from daemon: failed to set up container networking 解决办法
  • 实验2 现代C++编程初体验
  • CSP-S36
  • 新学期每日总结(第13天)
  • GCM(Galois/Counter Mode) 认证加密算法实现
  • 【学习笔记】slope-trick
  • 10.13-10.19学习做题笔记
  • 2025.10.22
  • yny计数题记录
  • 20232404 2025-2026-2 《网络与系统攻防技术》实验二实验报告
  • 1020302118兰逸霏的第一次作业
  • ubuntu 25.10 修改源 - ldx
  • pytorch学习笔记(1)
  • 20232318 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • 《中华人民共和国网络安全法》第二十一条这一核心考点
  • 嵌入式软件分层架构设计 - lucky
  • DP 基础题乱做
  • [题解]P4616 [COCI 2017/2018 #5] Pictionary
  • 二三级区别
  • 第九章-Where-1S-tHe-Hacker
  • CF 2023D Many Games
  • 2025.10.22考试记录
  • 2025多校冲刺CSP模拟赛7 题目分析
  • Typora的多端同步方案,如何多台计算机共享md文件?Windows和Mac通过定时执行git来同步markdown文件
  • Trie树
  • Seg T