当前位置: 首页 > 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.gsyq.cn/news/37861.html

相关文章:

  • 开始学深度学习!
  • LLaMA-Factory
  • 换一个思维解决问题:希望在转角
  • csp2025 总结
  • [省选联考]追忆——题目背景美化
  • 线程优先级
  • 使用 GeckoCircuits 设计 Buck 电源环路
  • Day29-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\reflect
  • 第十届中国大学生程序设计竞赛 哈尔滨站(CCPC 2024 Harbin Site)
  • https://heylink.me/tizihacks/
  • 2025CSP-J游记
  • 通达信:引用函数 - Leone
  • 项目架构
  • CSP总结
  • AI泡沫再思考:技术革命与投资狂潮的真相
  • [群表示论]基本概念
  • jenkins安装排错
  • 2025 年 11 月金属件去毛刺机,五金去毛刺机,自动去毛刺机厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 2025 年 11 月回转式风机厂家最新推荐,实力品牌深度解析采购无忧之选!
  • Ubunt 搭建Samba服务
  • 题解:AT_abc036_d [ABC036D] 塗り絵
  • 2025 年 11 月高压锅炉无缝钢管,方形无缝钢管,16Mn 无缝钢管厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • [论文笔记] Machine-Learning-Guided Selectively Unsound Static Analysis
  • 2025 年 11 月精密无缝钢管,合金无缝钢管,厚壁无缝钢管厂家最新推荐,实力品牌深度解析采购无忧之选!
  • 题解:AT_abc166_f [ABC166F] Three Variables Game
  • CCF CSP-S2 2025 游记
  • 【EF Core】“多对多”关系与跳跃导航
  • 2025.11.2博客
  • 为啥slmbuild的cutoff不能设得很大
  • 团队项目1-团队展示选题-图书管理系统