Posted on 2008-10-16 15:08
歲月流逝 閱讀(1455)
評論(0) 編輯 收藏 引用
哈希表(散列表)的基本原理:使用一個下標(biāo)范圍比較大的數(shù)組來存儲元素,一般通過設(shè)計一個函數(shù)(哈希函數(shù),即散列函數(shù)),使得每個元素的關(guān)鍵字都與一個函數(shù)值(即數(shù)組下標(biāo))相對應(yīng),然后用該數(shù)組單元來存儲對應(yīng)元素。
下面介紹用兩道題目介紹一下hash表的用法:
http://192.168.100.16/showproblem.php?pid=1425
題目描述:給你n個整數(shù),請按從大到小的順序輸出其中前m大的數(shù)。
Input
每組測試數(shù)據(jù)有兩行,第一行有兩個數(shù)n,m (0Output
對每組測試數(shù)據(jù)按從大到小的順序輸出前m大的數(shù)。
這個問題我們可以看到數(shù)據(jù)量很大而且整數(shù)處于[-500000,500000]之間,那么我們就可以用一個大的數(shù)組進(jìn)行hash,然后進(jìn)行統(tǒng)計。
#include "stdio.h"
#include "memory.h"
int a[1000001];
int main()
{
int n,m;
int tmp;
int i;
int count;
int flag = 0;
while(scanf("%d%d",&n,&m)!=EOF)
{
count = 0;
memset(a,0,sizeof(a[0])*1000001);
for(i= 0;i=0;i--)
{
if(a[i]!=0)
{
if(!flag)
{
printf("%d",i-500000);
flag = 1;
}
else
{
printf(" %d",i-500000);
}
count++;
}
if(count==m)
break;
}
printf("\n");
}
return 0;
}