堆的应用:解决海量数据,从复杂度优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆的应用:解决海量数据,从复杂度优化相关的知识,希望对你有一定的参考价值。

#pragma
#include<iostream>
#include<time.h>
#include<vector>
using namespace  std;
//从十万个数中找出最大的前K个,用小堆
#define N 100000
#define K 100
vector<int> Data;
//产生海量数据
void  GetData()
{
	srand(unsigned(time(0)));
	for (int i = 0; i < N; ++i)
	{
		Data.push_back(rand() % N + 1);//产生随机数在1到length间
	}
}
void AdjustDown(int a[], int size, int parIndex)
{
	int chiIndex = parIndex*2+1;
	while (chiIndex < size)
	{
		if (chiIndex + 1 < size&&a[chiIndex + 1] < a[chiIndex])
			++chiIndex;
		if (a[chiIndex] < a[parIndex])
		{
			swap(a[chiIndex], a[parIndex]);
			parIndex = chiIndex;
			chiIndex = parIndex * 2 + 1;
		}
		else
			break;
	}
}
void GetTopK(vector<int>& Data)
{
	int heapArray[K];
	for (int i = 0; i < K; ++i)
	{
		heapArray[i] = Data[i];
	}
	//调整此堆为小堆
	for (int i = (K - 1 - 1) / 2; i >= 0; --i)
	{
		AdjustDown(heapArray, K, i);
	}
	for (int i = K-1; i < N; ++i)
	{
		if (heapArray[0] < Data[i])
		{
			heapArray[0] = Data[i];
			AdjustDown(heapArray, K, 0);
		}
	}
}

void Test1()
{
	GetData();
	GetTopK(Data);
}


本文出自 “小止” 博客,请务必保留此出处http://10541556.blog.51cto.com/10531556/1752310

以上是关于堆的应用:解决海量数据,从复杂度优化的主要内容,如果未能解决你的问题,请参考以下文章

Oracle之优化篇---海量数据处理分析

从海量文本中统计出前k个频率最高的词语

杉岩海量对象存储(SandStone MOS)V5.4版本发布,新增/优化多项功能

激活海量数据价值,实现生产过程优化

海量数据mysql优化步骤

海量数据处理(上)