飘逸的python - 大数据TopK问题的quick select解法

TopK问题,即寻找最大的K个数,这个问题非常常见,比如从1千万搜索记录中找出最热门的10个关键词.

方法一:

先排序,然后截取前k个数.

时间复杂度:O(n*logn)+O(k)=O(n*logn)。

方法二:

最小堆.

维护容量为k的最小堆.根据最小堆性质,堆顶一定是最小的,如果小于堆顶,则直接pass,如果大于堆顶,则替换掉堆顶,并heapify整理堆,其中heapify的时间复杂度是logk.

时间复杂度:O(k+(n-k)*logk)=O(n*logk)

方法三:

本文的主角.quick select算法.其实就类似于快排.不同地方在于quick select每趟只需要往一个方向走.

时间复杂度:O(n).

def qselect(A,k):
    if len(A)<k:return A
    pivot = A[-1]
    right = [pivot] + [x for x in A[:-1] if x>=pivot]
    rlen = len(right)
    if rlen==k:
        return right
    if rlen>k:
        return qselect(right, k)
    else:
        left = [x for x in A[:-1] if x<pivot]
        return qselect(left, k-rlen) + right

for i in range(1, 10):
    print qselect([11,8,4,1,5,2,7,9], i)
时间: 2024-10-27 13:16:42

飘逸的python - 大数据TopK问题的quick select解法的相关文章

Python大数据与机器学习之NumPy初体验

本文是Python大数据与机器学习系列文章中的第6篇,将介绍学习Python大数据与机器学习所必须的NumPy库. 通过本文系列文章您将能够学到的知识如下: 应用Python进行大数据与机器学习 应用Spark进行大数据分析 实现机器学习算法 学习使用NumPy库处理数值数据 学习使用Pandas库进行数据分析 学习使用Matplotlib库进行Python绘图 学习使用Seaborn库进行统计绘图 使用Plotly库进行动态可视化 使用SciKit-learn处理机器学习任务 K-Means聚

《零起点Python大数据与量化交易》中文PDF+源代码

下载:https://pan.baidu.com/s/1JWmwMFHZV0mYAyAl-HkPyw 更多资料:http://blog.51cto.com/3215120 <零起点Python大数据与量化交易>中文PDF+源代码中文PDF,带目录和书签,655页,文字可以复制粘贴.配套源代码. 本书是国内关于Python大数据与量化交易的原创图书. 如图: 原文地址:http://blog.51cto.com/4820691/2311108

Spark2.x+Python大数据机器学习视频课程

Spark2.x+Python大数据机器学习视频课程下载地址:https://pan.baidu.com/s/1imjFFStyjbRqyMtnboPgpQ 提取码: 32pb 本课程系统讲解如何在Spark2.0上高效运用Python来处理数据并建立机器学习模型,帮助读者开发并部署高效可拓展的实时Spark解决方案. 第一章.搭建Spark 2.x+Python开发环境及基本开发入门 1.快速环境搭建:导入Windows7虚拟机至VMWARE及启动系统和远程桌面连接2.快速环境搭建:Windo

零基础入门到精通:Python大数据与机器学习之Pandas-数据操作

在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴. 同时还要大数据学习群:784557197 实战练习 在Jupyter Notebook上执行以下代码: import pandas as pd df = pd.Data

Spark2.x+Python大数据机器学习实战视频教程

提取码:6o68 课程学习:https://pan.baidu.com/s/13kOswCBRsnXBJWsPGBZDqQ 机器学习是近二十来年兴起的多领域学科,机器学习算法可从数据中建立模型,并利用模型对未知数据进行预测.机器学习技术不断进步,应用相当广泛,例如推荐引擎.定向广告.需求预测.垃圾邮件过滤.医学诊断.自然语言处理.搜索引擎.诈骗侦测.证券分析.视觉辨识.语音识别.手写识别等. 为什么近年来机器学习变得如此热门,各大公司都争相投入?因为机器学习需要大量数据进行训练.大数据的兴起带来

Python大数据:信用卡逾期分析

# -*- coding:utf-8 -*- # 数据集成 import csv import numpy as np import pandas as pd import matplotlib.pyplot as plt #客户信息 basicInfo = pd.DataFrame.from_csv('datas/basicInfo_train.csv', header=0, sep=',', index_col=0, parse_dates=True, encoding=None, tupl

seo与python大数据结合给文本分词并提取高频词

最近研究seo和python如何结合,参考网上的一些资料,写的这个程序. 目的:分析某个行业(例如:圆柱模板)用户最关心的一些词,根据需求去自动调整TDK,以及栏目,内容页的规划 使用方法: 1.下载安装cygwin:http://www.cygwin.com/ 2.cygwin安装时别忘记安装curl,wget,iconv,lynx,dos2unix,Python等常用工具,特别是Python,这次主要就是用它了. 3.去下载jieba中文分词组件: 首选:https://github.com

pandas处理大数据的技巧

refer : https://yq.aliyun.com/articles/530060?spm=a2c4e.11153940.blogcont181452.16.413f2ef21NKngz# http://www.datayuan.cn/article/6737.htm https://yq.aliyun.com/articles/210393?spm=a2c4e.11153940.blogcont381482.21.77131127S0t3io - -- 大文本数据的读写有时候我们会拿到

3分钟解读2018年想转行大数据,该如何开始呢?

你在公司里表现很好,布置的任务总是能又好又快的完成,但两年来你的工资一直是1万3,多次跟领导提出加薪,结果领导每次都是哦哦哦知道了.你心里知道,现在的工作遇到了瓶颈,薪资想要有50%以上的增长已经很难了,能做的也只有转行. 问你个问题: 你是不是曾无数次下定决心要做大数据工作,但因为不知如何开始而放弃? 是不是曾经去面试过大数据工作,但因为没有经验屡屡碰壁? 你在公司里表现很好,布置的任务总是能又好又快的完成,但两年来你的工资一直是1万3,多次跟领导提出加薪,结果领导每次都是哦哦哦知道了. 你心