亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lookup2.c

?? 幾種c語言的hash算法
?? C
字號:
/*--------------------------------------------------------------------lookup2.c, by Bob Jenkins, December 1996, Public Domain.hash(), hash2(), hash3, and mix() are externally useful functions.Routines to test the hash are included if SELF_TEST is defined.You can use this free for any purpose.  It has no warranty.Obsolete.  Use lookup3.c instead, it is faster and more thorough.--------------------------------------------------------------------*/#define SELF_TEST#include <stdio.h>#include <stddef.h>#include <stdlib.h>typedef  unsigned long  int  ub4;   /* unsigned 4-byte quantities */typedef  unsigned       char ub1;#define hashsize(n) ((ub4)1<<(n))#define hashmask(n) (hashsize(n)-1)/*--------------------------------------------------------------------mix -- mix 3 32-bit values reversibly.For every delta with one or two bit set, and the deltas of all three  high bits or all three low bits, whether the original value of a,b,c  is almost all zero or is uniformly distributed,* If mix() is run forward or backward, at least 32 bits in a,b,c  have at least 1/4 probability of changing.* If mix() is run forward, every bit of c will change between 1/3 and  2/3 of the time.  (Well, 22/100 and 78/100 for some 2-bit deltas.)mix() was built out of 36 single-cycle latency instructions in a   structure that could supported 2x parallelism, like so:      a -= b;       a -= c; x = (c>>13);      b -= c; a ^= x;      b -= a; x = (a<<8);      c -= a; b ^= x;      c -= b; x = (b>>13);      ...  Unfortunately, superscalar Pentiums and Sparcs can't take advantage   of that parallelism.  They've also turned some of those single-cycle  latency instructions into multi-cycle latency instructions.  Still,  this is the fastest good hash I could find.  There were about 2^^68  to choose from.  I only looked at a billion or so.--------------------------------------------------------------------*/#define mix(a,b,c) \{ \  a -= b; a -= c; a ^= (c>>13); \  b -= c; b -= a; b ^= (a<<8); \  c -= a; c -= b; c ^= (b>>13); \  a -= b; a -= c; a ^= (c>>12);  \  b -= c; b -= a; b ^= (a<<16); \  c -= a; c -= b; c ^= (b>>5); \  a -= b; a -= c; a ^= (c>>3);  \  b -= c; b -= a; b ^= (a<<10); \  c -= a; c -= b; c ^= (b>>15); \}/* same, but slower, works on systems that might have 8 byte ub4's */#define mix2(a,b,c) \{ \  a -= b; a -= c; a ^= (c>>13); \  b -= c; b -= a; b ^= (a<< 8); \  c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \  a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \  b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \  c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \  a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \  b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \  c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \}/*--------------------------------------------------------------------hash() -- hash a variable-length key into a 32-bit value  k     : the key (the unaligned variable-length array of bytes)  len   : the length of the key, counting by bytes  level : can be any 4-byte valueReturns a 32-bit value.  Every bit of the key affects every bit ofthe return value.  Every 1-bit and 2-bit delta achieves avalanche.About 36+6len instructions.The best hash table sizes are powers of 2.  There is no need to domod a prime (mod is sooo slow!).  If you need less than 32 bits,use a bitmask.  For example, if you need only 10 bits, do  h = (h & hashmask(10));In which case, the hash table should have hashsize(10) elements.If you are hashing n strings (ub1 **)k, do it like this:  for (i=0, h=0; i<n; ++i) h = hash( k[i], len[i], h);By Bob Jenkins, 1996.  bob_jenkins@burtleburtle.net.  You may use thiscode any way you wish, private, educational, or commercial.  It's free.See http://burtleburtle.net/bob/hash/evahash.htmlUse for hash table lookup, or anything where one collision in 2^32 isacceptable.  Do NOT use for cryptographic purposes.--------------------------------------------------------------------*/ub4 hash( k, length, initval)register ub1 *k;        /* the key */register ub4  length;   /* the length of the key */register ub4  initval;    /* the previous hash, or an arbitrary value */{   register ub4 a,b,c,len;   /* Set up the internal state */   len = length;   a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */   c = initval;           /* the previous hash value */   /*---------------------------------------- handle most of the key */   while (len >= 12)   {      a += (k[0] +((ub4)k[1]<<8) +((ub4)k[2]<<16) +((ub4)k[3]<<24));      b += (k[4] +((ub4)k[5]<<8) +((ub4)k[6]<<16) +((ub4)k[7]<<24));      c += (k[8] +((ub4)k[9]<<8) +((ub4)k[10]<<16)+((ub4)k[11]<<24));      mix(a,b,c);      k += 12; len -= 12;   }   /*------------------------------------- handle the last 11 bytes */   c += length;   switch(len)              /* all the case statements fall through */   {   case 11: c+=((ub4)k[10]<<24);   case 10: c+=((ub4)k[9]<<16);   case 9 : c+=((ub4)k[8]<<8);      /* the first byte of c is reserved for the length */   case 8 : b+=((ub4)k[7]<<24);   case 7 : b+=((ub4)k[6]<<16);   case 6 : b+=((ub4)k[5]<<8);   case 5 : b+=k[4];   case 4 : a+=((ub4)k[3]<<24);   case 3 : a+=((ub4)k[2]<<16);   case 2 : a+=((ub4)k[1]<<8);   case 1 : a+=k[0];     /* case 0: nothing left to add */   }   mix(a,b,c);   /*-------------------------------------------- report the result */   return c;}/*-------------------------------------------------------------------- This works on all machines.  hash2() is identical to hash() on  little-endian machines, except that the length has to be measured in ub4s instead of bytes.  It is much faster than hash().  It  requires -- that the key be an array of ub4's, and -- that all your machines have the same endianness, and -- that the length be the number of ub4's in the key--------------------------------------------------------------------*/ub4 hash2( k, length, initval)register ub4 *k;        /* the key */register ub4  length;   /* the length of the key, in ub4s */register ub4  initval;  /* the previous hash, or an arbitrary value */{   register ub4 a,b,c,len;   /* Set up the internal state */   len = length;   a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */   c = initval;           /* the previous hash value */   /*---------------------------------------- handle most of the key */   while (len >= 3)   {      a += k[0];      b += k[1];      c += k[2];      mix(a,b,c);      k += 3; len -= 3;   }   /*-------------------------------------- handle the last 2 ub4's */   c += (length<<2);   /* <<2 to produce the same results as hash() */   switch(len)              /* all the case statements fall through */   {     /* c is reserved for the length */   case 2 : b+=k[1];   case 1 : a+=k[0];     /* case 0: nothing left to add */   }   mix(a,b,c);   /*-------------------------------------------- report the result */   return c;}/*-------------------------------------------------------------------- This is identical to hash() on little-endian machines (like Intel  x86s or VAXen).  It gives nondeterministic results on big-endian machines.  It is faster than hash(), but a little slower than  hash2(), and it requires -- that all your machines be little-endian--------------------------------------------------------------------*/ub4 hash3( k, length, initval)register ub1 *k;        /* the key */register ub4  length;   /* the length of the key */register ub4  initval;  /* the previous hash, or an arbitrary value */{   register ub4 a,b,c,len;   /* Set up the internal state */   len = length;   a = b = 0x9e3779b9;    /* the golden ratio; an arbitrary value */   c = initval;           /* the previous hash value */   /*---------------------------------------- handle most of the key */   if ((((ub1 *)k)-((ub1 *)0))&3)   {      while (len >= 12)    /* unaligned */      {         a += (k[0] +((ub4)k[1]<<8) +((ub4)k[2]<<16) +((ub4)k[3]<<24));         b += (k[4] +((ub4)k[5]<<8) +((ub4)k[6]<<16) +((ub4)k[7]<<24));         c += (k[8] +((ub4)k[9]<<8) +((ub4)k[10]<<16)+((ub4)k[11]<<24));         mix(a,b,c);         k += 12; len -= 12;      }   }   else   {      while (len >= 12)    /* aligned */      {         a += *(ub4 *)(k+0);         b += *(ub4 *)(k+4);         c += *(ub4 *)(k+8);         mix(a,b,c);         k += 12; len -= 12;      }   }   /*------------------------------------- handle the last 11 bytes */   c += length;   switch(len)              /* all the case statements fall through */   {   case 11: c+=((ub4)k[10]<<24);   case 10: c+=((ub4)k[9]<<16);   case 9 : c+=((ub4)k[8]<<8);      /* the first byte of c is reserved for the length */   case 8 : b+=((ub4)k[7]<<24);   case 7 : b+=((ub4)k[6]<<16);   case 6 : b+=((ub4)k[5]<<8);   case 5 : b+=k[4];   case 4 : a+=((ub4)k[3]<<24);   case 3 : a+=((ub4)k[2]<<16);   case 2 : a+=((ub4)k[1]<<8);   case 1 : a+=k[0];     /* case 0: nothing left to add */   }   mix(a,b,c);   /*-------------------------------------------- report the result */   return c;}#ifdef SELF_TEST/* used for timings */void driver1(){  ub4 buf[256];  ub4 i;  ub4 h=0;  for (i=0; i<256; ++i)   {    h = hash(buf,i,h);  }}/* check that every input bit changes every output bit half the time */#define HASHSTATE 1#define HASHLEN   1#define MAXPAIR 80#define MAXLEN 70void driver2(){  ub1 qa[MAXLEN+1], qb[MAXLEN+2], *a = &qa[0], *b = &qb[1];  ub4 c[HASHSTATE], d[HASHSTATE], i, j=0, k, l, m, z;  ub4 e[HASHSTATE],f[HASHSTATE],g[HASHSTATE],h[HASHSTATE];  ub4 x[HASHSTATE],y[HASHSTATE];  ub4 hlen;  printf("No more than %d trials should ever be needed \n",MAXPAIR/2);  for (hlen=0; hlen < MAXLEN; ++hlen)  {    z=0;    for (i=0; i<hlen; ++i)  /*----------------------- for each input byte, */    {      for (j=0; j<8; ++j)   /*------------------------ for each input bit, */      {	for (m=1; m<8; ++m) /*------------ for serveral possible initvals, */	{	  for (l=0; l<HASHSTATE; ++l) e[l]=f[l]=g[l]=h[l]=x[l]=y[l]=~((ub4)0);      	  /*---- check that every output bit is affected by that input bit */	  for (k=0; k<MAXPAIR; k+=2)	  { 	    ub4 finished=1;	    /* keys have one bit different */	    for (l=0; l<hlen+1; ++l) {a[l] = b[l] = (ub1)0;}	    /* have a and b be two keys differing in only one bit */	    a[i] ^= (k<<j);	    a[i] ^= (k>>(8-j));	     c[0] = hash(a, hlen, m);	    b[i] ^= ((k+1)<<j);	    b[i] ^= ((k+1)>>(8-j));	     d[0] = hash(b, hlen, m);	    /* check every bit is 1, 0, set, and not set at least once */	    for (l=0; l<HASHSTATE; ++l)	    {	      e[l] &= (c[l]^d[l]);	      f[l] &= ~(c[l]^d[l]);	      g[l] &= c[l];	      h[l] &= ~c[l];	      x[l] &= d[l];	      y[l] &= ~d[l];	      if (e[l]|f[l]|g[l]|h[l]|x[l]|y[l]) finished=0;	    }	    if (finished) break;	  }	  if (k>z) z=k;	  if (k==MAXPAIR) 	  {	     printf("Some bit didn't change: ");	     printf("%.8lx %.8lx %.8lx %.8lx %.8lx %.8lx  ",	            e[0],f[0],g[0],h[0],x[0],y[0]);	     printf("i %ld j %ld m %ld len %ld\n",i,j,m,hlen);	  }	  if (z==MAXPAIR) goto done;	}      }    }   done:    if (z < MAXPAIR)    {      printf("Mix success  %2ld bytes  %2ld initvals  ",i,m);      printf("required  %ld  trials\n",z/2);    }  }  printf("\n");}/* Check for reading beyond the end of the buffer and alignment problems */void driver3(){  ub1 buf[MAXLEN+20], *b;  ub4 len;  ub1 q[] = "This is the time for all good men to come to the aid of their country";  ub1 qq[] = "xThis is the time for all good men to come to the aid of their country";  ub1 qqq[] = "xxThis is the time for all good men to come to the aid of their country";  ub1 qqqq[] = "xxxThis is the time for all good men to come to the aid of their country";  ub4 h,i,j,ref,x,y;  printf("Endianness.  These should all be the same:\n");  printf("%.8lx\n", hash(q, sizeof(q)-1, (ub4)0));  printf("%.8lx\n", hash(qq+1, sizeof(q)-1, (ub4)0));  printf("%.8lx\n", hash(qqq+2, sizeof(q)-1, (ub4)0));  printf("%.8lx\n", hash(qqqq+3, sizeof(q)-1, (ub4)0));  printf("\n");  for (h=0, b=buf+1; h<8; ++h, ++b)  {    for (i=0; i<MAXLEN; ++i)    {      len = i;      for (j=0; j<i; ++j) *(b+j)=0;      /* these should all be equal */      ref = hash(b, len, (ub4)1);      *(b+i)=(ub1)~0;      *(b-1)=(ub1)~0;      x = hash(b, len, (ub4)1);      y = hash(b, len, (ub4)1);      if ((ref != x) || (ref != y))       {	printf("alignment error: %.8lx %.8lx %.8lx %ld %ld\n",ref,x,y,h,i);      }    }  }}/* check for problems with nulls */ void driver4(){  ub1 buf[1];  ub4 h,i,state[HASHSTATE];  buf[0] = ~0;  for (i=0; i<HASHSTATE; ++i) state[i] = 1;  printf("These should all be different\n");  for (i=0, h=0; i<8; ++i)  {    h = hash(buf, (ub4)0, h);    printf("%2ld  0-byte strings, hash is  %.8lx\n", i, h);  }}int main(){  driver1();   /* test that the key is hashed: used for timings */  driver2();   /* test that whole key is hashed thoroughly */  driver3();   /* test that nothing but the key is hashed */  driver4();   /* test hashing multiple buffers (all buffers are null) */  return 1;}#endif  /* SELF_TEST */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天一区二区三区| 色香蕉久久蜜桃| 色综合色狠狠综合色| 精品乱人伦一区二区三区| 亚洲一区二区视频在线| 成人免费毛片片v| www精品美女久久久tv| 亚洲国产精品一区二区www在线| 国产精品白丝jk白祙喷水网站| 666欧美在线视频| 亚洲精品久久久久久国产精华液| 成人性生交大片免费看视频在线| 日韩三级免费观看| 三级精品在线观看| 在线免费视频一区二区| 亚洲欧美日韩国产另类专区| www.亚洲国产| 欧美成人a在线| 麻豆国产一区二区| 91麻豆精品国产91久久久久| 偷拍与自拍一区| 欧美日韩精品二区第二页| 亚洲高清不卡在线| 91福利在线播放| 亚洲国产欧美在线| 欧美一a一片一级一片| 亚洲国产欧美一区二区三区丁香婷| 99久久er热在这里只有精品66| 国产精品大尺度| 97精品国产97久久久久久久久久久久| 中文字幕不卡一区| av电影在线观看一区| 亚洲色图制服诱惑| 一本大道av伊人久久综合| 亚洲激情六月丁香| 欧美日韩在线播| 日本欧美一区二区三区| 日韩欧美国产综合| 国产jizzjizz一区二区| 中文字幕乱码一区二区免费| av成人动漫在线观看| 亚洲黄色尤物视频| 91精品国产综合久久精品| 精品一区二区三区在线视频| 久久久www成人免费无遮挡大片| 国产成人精品一区二| 中文字幕一区二区在线观看 | 在线亚洲高清视频| 亚洲午夜精品网| 欧美一区二区三级| 国产麻豆精品95视频| 一区在线播放视频| 88在线观看91蜜桃国自产| 另类小说色综合网站| 国产精品私人影院| 欧美精品高清视频| 国产一区二区调教| 亚洲男人的天堂av| 日韩一二三区视频| aaa欧美日韩| 日本va欧美va瓶| 国产午夜精品久久| 欧美日韩电影一区| 成人中文字幕电影| 婷婷亚洲久悠悠色悠在线播放| 亚洲精品一区二区三区福利| 成人av在线一区二区| 午夜精品久久久久| 中文字幕国产一区二区| 欧美一区日本一区韩国一区| 国产精品一品二品| 日韩精品91亚洲二区在线观看| 国产亚洲成年网址在线观看| 欧美高清精品3d| 91伊人久久大香线蕉| 免费看日韩a级影片| 亚洲视频在线观看三级| 精品国产乱码久久久久久牛牛| 在线一区二区三区做爰视频网站| 精品一区二区三区视频在线观看| 一区二区三区资源| 国产无人区一区二区三区| 在线电影院国产精品| 91亚洲精华国产精华精华液| 久久精品国产亚洲5555| 五月综合激情日本mⅴ| 国产精品久久国产精麻豆99网站| 精品久久久久一区| 欧美精品在线观看一区二区| www.99精品| 国产乱子伦一区二区三区国色天香 | 一区二区三区欧美视频| 欧美高清在线一区二区| 日韩欧美一二区| 欧美一区二区三区四区在线观看| 色先锋aa成人| 91麻豆产精品久久久久久 | 日本伊人精品一区二区三区观看方式| 国产精品毛片无遮挡高清| 精品美女一区二区| 日韩西西人体444www| 欧美综合一区二区| 日本乱码高清不卡字幕| 99re热这里只有精品免费视频 | 麻豆精品久久久| 五月天久久比比资源色| 亚洲一区二区三区中文字幕| 亚洲精品中文在线影院| 亚洲精品国产成人久久av盗摄| 国产精品美女一区二区三区 | 国产亚洲欧美在线| 国产亚洲美州欧州综合国| 久久精品亚洲乱码伦伦中文| 久久免费美女视频| 国产丝袜美腿一区二区三区| 精品成人一区二区三区四区| 日韩欧美精品三级| 亚洲精品在线观看网站| 久久久午夜精品理论片中文字幕| 精品国产自在久精品国产| 久久影院午夜片一区| 亚洲国产高清在线| 亚洲视频一二三| 亚洲一区二区在线观看视频| 日韩在线一区二区三区| 蜜桃av一区二区三区| 国产一区二区剧情av在线| 懂色av中文字幕一区二区三区| 不卡视频一二三四| 欧美色综合影院| 日韩精品在线网站| 国产精品沙发午睡系列990531| 日韩码欧中文字| 三级在线观看一区二区| 国产一区二区三区久久久| 粉嫩13p一区二区三区| 欧美在线观看禁18| 日韩亚洲欧美综合| 亚洲欧洲日韩女同| 亚洲成a人片综合在线| 国内成+人亚洲+欧美+综合在线| 大胆欧美人体老妇| 欧美日韩aaaaaa| 国产免费观看久久| 亚洲伊人伊色伊影伊综合网| 精品在线亚洲视频| 成人高清免费观看| 91精品欧美久久久久久动漫| 久久久91精品国产一区二区三区| 亚洲另类在线制服丝袜| 久久精品99国产国产精| av激情综合网| 精品日韩成人av| 亚洲欧洲综合另类在线| 国产一区二区在线视频| 精品污污网站免费看| 久久精品亚洲精品国产欧美kt∨| 一区二区三区美女视频| 国产白丝网站精品污在线入口| 欧美日精品一区视频| 国产欧美日韩综合精品一区二区 | 国产乱码精品一区二区三区av | 成人动漫精品一区二区| 欧美一级一区二区| 自拍偷拍亚洲激情| 国产一区二区三区高清播放| 欧美视频在线观看一区| 国产精品国模大尺度视频| 久久精品理论片| 欧美日韩激情在线| 亚洲色图欧洲色图婷婷| 国产揄拍国内精品对白| 91精品国产手机| 亚洲一卡二卡三卡四卡| 成人avav影音| 久久精品视频免费观看| 蜜桃视频第一区免费观看| 91久久线看在观草草青青| 中日韩av电影| 国产精品夜夜嗨| 久久九九久久九九| 精品一区二区精品| 精品少妇一区二区| 另类专区欧美蜜桃臀第一页| 欧美绝品在线观看成人午夜影视| 一区二区三区自拍| 在线一区二区视频| 一区二区在线观看av| 97久久人人超碰| 国产精品成人网| 91视频观看视频| 亚洲欧美日韩中文播放 | caoporen国产精品视频| 久久久亚洲精品石原莉奈| 国内精品久久久久影院色| 精品免费国产二区三区| 精品亚洲aⅴ乱码一区二区三区| 日韩色视频在线观看| 国产综合成人久久大片91| 久久久久久久久久久久电影|