好久沒有來CU了,大約是從BLOG興起罷?偸墙邮懿涣诉^于新鮮的東西,呵呵,或者真的老了。
看到現(xiàn)在論壇再次熱鬧起來,回來繼續(xù)潛水,并帶點(diǎn)小禮物給大家。
或者有曾經(jīng)研究過Alexa的朋友,本人曾應(yīng)邀研究AID的規(guī)律,想來已經(jīng)是4年前的事情了。
現(xiàn)將AID的規(guī)律跟CU的XDJM們介紹一下,關(guān)鍵是引出一種不錯(cuò)的數(shù)字進(jìn)制思路:64進(jìn)制計(jì)數(shù)
AID共計(jì)14位
計(jì)位:012345 67 89 ab cd
采樣:l58f31 iL QO a1 RB
[1]0-5位為64位時(shí)間戳記
[0]6-7位為 IP_CLASS_B 64位值演變
[1]8-9位為 IP_CLASS_C 64位值演變
[1]a-b位為 IP_CLASS_D 64位值
用6位數(shù)就可以表示時(shí)間戳記,無論是對(duì)檢索還是記錄,都是一個(gè)好消息,但Alexa是怎樣做到的呢?那就是64位計(jì)數(shù)法。
以下是PHP寫的十進(jìn)制轉(zhuǎn)64進(jìn)制的FUNC:
function make_bit64($bit10) {
//將十進(jìn)制的數(shù)值轉(zhuǎn)換為64進(jìn)制的數(shù)值
$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或者別的,當(dāng)然是因?yàn)榭梢酝ㄟ^位運(yùn)算直接通過2進(jìn)制轉(zhuǎn)換,甚至在代碼中省去了十進(jìn)制這一中間態(tài)。
正在思考這一思路在優(yōu)化代碼效率方面有沒有價(jià)值,歡迎大家拍磚。
satand@126.com
[ 本帖最后由 SATAND 于 2006-12-15 21:31 編輯 ] |