`
xiang37
  • 浏览: 429482 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

TopN问题的算法实现

 
阅读更多

TopN指的是从已经存在的数组中,找出最大(或最小)的前n个元素。

 

算法的核心就是循环数组,并将当前的最大的n个数存入一个数组topN[n]中,插入结束后对数组进行排序。当循环到第k+1个数时,与topN[0]比较,若比topN[0]大,则替换topN[0]为第k+1个数,并对topN[n]排序;若比topN[0]小,则比较下一个数。

下面是实现方法:

 

package com.xiva.cms.data.test;

import java.util.Date;
import java.util.Random;

import com.xiva.cms.data.util.SortService;

/**
 * Top N 算法
 * @author XIVA
 *
 */
public class TopNAlgorithm
{
    public static int[] datas = new int[100000000];
    
    /**
     * 生成测试数据
     */
    public static void genarateData()
    {
        Random random = new Random(new Date().getTime());
        
        for (int i=0; i < datas.length; i++)
        {
            
            datas[i] = random.nextInt(1000000000);
        }
    }
    
    /**
     * main 方法
     * @param args
     */
    public static void main(String[] args)
    {
        SortService<Integer> sortSrv = new SortService<Integer>();
        int topN = 100;
        Integer[] topNData = new Integer[topN];
        
        System.out.println("Start genarate Data.");
        TopNAlgorithm.genarateData();
        System.out.println("End genarate Data.");
        
        // 初始化 Top N
        for(int i=0; i < topN; i++)
        {
            topNData[i] = 0;
        }
        
        System.out.println("Search for top N Starting.");
        
        // 获取TopN
        for ( int i = 0; i < datas.length; i++)
        {
            int num = datas[i];
            
            if (num % 1000000 == 0)
            {
                System.out.println("Search for top N index:" + i);
            }
            
            if (topNData[0] < num)
            {
                topNData[0] = num;
                
                // 使用折半插入排序
                sortSrv.binaryInsertSort(topNData, 1);
            }
        }
        
        for (int i = 0; i < topNData.length; i++)
        {
            System.out.println("Top N:" + topNData[i]);
        }
        
        System.out.println("Search for top N ended.");
        
    }
}

 

分享到:
评论

相关推荐

    寻找最优的topn算法

    ### 寻找最优的TopN算法 #### 一、概要与问题定义 在处理大量数据时,经常需要解决TopN问题,即根据某个可排序的属性(通常是数值型),从数据集中找出最大的前N个记录。尽管这个问题相对简单,但要设计出高效的...

    汉诺塔问题算法以及实现

    ### 汉诺塔问题算法及其实现 #### 概述 汉诺塔问题是一个经典的递归算法案例,它不仅在计算机科学领域有着广泛的应用,同时也被用来教授递归思想的基础知识。这个问题最早由法国数学家Édouard Lucas于1883年提出,...

    Spark的TopN示例

    在Spark中,TopN算法的实现方式多种多样,主要分为针对唯一键的TopN、非唯一键的TopN以及在每个Group内部的TopN。下面将详细解释这些概念和实现方法。 一、唯一键TopN 唯一键TopN算法适用于处理键值对数据,目标是...

    tpn.rar_TPN_topN

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

    基于用户多样性偏好的top-N推荐算法.pdf

    基于用户多样性偏好的top-N推荐算法 基于用户多样性偏好的top-N推荐算法是指一种推荐算法,该算法主要考虑用户对项目的不同偏好和多样性需求,对推荐结果的准确性和多样性进行平衡。该算法通过计算用户对项目的评分...

    TOP,K算法.pdf

    【描述】:该文档主要介绍了编程面试中常见的Top K算法问题,包括其实现和应用。文章由July、zhouzhenren和yansha共同编写,并提到了在2011年05月08日的更新。文档通过之前的寻找最小k个数的问题作为铺垫,探讨了Top...

    题目内存中的行列结构的数据集,存在主键 k,求 TopN 算法 上述题目在多核环境下的优化 数据集大小为 1TB,分布规律未

    【题目】内存中的行列结构的数据集,存在主键 k,求 TopN 算法 上述题目在多核环境下的优化 数据集大小为 1TB,分布规律未知。存储在某存储服务上,以 get(min_k, max_k) 接口获取数据,求多台服务器的计算方案 原题...

    简单背包问题算法(非递归实现的)

    算法实现简单背包问题非递归解决方案 本文档将详细介绍简单背包问题的非递归实现算法。该算法旨在解决背包问题,即如何在有限的背包容量下,选择合适的物品,使得总价值达到最大。 算法原理 简单背包问题可以描述...

    二叉树非递归遍历算法实现

    这段代码展示了二叉树的非递归遍历算法实现,包括前序遍历、中序遍历和后序遍历。在二叉树的遍历中,递归是一种直观且常见的方法,但非递归遍历则可以避免调用栈过深导致的溢出问题,适用于大型数据结构。 首先,...

    多模式匹配算法实现及测试代码

    这种算法的时间复杂度为O(m + n),其中m是模式字符串的总长度,n是文本字符串的长度。 接着,我们讨论**Wu-Manber (WM) 算法**。与AC算法不同,WM算法是基于确定有限自动机(Deterministic Finite Automaton, DFA)...

    牛客面试算法top101(JAVA和C++)

    牛客面试算法top101(JAVA和C++) 作为一名IT大师,我将为您提供详细的IT知识点,基于给定的文件信息。 标题解读 牛客面试算法top101(JAVA和C++)是指牛客网提供的面试算法题库中的top101道题,涵盖了JAVA和C++两...

    TOP,K算法.docx

    在上述文档中,提到了三种不同的Top K算法实现: 1. **寻找最小的第 k 个数**: 这个实现使用了快速选择算法,它是快速排序的一个变体,但目标不是完全排序数组,而是找到第 k 小的元素。通过选择一个枢轴元素并...

    逆波兰式的算法实现程序

    对于逆波兰式的算法实现,我们可以遵循以下步骤: 1. 首先,我们需要创建一个运算符栈。这个栈遵循“越靠近栈顶,优先级越高”的原则。这意味着高优先级的运算符会位于低优先级运算符之上。 2. 接着,我们读入一个...

    Dijkstra算法 C++实现源码

    在C++中实现Dijkstra算法,通常涉及到数据结构如优先队列(优先级队列常采用二叉堆实现)以及邻接矩阵或邻接表来存储图的信息。 Dijkstra算法的核心思想是贪心策略,每次选择当前未访问节点中距离起点最近的一个...

    大数据spark计算TopN的素材.rar

    这时,可以采用外部排序算法,如归并排序,或者使用近似TopN算法,如Min-Heap,牺牲一定的精度来降低内存消耗。 总结来说,Spark在大数据环境下计算TopN提供了多种策略和优化手段。通过理解Spark的核心机制和数据...

    基于用户协同过滤算法代码实现Java

    本项目提供了一个Java实现的用户协同过滤算法,包括数据集处理、算法实现以及评价指标——均方根误差(Mean Absolute Error,MAE)的计算。 1. **数据集**: 数据集来源于MovieLens,这是一个广泛用于推荐系统研究...

    实验三 算符优先分析算法的设计与实现.doc

    实验三 算符优先分析算法的设计与实现 在编译原理领域中,算符优先分析算法是一种重要的语法分析方法,本实验的目的是设计和实现算符优先分析算法,以判断一个表达式是否正确。 一、 实验目的 本实验的目的是通过...

Global site tag (gtag.js) - Google Analytics