`

python实现最小堆(TOP N 问题)

阅读更多

top N问题可以使用最小堆来实现

一下程序实现了从用户输入的一系列数字中,选出最大的N个数字(不是堆排序)

 

#!/usr/bin/env python
#coding=utf-8
#heapsort.py
import sys
import stdinInput
def heapsort(sortarray,topN):
    sortarraylen=len(sortarray)
    heaparray=[]
    for i in xrange(0,sortarraylen):
        if len(heaparray)<=topN:
            heaparray.append(sortarray[i])
            heapinsertadjust(heaparray,i)
        else:
            if sortarray[i]>heaparray[0]:
                heaparray[0]=sortarray[i]
                heapdeleteadjust(heaparray,0)
    return heaparray
#调整初始最小堆
def heapinsertadjust(sortarray,beginnode): 
    rootnode=beginnode;
    while(rootnode>0):
        parentNode=(rootnode-1)/2
        if sortarray[rootnode]<sortarray[parentNode]:
            sortarray[rootnode],sortarray[parentNode]=sortarray[parentNode],sortarray[rootnode]
        rootnode=parentNode
#最小堆构造完成后,再来满足条件的数据就需要删除掉节点
def heapdeleteadjust(sortarray,nodeid):
    currentminid=nodeid
    sortarraylen=len(sortarray)
    if (nodeid*2+1)>=sortarraylen:
        return;
    if (nodeid*2+2)<sortarraylen:
        currentminid=currentminid*2+1 if sortarray[currentminid*2+1]<sortarray[currentminid] else currentminid
        currentminid=nodeid*2+2 if sortarray[nodeid*2+2]<sortarray[currentminid] else currentminid
        if currentminid!=nodeid:
            sortarray[currentminid],sortarray[nodeid]=sortarray[nodeid],sortarray[currentminid]
            heapdeleteadjust(sortarray,currentminid)
        else:
            return
    else:
        if sortarray[currentminid*2+1]<sortarray[currentminid]:
            sortarray[currentminid*2+1],sortarray[currentminid] = sortarray[currentminid],sortarray[currentminid*2+1]
        return

if __name__=='__main__':
    style=5
    try:
        style=int(sys.argv[1]) 
    except:
        print "input argv error, use 5 as Number of bottom"

    stdinInput.stdinInput()
    intsortArrays=heapsort(stdinInput.intsortArrays,style)
	
    print intsortArrays

 

分享到:
评论

相关推荐

    python topN 取最大的N个数或最小的N个数方法

    尽管本篇主要介绍了topN分析的基本思路和在Python中的实现方法,但是针对更复杂的数据集和业务需求,还可能需要进行进一步的数据处理和分析。例如,在使用大数据集进行topN分析时,可能需要考虑内存使用效率、数据...

    tpn.rar_TPN_topN

    总结来说,"tpn.rar_TPN_topN"这个压缩包可能提供了TopN算法的堆实现,这对于理解和处理大数据中的TopN问题非常有价值。通过学习和理解这个实现,开发者可以更好地优化自己的数据处理流程,提高算法效率,特别是在...

    spark mllib 协同过滤推荐算法(ALS) python 实现 完整实例程序

    在本实例中,我们将探讨如何使用 PySpark(Python 接口)实现基于 MLlib 的协同过滤推荐算法——交替最小二乘法(Alternating Least Squares, ALS),用于用户和物品的推荐。 协同过滤是推荐系统中最常用的方法之一...

    python算法数据结构课程视频含代码之堆2G

    #### Python中的堆实现 Python标准库中的`heapq`模块提供了基于堆队列算法的实现,可以用来构建最小堆。由于Python中没有内置的最大堆,可以通过一些技巧来实现最大堆的功能。 ##### heapq模块的基本操作: 1. **...

    堆排序python代码.rar

    在Python中,我们可以利用内置的数据结构heapq模块来轻松实现堆排序。下面将详细介绍堆排序的原理、Python实现以及如何使用heapq模块。 ### 堆排序的基本概念 堆排序是一种树形选择排序,它利用完全二叉树(即每个...

    topk_K._python_

    `topk.py` 文件很可能包含了实现这一功能的Python代码。它可能使用了各种方法,比如优先队列(heapq库)、排序或者选择算法。其中,一种常见的高效解决方案是使用最小堆(min-heap),因为它可以在O(n log k)的时间...

    浅谈Python实现贪心算法与活动安排问题

    在实际编程中,贪心算法通常用于处理一些复杂度较低的问题,如最小生成树、背包问题等。然而,在面对具有回溯特性的问题时,如八皇后问题、旅行商问题,贪心算法往往无法提供满意的结果,这时可能需要使用动态规划或...

    20道Python算法题及答案

    堆在解决最大/最小元素问题和Top-K问题时非常有效。 11. **位运算**:Python支持位运算,如按位与、或、异或和位移,它们在某些算法中可以提高效率,如快速幂、哈希表的冲突解决等。 12. **链表操作**:虽然Python...

    python简单推荐系统(含完整代码).pdf

    相似度计算用于找出评分数据中相似的用户或物品,而top_matches()函数用于找到与指定用户或物品最相似的top N个结果。 ### 9. 编码和解码 由于文件是通过OCR技术扫描出来的,存在一些文字识别错误,这说明了在处理...

    基于python与矩阵分解实现推荐算法

    1. Top-N推荐:根据预测评分,为每个用户推荐评分最高的N个物品。 2. 基于相似度的推荐:计算用户与物品的相似度,为用户推荐与其喜好最接近的物品。 六、实际应用 推荐系统在电商、音乐、电影等领域广泛应用。通过...

    Leetcode刷题笔记-堆

    本文将深入探讨堆相关的基础知识及其在Leetcode中的具体应用,特别是针对“Top K”问题的经典解决方案。 #### 堆的基础概念 堆是一种特殊的完全二叉树数据结构,具有以下特性: 1. **必须是完全二叉树**:除了最后...

    Python heapq使用详解及实例代码

    `heapq` 是 Python 内置的一个模块,它提供了一系列基于最小堆的数据结构操作。在 Python 中,`heapq` 模块实现了堆队列算法,也称为优先队列算法。最小堆是一种特殊的树形数据结构,其中每个父节点的关键值都不大于...

    最大K个数问题的Python版解法总结

    在Python中,尽管标准库没有提供直接实现最大堆的模块,但可以利用`heapq`库的最小堆功能。由于一个数组的每个元素取反后,最大值变为最小值,因此可以将数组元素取反,用`heapq`的`heappush()`和`heappop()`函数...

    最优装载 有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。

    该问题通常涉及一个或多个约束条件下的最大化或最小化目标函数。在这个特定的情境中,我们需要考虑如何将一批集装箱装载到一艘具有特定载重量限制的轮船上,使得装载的集装箱数量尽可能多。 #### 二、问题描述 ...

    Algorithm-pydsa.zip

    8. **堆数据结构**:如最大堆和最小堆,它们在优先队列、Top-K问题等场景中发挥重要作用。 9. **递归与分治策略**:递归是解决问题的一种强大工具,例如在计算阶乘、斐波那契数列中。分治策略则是将大问题分解为小...

    单源最短路径--分支限界法

    "单源最短路径--分支限界法" 单源最短路径是图论中的一种常见问题,它是指从一个源顶点到所有其他顶点的最短路径长度。这里的长度是指路上各边权...通过了解该算法的原理和实现,我们可以更好地解决单源最短路径问题。

    K近邻算法实现

    #### 二、Python实现KNN算法 在实现KNN算法时,我们通常需要完成以下几个步骤: 1. **数据准备**:获取训练数据集和测试数据集。 2. **距离计算**:计算待分类样本与训练集中的每个样本之间的距离。 3. **选择K个...

    程序员面试编程问题 Programming Interview Problems 2021

    - 找零问题是给定一系列面额的硬币,找出最小数量的硬币组合以构成某个特定金额。 - 动态规划方法适用于解决这类问题。 **Solution1: 动态规划, 自顶向下 (Top-down), O(nv)时间复杂度** ```python def min_coins...

Global site tag (gtag.js) - Google Analytics