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问题,即根据某个可排序的属性(通常是数值型),从数据集中找出最大的前N个记录。尽管这个问题相对简单,但要设计出高效的...
### 汉诺塔问题算法及其实现 #### 概述 汉诺塔问题是一个经典的递归算法案例,它不仅在计算机科学领域有着广泛的应用,同时也被用来教授递归思想的基础知识。这个问题最早由法国数学家Édouard Lucas于1883年提出,...
在Spark中,TopN算法的实现方式多种多样,主要分为针对唯一键的TopN、非唯一键的TopN以及在每个Group内部的TopN。下面将详细解释这些概念和实现方法。 一、唯一键TopN 唯一键TopN算法适用于处理键值对数据,目标是...
总结来说,"tpn.rar_TPN_topN"这个压缩包可能提供了TopN算法的堆实现,这对于理解和处理大数据中的TopN问题非常有价值。通过学习和理解这个实现,开发者可以更好地优化自己的数据处理流程,提高算法效率,特别是在...
基于用户多样性偏好的top-N推荐算法 基于用户多样性偏好的top-N推荐算法是指一种推荐算法,该算法主要考虑用户对项目的不同偏好和多样性需求,对推荐结果的准确性和多样性进行平衡。该算法通过计算用户对项目的评分...
【描述】:该文档主要介绍了编程面试中常见的Top K算法问题,包括其实现和应用。文章由July、zhouzhenren和yansha共同编写,并提到了在2011年05月08日的更新。文档通过之前的寻找最小k个数的问题作为铺垫,探讨了Top...
【题目】内存中的行列结构的数据集,存在主键 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++) 作为一名IT大师,我将为您提供详细的IT知识点,基于给定的文件信息。 标题解读 牛客面试算法top101(JAVA和C++)是指牛客网提供的面试算法题库中的top101道题,涵盖了JAVA和C++两...
在上述文档中,提到了三种不同的Top K算法实现: 1. **寻找最小的第 k 个数**: 这个实现使用了快速选择算法,它是快速排序的一个变体,但目标不是完全排序数组,而是找到第 k 小的元素。通过选择一个枢轴元素并...
对于逆波兰式的算法实现,我们可以遵循以下步骤: 1. 首先,我们需要创建一个运算符栈。这个栈遵循“越靠近栈顶,优先级越高”的原则。这意味着高优先级的运算符会位于低优先级运算符之上。 2. 接着,我们读入一个...
在C++中实现Dijkstra算法,通常涉及到数据结构如优先队列(优先级队列常采用二叉堆实现)以及邻接矩阵或邻接表来存储图的信息。 Dijkstra算法的核心思想是贪心策略,每次选择当前未访问节点中距离起点最近的一个...
这时,可以采用外部排序算法,如归并排序,或者使用近似TopN算法,如Min-Heap,牺牲一定的精度来降低内存消耗。 总结来说,Spark在大数据环境下计算TopN提供了多种策略和优化手段。通过理解Spark的核心机制和数据...
本项目提供了一个Java实现的用户协同过滤算法,包括数据集处理、算法实现以及评价指标——均方根误差(Mean Absolute Error,MAE)的计算。 1. **数据集**: 数据集来源于MovieLens,这是一个广泛用于推荐系统研究...
实验三 算符优先分析算法的设计与实现 在编译原理领域中,算符优先分析算法是一种重要的语法分析方法,本实验的目的是设计和实现算符优先分析算法,以判断一个表达式是否正确。 一、 实验目的 本实验的目的是通过...