前一段查看了关于哈希的各种算法,发现流传最广的还算伟大的暴雪(dota爱好者)工程师得到的一种算法,有很多博客中都有对其的介绍,我在此就不多废话了。
虽说是借鉴,也只是一小部分的抄袭。不知道是否冒犯了暴雪的版权。
我修改成了我需要的功能,我的目标是对6w数据进行哈希计算然后暂存到内存中,当做缓存使用。这是搜索引擎中必须要做的一步,当然,代码是公司机密,我只是把我写的代码雏形拿出来,看看有没有值得批评指正的地方。
小弟不才,在这6w的测试数据中,使用5倍的内存,得到最长的一串链表长达180.(不知道大家知道不知道我说的是什么意思)。沟通的机会来了。。。。。
欢迎到之类来沟通交流:
http://lee-sven.com/wordpress/?p=330
还是看看代码:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
//#define DEBUG
#define NUM 10240 //缓存的最大数据量
typedef struct hash{
char flag;
char hz[64];
char *art;
int time;
int n;
struct hash *next;
}HASH;
HASH *hashtable1=NULL,*hashtable2=NULL,*hashtable3=NULL,*hashtable4=NULL,*hashtable5=NULL;
unsigned long cryptTable[0x500];
/******************************************************
* 函数功能:申请哈希表所用的内存;
* 函数参数:void;
* 函数输出:成功:1;失败:-1;
******************************************************/
int getMalloc(){
hashtable1 = (HASH *)malloc((NUM)*sizeof(HASH));
hashtable2 = (HASH *)malloc(NUM*sizeof(HASH));
hashtable3 = (HASH *)malloc(NUM*sizeof(HASH));
hashtable4 = (HASH *)malloc(NUM*sizeof(HASH));