上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 17 下一页
摘要: Bob 研究了很多哈希,并实现了自己的高效hash。 我测试一下了,5w多的数据,time33出现了6条重复,bobhash没有一条重复。不过time33的速度是比bobhash快的。 http://burtleburtle.net/bob/hash/doobs.html 源码 typedef unsigned int uint32_t; #define hashsize(n) ((uint32_t)1(n)) #define hashmask(n) (hashsize(n)-1) #define mix(a,b,c) \ { \ a -= b; a -= c; a ^= (c13 阅读全文
posted @ 2010-12-22 14:15 napoleon_liu 阅读(1189) 评论(0) 推荐(0) 编辑
摘要: php, apache, perl, bsddb都使用time33哈希. 最简单的版本     uint32_t time33(char const *str, int len)     {         unsigned long  hash = 0;         for (int i = 0; i len; i++) {             hash = hash *33 + ... 阅读全文
posted @ 2010-12-20 16:35 napoleon_liu 阅读(6621) 评论(0) 推荐(2) 编辑
摘要: gzip,zlib,以及图形格式png,使用的是同一个压缩算法deflate。我们通过对gzip源码的分析来对deflate压缩算法做一个详细的说明。我阅读的gzip版本为 gzip-1.2.4。我 们对算法做三种程度的说明。第一种程度,对gzip所使用压缩算法基本原理的说明。第二种程度,对gzip压缩算法实现方法的说明。第三种程度,对gzip实现源码级的说明。 如果你有时间的话,我建议你先不要看下面的内容,自己尝试通过读gzip源码,来了解它的压缩解压缩是如何实现的,这将会是一个非常有趣的智力游戏,千万不要错过。当 一个又一个的谜被解开时,那感觉就像唐伯虎同志所说的,“慷慨然诺杯酒中”。(小 阅读全文
posted @ 2010-12-16 20:42 napoleon_liu 阅读(1611) 评论(0) 推荐(0) 编辑
摘要: 全新的思路 我们在第三和第四章中讨论的压缩模型都是基于对信息中单个字符出现频率的统计而设计的,直到 70 年代末期,这种思路在数据压缩领域一直占据着统治地位。在我们今天看来,这种情形在某种程度上显得有些可笑,但事情就是这样,一旦某项技术在某一领域形成了惯例,人们就很难创造出在思路上与其大相径庭的哪怕是更简单更实用的技术来。 我们敬佩那两个在数据压缩领域做出了杰出贡献的以色列人,因为正是他们打破... 阅读全文
posted @ 2010-12-16 20:36 napoleon_liu 阅读(4465) 评论(5) 推荐(0) 编辑
摘要: HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式。 2... 阅读全文
posted @ 2010-12-16 15:25 napoleon_liu 阅读(430) 评论(0) 推荐(0) 编辑
摘要: C里操作字符串很高效,但也很麻烦。 1. char * strcpy ( char * destination, const char * source ); 最常用的函数,但是却不安全,原因在于,一是要destination有足够的空间,二是要保证source和destination指向的空间没有overlap。 2. int sprintf ( char * str, const cha... 阅读全文
posted @ 2010-12-16 10:16 napoleon_liu 阅读(2080) 评论(2) 推荐(0) 编辑
摘要: 全局变量,全局对象初始化,很方便。但过多的全局初始化,会导致程序启动时间过慢,还有全局初始化顺序不好控制(连接器可以可以控制文件之间的顺序,但那需要写好makefile, 并放映程序的实际依赖,没做到DRY).   我使用了内核的list_head 结构了组织初始化函数, 每个文件有一个file_node的结构来保持本文件内的初始化函数,file_node会注册的全局的一个分级数组中, fil... 阅读全文
posted @ 2010-12-10 15:14 napoleon_liu 阅读(2184) 评论(0) 推荐(0) 编辑
摘要: history 查看历史命令 Ctr+R 可以增量查找命令 其实Shell,还有个比较隐蔽的命令,叫bang bang, 就是!!   Bang Bang !!    重新执行上一条命令 !N  重新执行第N条命令。比如 !3 !-N 重新执行倒数第N条命令。!-3 !string  重新执行以字符串打头的命令。 比如 !vim !?string?  重新执行以字符串的命令。 比... 阅读全文
posted @ 2010-12-07 19:53 napoleon_liu 阅读(500) 评论(0) 推荐(1) 编辑
摘要: C 有 null-end string, C++有std::string, 各有千秋。 C字符串 以 zero 作为终止符,所有字符串操作,都需要判断这个终止符;这也是每个字符串操作,都需要重新知道字符串长度,这很冗余。解决办法有,手动保持字符串长度,调用呆长度的C字符串函数。 std::string C++的string试图解决C的问题,并把内存管理包揽了。在大多数情形下,这都不是问题。但当你不需要它管理内存时,没有了办法。比如字符串常量(继承C导致的问题),比如一个请求包中子串(包的周期很长)。 C++ string不够好,那么可以定义一个,不需要管理内存的string, 只提供便利操 阅读全文
posted @ 2010-12-06 21:10 napoleon_liu 阅读(1036) 评论(0) 推荐(0) 编辑
摘要: Effective STL中说过,std::map 是一个比较通用的实现,如果你注重效率的话,Hash容器 是个更好的选择,如果你的操作,主要是(先插入数据,查找,最后删除),那么用vector来实现map,效率也会更高。 从效率的角度看,map只适合那种,需要不断插入和删除,期间夹杂查找的情形。 vector_map 为什么比map效率高 vector是线性存储,map是二叉树树形,所以vector内存访问的局部性更好 vector, 一次分配一个比较大的空间(2^n的分配方式), map每次都需要 new 或delele 一个树结点, 内存分配是很耗时的。 vector_map, 可以在 阅读全文
posted @ 2010-12-06 20:29 napoleon_liu 阅读(6483) 评论(1) 推荐(1) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 17 下一页