机器学习|快速排序思想求topk
时间:2022-05-06
本文章向大家介绍机器学习|快速排序思想求topk,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
01
—
Topk by quicksort
问题是求出数据集中,按照某个规则定义的元素大小,取前k个元素。
为了简化起见,直接求数值型数组的前k个最大元素。
'''
topk by quick sort
assert: k <= len(arr)
'''
def topkByQuickSort(k,arr=None):
topk=[]
return quickSort(0,len(arr)-1,k,topk,arr)
'''
quick sort to find top k for an unsorted array
'''
def quickSort(lo,hi,k,topk,arr):
# this is worst condition for topk
if lo>=hi:
index = len(arr) - k
while index < len(arr):
topk.append(arr[index])
index+=1
return topk
#following basic quick sort idea
i = lo
j = hi
pivot = arr[lo]
while i < j:
while j > i and pivot <= arr[j]:
j-=1
arr[i] = arr[j]
while i < j and arr[i] < pivot:
i+=1
arr[j] = arr[i]
#put pivot to i index
arr[i] = pivot
# following is important, if i less than length of array minus k, then iterator to high part;
# elif bigger, then iterator to low part
# else equal, get it!
if i < len(arr) - k :
quickSort(i+1,hi,k,topk,arr)
elif i > len(arr) - k:
quickSort(lo,i-1,k,topk,arr)
else:
index = i
while index < len(arr):
topk.append(arr[index])
index+=1
return topk
02
—
Test
topk = topkByQuickSort(1,arr=[3,5,1,6,9,8,5,12])
[print(item) for item in topk]
12
topk = topkByQuickSort(2,arr=[3,5,1,6,9,8,5,12])
[print(item) for item in topk]
9
12
topk = topkByQuickSort(8,arr=[32,5,7,6,13,9,8,4,12])
[print(item) for item in topk]
5
7
6
8
9
12
13
32
03
—
总结
快速排序思想求topk,优点是时间复杂度小,缺点是大数据时,全部一次加入内存放不下时,不太适合用这种方法,可以基于堆排序思想求topk,详细请参考:
机器学习|海量数据求top K 之最小堆实现
- 防止连接Mysql超时,JDBC探活配置
- 剑指offer——面试题10输入一个十进制整数,统计其中二进制1的个数
- 剑指offer——面试题9计算斐波纳切第n个数
- 剑指 offer——面试题8求旋转数组的最小值
- MYSQL INNODB表压缩
- 剑指offer——年龄排序问题
- Mysql Group Replication介绍
- 剑指offer——快速排序
- 架构高性能网站秘笈(四)——反向代理缓存
- 架构高性能网站秘笈(一)——了解衡量网站性能的指标
- MYSQL5.6&5.7编译安装
- 架构高性能网站秘笈(三)——浏览器缓存
- 剑指 offer代码解析——面试题39判断平衡二叉树(高效方法)
- 跟着柴毛毛学Spring(4)——面向切面编程![这里写图片描述](http://img.blog.csdn.net/20171031111402095)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法