好久没有来CU了,大约是从BLOG兴起罢。总是接受不了过于新鲜的东西,呵呵,或者真的老了。
看到现在论坛再次热闹起来,回来继续潜水,并带点小礼物给大家。
或者有曾经研究过Alexa的朋友,本人曾应邀研究AID的规律,想来已经是4年前的事情了。
现将AID的规律跟CU的XDJM们介绍一下,关键是引出一种不错的数字进制思路:64进制计数
AID共计14位
计位:012345 67 89 ab cd
采样:l58f31 iL QO a1 RB
[1]0-5位为64位时间戳记
[0]6-7位为 IP_CLASS_B 64位值演变
[1]8-9位为 IP_CLASS_C 64位值演变
[1]a-b位为 IP_CLASS_D 64位值
用6位数就可以表示时间戳记,无论是对检索还是记录,都是一个好消息,但Alexa是怎样做到的呢?那就是64位计数法。
以下是PHP写的十进制转64进制的FUNC:
function make_bit64($bit10) {
//将十进制的数值转换为64进制的数值
$bit64=array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","+","/");
for($i=0;$bit10/pow(64,$i)>=1;$i++) {
$str.=$bit64[$bit10%pow(64,($i+1))/pow(64,$i)];
}
$bit64d=substr($str,0,($i-1)).$bit64[$bit10/pow(64,($i-1))];
return $bit64d;
}
为什么是64而不是50或者别的,当然是因为可以通过位运算直接通过2进制转换,甚至在代码中省去了十进制这一中间态。
正在思考这一思路在优化代码效率方面有没有价值,欢迎大家拍砖。
satand@126.com
[ 本帖最后由 SATAND 于 2006-12-15 21:31 编辑 ] |