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

第二次算法作业

基本思路
该算法采用分治策略来寻找数组中第k小的元素。首先从数组中随机选择一个基准元素,然后将数组划分为三个部分:小于基准的元素、等于基准的元素和大于基准的元素。根据k值所在的范围,决定在哪个子数组中继续递归查找,或者直接返回基准值。

伪代码表示
function findKthSmallest(arr, k):
if arr.length == 1:
return arr[0]

pivot = 随机选择arr中的一个元素
smaller = [x for x in arr if x < pivot]
equal = [x for x in arr if x == pivot]
larger = [x for x in arr if x > pivot]if k <= len(smaller):return findKthSmallest(smaller, k)
elif k <= len(smaller) + len(equal):return pivot
else:return findKthSmallest(larger, k - len(smaller) - len(equal))

时间复杂度分析
最好情况
在理想情况下,每次划分都能将问题规模减半。此时时间复杂度为O(n),其中n是数组的大小。这种情况发生在基准值每次都能将数组均匀划分时。
最坏情况
在最坏情况下,每次划分只能排除一个元素。此时时间复杂度为O(n²)。这种情况发生在基准值总是选择为当前数组中的最小或最大元素时。

学习体会与思考
通过学习分治法,我深刻体会到将复杂问题分解为简单子问题的重要性。分治法的核心在于分而治之,通过递归地将大问题分解为小问题,最终合并结果得到原问题的解。
这种算法设计思想不仅适用于计算机科学,在生活中也同样有用。面对复杂任务时,我们可以将其分解为多个小任务,逐个解决,最终完成整个大任务。分治法教会我们如何用系统化的方式处理复杂问题,这是本章学习中最有价值的收获。

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

相关文章:

  • NOIP 2025 游记 退役记
  • 一个万古常青的、小而美的输入法
  • 开始学深度学习!
  • 守护线程--daemon
  • 换一个思维解决问题:希望在转角
  • 条件表达式中的赋值问题
  • csp2025 总结
  • 2025 CSP
  • Jenkins-CICD项目自动化部署
  • 使用Stream API重构你的数据处理
  • js实现页面弹框,每天没个浏览器只在第一次访问会有弹框
  • [省选联考]追忆——题目背景美化
  • 多线程封装
  • 线程优先级
  • 使用 GeckoCircuits 设计 Buck 电源环路
  • 第k小的数的分治算法
  • Day29-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\reflect
  • k8s-Pod中的网络通信(3)
  • 一个灵感:思维的断章
  • 第十届中国大学生程序设计竞赛 哈尔滨站(CCPC 2024 Harbin Site)
  • CSP-S 回顾
  • https://heylink.me/tizihacks/
  • 2025CSP-J游记
  • 通达信:引用函数 - Leone
  • 20231427田泽航第七周预习报告
  • CSP总结
  • AI泡沫再思考:技术革命与投资狂潮的真相
  • [群表示论]基本概念
  • P14362 [CSP-S 2025] 道路修复
  • 10.30总结