几种hash函数实现垃圾邮件过滤的比较

该博客探讨了如何使用哈希函数和散列表快速过滤垃圾邮件。通过对比十余种不同的哈希函数,作者分析了它们在特定条件下的性能和效果。文章以C语言实现为例,提供了代码示例,旨在帮助读者理解如何在实际场景中高效地实现这一功能。
摘要由CSDN通过智能技术生成

题目要求:给你两个txt文档,一个是发送垃圾邮件的黑名单邮箱地址,另一个是待检测的邮箱地址,现要求给出一种方案,尽快将黑名单当中的地址从待测邮箱地址中分离出来。

大家都知道,对于这一类问题,散列表所给出的解决方案虽然需要消耗大量的物理空间,但在时间上却有很大的优势,不同的哈希函数有不同的效果,在特定的和环境下都能发挥出不一样的效果。在这里作者给出了十余种解决方式,并进行了测试,具体如下。。。。不多说,上C代码:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define N  10000005
#define  MOD  10000007

typedef struct node
{
	char address[20];
	struct node *next;
}node, *ptr;
node str[N] = { 0 };


/*unsigned int Hash(char* str)  // 154.4s
{  
   unsigned int hash = 0;  
   unsigned int x    = 0;  
   unsigned int i    = 0;  
   for(i = 0; i < sizeof(str); str++, i++)  
   {  
      hash = (hash << 4) + (*str);  
      if((x = hash & 0xF0000000L) != 0)  
      {  
         hash ^= (x >> 24);  
      }  
      hash &= ~x;  
   }  
   return hash;  
}  */


/*unsigned int Hash(char* str)  // 148.9s
{  
   const unsigned int BitsInUnsignedInt = (unsigned int)(sizeof(unsigned int) * 8);  
   const unsigned int ThreeQuarters     = (unsigned int)((BitsInUnsignedInt  * 3) / 4);  
   const unsigned int OneEighth         = (unsigned int)(BitsInUnsignedInt / 8);  
   const unsigned int HighBits          = (unsigned int)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值