什么是堆】
概念:堆是一种特殊的二叉树,具备以下两种性质
1)每个节点的值都大于(或者都小于,称为最小堆)其子节点的值
2)树是完全平衡的,并且最后一层的树叶都在最左边
这样就定义了一个最大堆。
那么下面介绍二叉堆:二叉堆是一种完全二叉树,其任意子树的左右节点(如果有的话)的键值一定比根节点大,上图其实就是一个二叉堆。
你一定发觉了,最小的一个元素就是数组第一个元素,那么二叉堆这种有序队列如何入队呢?看图:
假设要在这个二叉堆里入队一个单元,键值为2,那只需在数组末尾加入这个元素,然后尽可能把这个元素往上挪,直到挪不动,经过了这种复杂度为Ο(logn)的操作,二叉堆还是二叉堆。
那如何出队呢?也不难,看图:
出队一定是出数组的第一个元素,这么来第一个元素以前的位置就成了空位,我们需要把这个空位挪至叶子节点,然后把数组最后一个元素插入这个空位,把这个“空位”尽量往上挪。这种操作的复杂度也是Ο(logn)。
【适用范围】
海量数据前n大,并且n比较小,堆可以放入内存
【基本原理及要点】
最大堆求前n小,最小堆求前n大。方法,比如求前n小,我们比较当前元素与最大堆里的最大元素,如果它小于最大元素,则应该替换那个最大元 素。这样最后得到的n个元素就是最小的n个。适合大数据量,求前n小,n的大小比较小的情况,这样可以扫描一遍即可得到所有的前n元素,效率很高。
【扩展】
双堆,一个最大堆与一个最小堆结合,可以用来维护中位数。
【问题实例】
1)100w个数中找最大的前100个数。
用一个100个元素大小的最小堆即可。
转自:http://blog.csdn.net/hit_kongquan/article/details/6255677
相关推荐
海量数据处理是指基于海量数据上的存储、处理、操作,解决方案包括巧妙的算法搭配适合的数据结构,如 Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie 树,以及大而化小、分而治之的策略。根据数据处理的场景,...
### 海量数据处理知识点详解 #### 一、海量数据处理面试题解析 **1、海量日志数据,提取出某日访问百度次数最多的那个IP** - **问题概述**: 给定一天内的海量日志数据,从中找出访问百度次数最多的IP地址。 - **...
海量数据处理是互联网公司技术面试中的一个重要环节,它主要考察应聘者处理大规模数据集的能力,以及对各种存储、计算、排序算法的理解和应用。以下针对提供的文件内容,提炼出相关的知识点。 首先,海量数据处理的...
### 常见的海量数据处理方法 在大数据时代,如何高效、准确地处理海量数据是许多企业和组织面临的关键挑战之一。本文将详细介绍几种实用的数据处理方法,包括但不限于算法优化和技术选择,旨在帮助读者更好地理解和...
### 海量数据处理的方法详解 #### 一、Bloom Filter **定义**: Bloom Filter是一种高效的数据结构,用于快速判断一个元素是否在一个集合中。它使用位数组和多个哈希函数来实现。虽然Bloom Filter可能会产生误报...
海量数据处理相关 所谓海量数据处理,是指基于海量数据的存储、处理、和操作。正因为数据量太大,所以导致要么无 法在较短时间内迅速解决,要么无法一次性装入内存。 事实上,针对时间问题,可以采用巧妙的算法搭配...
【海量数据处理面试题解析】 在信息技术领域,海量数据处理是一项关键能力,尤其在大数据时代,如何高效地处理和分析海量数据成为企业竞争的核心。本文将深入探讨如何应对99%的海量数据处理面试题,提炼出核心策略...
在Python中进行海量数据处理是一项挑战,因为Python解释器在内存管理和性能方面相对于其他专为大数据设计的语言(如Java或C++)可能稍显不足。然而,通过一些策略和技巧,我们可以有效地处理大规模数据。以下是从...
【海量数据处理】是指在面对数据量巨大,超出单机处理能力的情况下,所采用的一系列技术和方法。这类问题通常涉及到存储、处理和操作大量数据,其中“海量”意味着数据量过大,以至于无法在短时间内直接处理或者无法...
大数据量、海量数据处理需要使用各种数据结构和算法来解决,例如Hash表、Trie树、Bloom filter、堆排序等。根据不同的问题,选择合适的数据结构和算法是关键。在解决大数据量、海量数据处理问题时,需要充分考虑数据...
在当前的大数据时代,海量数据处理技术已成为IT行业的重要技术之一。面试中,关于海量数据处理的问题往往占据着举足轻重的地位,特别是在涉及秒杀系统、高并发处理和多线程应用的场景中。本文件《海量数据处理面试题...
大数据量,海量数据 处理方法总结 包括Bloom filter 哈希 bit-map 堆 双层桶划分 数据库索引 倒排索引 外排序 trie树等。细分为适用范围、要点、实例等。
【海量数据处理】在互联网巨头如百度、腾讯、Google的面试中,海量数据处理是一个重要的考察点。这一领域涉及到如何高效地处理大规模的数据,尤其是在内存有限的情况下。以下是几个关键的知识点: 1. **双层桶划分*...
在IT行业中,海量数据处理是一项重要的任务,尤其是在大数据时代,数据量的增长速度远超我们的想象。面对这样的挑战,如何高效地从海量数据中查找特定信息成为了一项关键技术。本篇文章将详细探讨如何解决"海量数据...
在Java编程中,处理海量数据是一项挑战,但通过合理的策略和工具可以有效地解决。这篇文章将探讨如何使用Java来处理大规模数据,主要关注于优化内存管理、分片处理、流式处理以及利用开源工具等方法。 首先,理解...