该算法要解决的问题是:在线性时间内找到一个无序序列中第 kk 大的数。(或许,该程序最重要的用途是找出中间值——也就是该序列完成排序后位于中间 (1+n)/2(1+n)/2 的元素值)。有趣的是,稍加改造,它也能找出所有比目标元素小的元素。

def partition(seq):pi, seq = seq[0], seq[1:]                 # 选取并移除主元lo = [x for x in seq if x <= pi]hi = [x for x in seq if x > pi]return lo, pi, hidef select(seq, k):lo, pi, hi = partition(seq)m = len(lo)if m == k: return piif m < k: return select(hi, k-m-1)return select(lo, k)

对 select 稍加改造,使其返回前 k 小的所有元素:

def select(seq, k):lo, pi, hi = partition(seq)m = len(lo)if m == k: return loif m < k:lo.append(pi)return lo+select(hi, k-m-1)return select(lo, k)

分析与说明

  • (1)选取法(也称快速选取法,quickselect)由算法设计界的名家 C.A.R. Hoare 所提出,同时他也是快排的提出者(时年 26 岁)。

  • (2)快速选取法其实代表的是某种剪枝式的遍历操作——在递归树中找出一条通往第 k 小元素的路径。

Python 数据结构与算法——选取算法(TopK)相关推荐

  1. Python 数据结构与算法——快排

    Python 数据结构与算法--选取算法(TopK) 如果说快速选取法所代表的是剪枝式的遍历操作--在递归树中找出一条通往第 k<script type="math/tex" ...

  2. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  3. python 数据结构与算法——排序

    文章目录 排序的分类 排序的复杂度 python 实现 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快排 树排序 线性时间排序算法 计数排序 桶排序 桶排序的复杂度分析 基数排序 排序的 ...

  4. Python天天美味(32) - python数据结构与算法之堆排序

    1. 选择排序 选择排序原理是先选出最小的数,与第一个数交换,然后从第二个数开始再选择最小的数与第二个数交换,-- def selection_sort(data):     for i in ran ...

  5. python数据结构与算法13_python 数据结构与算法 (13)

    python 数据结构与算法 (13) 选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 ...

  6. python数据结构算法 北京大学_北京大学公开课《数据结构与算法Python版》

    之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版. 看了一些公开课后,今天特向大家推荐北京大学的这门课程:<数据结构与算法Python版>. 课程概述 很多同学 ...

  7. python leetcode_leetcode 介绍和 python 数据结构与算法学习资料

    for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...

  8. Python数据结构与算法(一)--算法和时间复杂度

    最近下班一直在学习和总结Python,最近在整理数据结构和算法这方面的知识,虽然大学的时候也学过数据结构(c语言版本),但是工作这几年一直在做前端所以,这方面的知识也忘了差不多,所以就想整理一下,方便 ...

  9. python数据结构和算法讲解_【学习】python数据结构和算法

    二.算法分析 2.2 什么是算法分析 大O表示法 image.png 2.3 python数据结构的性能 列表 image.png 字典 image.png 说一下list[index]的o(1)原理 ...

最新文章

  1. 长沙网络推广浅析新站怎么做会对排名提升更有帮助?
  2. 关于js中的时间——计算时间差等
  3. css规则的样式构成,Css 基本的规则写法
  4. windows下caffe+CPUOnly实现MNIST手写分类
  5. Caffe + Ubuntu 14.04 64bit + CUDA6.5 + 无GPU 配置
  6. Android商城开发系列(十一)—— 首页秒杀布局实现
  7. 神经网络控制系统的特点,神经网络控制的优点
  8. 《机器学习》周志华第三章课后习题
  9. lzg_ad:XPE下中文字体相关问题
  10. 【PTA】【Python】【拼题A 2022 跨年挑战赛】投票
  11. cesium根据两点获取航向角(heading)与俯仰角(pitch)
  12. 以HT82K629B为主控的程序员专用CV键盘(无需代码烧写)
  13. 在金融科技的诸多技术领域,目前最引人瞩目的当属区块链
  14. 2023年房地产地段研究报告
  15. Unity学习笔记-I2 localization
  16. 50. 残差网络(ResNet)代码实现
  17. C++ 结构体、成员函数、结构体指针的使用
  18. 安装了office 2019系列软件后-如何安装OneNote 2016软件??
  19. HiJackThis(HJT)日志在线自动分析服务
  20. 【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)

热门文章

  1. 简要描述安装配置apache的一个开源Hadoop集群
  2. 设计模式(四)行为型模式
  3. Learn OpenGL(七)——OpenGL中使用着色器的基本步骤及GLSL渲染简单示例
  4. Linux下 C++遍历目录文件
  5. MATLAB常用的基本数学函数
  6. im2col函数解析
  7. java window的对象方法_Javascript:window对象的方法
  8. MYSQL Innodb逻辑存储结构
  9. Python基础之初识类和对象
  10. 练习:查找指定目录(包括子目录)下的视频(格式为.mp4,.rmvb,.avi),并将目录存放在一个文件中...