使用红黑树查找最小n个数,适合处理大数据

使用STL容器 multiset

代码:

#include <iostream>
#include <vector>
#include <set>
using namespace std;

typedef multiset<int,greater<int> > intSet;
typedef multiset<int,greater<int> >::iterator intIter;

void findMaxNum(const vector<int> &data,int k){
	intSet Max;
	Max.clear();
	if(k < 1 || data.size() < k)
    	return ;
	vector<int>::const_iterator iter = data.begin();

	for(;iter != data.end();++iter){
		if(Max.size() < k){
			Max.insert(*iter);

		}else{
			intIter least=Max.begin();
			if((*iter) < *( Max.begin())){ //只能是begin()删除

				Max.erase(least);
				Max.insert(*iter);
			}

		}
	}
	for( intIter it = Max.begin(); it != Max.end();it ++){
		cout<<*it << "  ";
	}
}
int main()
{	

	vector<int> data;
	for(int i=0;i<1000;i++){
		data.push_back(i);
	}
	findMaxNum(data,10);
    return 0;
}

运行结果:

使用红黑树查找最小n个数,适合处理大数据

时间: 2024-10-15 02:01:32

使用红黑树查找最小n个数,适合处理大数据的相关文章

一种适合于大数据的并行坐标下降法

  在机器学习中,模型的训练是一个很重要的过程,它通常是对一个目标函数进行优化,从而获取模型的参数,比较常见的优化算法包括梯度下降法.牛顿法与拟牛顿法等.但在大数据的背景下,尤其对于并行实现来说,优化算法通常是越简单越好,如坐标下降法(CD)和随机梯度下降法(SCG)就比较受欢迎. 本文是阅读完论文 Distributed Coordinate Descent Method for Learning with Big Data 的一则笔记,主要介绍算法 Hydra (一种分布式坐标下降法)的算法

0043数据结构之红黑树

----------------------红黑树----------------------------- 红黑树仍然是一颗二分搜索树,和AVL一样,都是在二分搜索树的基础上加了一些限制条件:具体的5个限制条件如下: 1)  每个节点或者是红色的,或者是黑色的 2)  根节点是黑色的 3)  每一个叶子节点(最后的空节点叫叶子节点)是黑色的 4)  如果有一个节点是红色的,那么它的两个孩子节点都是黑色的 5)  从任意一个节点到叶子节点,经过的黑色节点是一样的 2-3树是一颗绝对平衡的树:从根

AVL树、红黑树以及B树介绍

简介 首先,说一下在数据结构中为什么要引入树这种结构,在我们上篇文章中介绍的数组与链表中,可以发现,数组适合查询这种静态操作(O(1)),不合适删除与插入这种动态操作(O(n)),而链表则是适合删除与插入,而查询效率则就比较慢了,本文要分享学习的树就是为了平衡这种静态操作与动态操作的差距. 一.二叉查找树 简介 满足下面条件就是二叉查找树 任意节点左子树不为空,则左子树的值均小于根节点的值. 任意节点右子树不为空,则右子树的值均大于于根节点的值. 任意节点的左右子树也分别是二叉查找树. 没有键值

数据结构--树--红黑树

R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树.红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black). 红黑树的特性:(1)每个节点或者是黑色,或者是红色.(2)根节点是黑色.(3)每个叶子节点(NIL)是黑色. [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的.(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点.

算法导论第十三章 红黑树

写在前面:这一章真的把我害惨了,之前至少尝试看过3遍,每次看之前都下定决定一定要把它拿下,可是由于内容较多,深度够深,以致于每次要不是中途有什么事放弃了就跳过了,要不是花时间太多仍然不能理解而放弃.这次总算挺过来了,前后零零散散的时间加起来差不多也有两天时间.这次能坚持下来并攻克,我想大概有这么几个原因吧:第一是之前下定的决心要写一个最新版<算法导论>的读书笔记,之前几章都坚持写了,不能让这个成为拦路虎,即使再难再花时间都要弄懂:第二是通过前面几章的动手实践,发现自己的理解能力.动手能力都进步

红黑树插入删除节点过程分析 &amp;&amp; C代码实现

红黑树的插入和删除规则: 红黑树的五个性质 1.    每个节点要么是红的,要么是黑的 2.    根节点时黑色的 3.    每个叶节点(叶节点既指树尾端NIL指针或NULL节点)是黑色的 4.    如果一个节点时红的,那么它的两个儿子都是黑色的 5.    对每个节点,其到叶节点树尾端NIL指针的每一条路径都包含相同数目的黑节点 这里所说的"叶节点"或者"NULL节点",它不包含数据而只充当树在此结束的知识. 二叉树的左旋和右旋这里不再讲解 红黑树的插入操作:

红黑树的理解与Java实现

前言 前段时间在研究 JDK1.8 的 hashmap 源码,看到 put 方法的插入环节,遇到了红黑树,不得不停止阅读源码的过程,因为还没掌握红黑树是无法完全读透 hashmap 源码的.红黑树作为一种数据结构,它被应用得非常多,可能很多人不认识它,但其实它已经在默默为我们的代码在发光发热.例如,你只要在 Java 中用到 map,基本上就是在用红黑树(当元素个数到达八个时链表转红黑树). PS:在看这篇文章前,必须先了解普通的二叉查找树和平衡查找树(AVL)树.2-3-4树.不然看起来会非常

30张图带你彻底理解红黑树

本文转自安卓大叔 写在前面 当在10亿数据中只需要进行10几次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感. 终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家.红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我.如果你在学习过程中也会存在我的疑问,那么本文对你会有帮助,本文帮助你全面.彻底地理解红黑树! 本文将通过图文的方式讲解

红黑树详解

前言 红黑树的起源,自然是二叉查找树了,这种树结构从根节点开始,左子节点小于它,右子节点大于它.每个节点都符合这个特性,所以易于查找,是一种很好的数据结构.但是它有一个问题,就是容易偏向某一侧,这样就像一个链表结构了,失去了树结构的优点,查找时间会变坏. 所以我们都希望树结构都是矮矮胖胖的,像这样: 而不是像这样: 在这种需求下,平衡树(AVL)的概念就应运而生了. 红黑树就是一种平衡树,它可以保证二叉树基本符合矮矮胖胖的结构,但是理解红黑树之前,必须先了解另一种树,叫2-3树,红黑树背后的逻辑