目的:邮件地址散列到N个箱 (N是正整数)我的实现:<?php
$email;
$n;
          $md5 = str_split(md5($email));
$md5_sum = 0;
foreach ($md5 as $row){
$md5_sum += ord($row);
}
$key = $md5_sum%$n;?>请问有没有更简单点儿的实现方法?好久没来了,只有28分咯~

解决方案 »

  1.   

    执行时间 28微秒,估计没有多大优化空间了md5($email) ==> md5($email, 1)
    可缩短至 17微秒
      

  2.   

    在均匀上,还得下点功夫你的算法$md5_sum   对   $n  取余数本身分布并不均匀
    例如,理论上的$md5_sum至大值为102*32,大约3000多,至小值48*32,大约1500多就算md5字符串中,0—9,a—f出现的频率一样$md5_sum也只能随机映射到102*32-48*32基数的集合中
      

  3.   

    哦...也就是N越大,越不均匀是吧... good