上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 17 下一页
摘要: wiki上的说明:http://en.wikipedia.org/wiki/Time_Stamp_Counter intel 有的CPU tsc的变化是固定的(不会随 cpu节电的影响)。  判断CPU是否支持常量TSC,可以使用 “cat /proc/cpuinfo | grep constant_tsc“, 有输出就表示支持。   下面是tsc的读取代码,  cpuid是为了解决CPU乱... 阅读全文
posted @ 2010-12-31 10:02 napoleon_liu 阅读(546) 评论(2) 推荐(0) 编辑
摘要: 为什么要整数哈希   很多时候,可以直接用整数作为键,比如QQ号码,手机号码,但这些号码的分布性不是均匀的(比如高位的变化更少,低位变化更多)。   分布均匀指的是每位为0或1的概率都是一样的。 理论基础 整数哈希的目标     1. 函数要是可逆的(1对1的映射)     2. 雪崩效应(输入中1bit的变化 影响 输出中1/4 到 1/2的bits变化) 可逆操作     key +... 阅读全文
posted @ 2010-12-29 16:54 napoleon_liu 阅读(11145) 评论(0) 推荐(1) 编辑
摘要: #include stdint.h #include stdlib.h #include assert.h #include string.h inline uint32_t kr_hash(char const *str, size_t len) {    uint32_t hash =0;    unsigned char const*p =(unsigned char con... 阅读全文
posted @ 2010-12-28 20:10 napoleon_liu 阅读(945) 评论(0) 推荐(0) 编辑
摘要: START-INFO-DIR-ENTRY * Gperf: (gperf).                Perfect Hash Function Generator. END-INFO-DIR-ENTRY 介绍 ************   'gperf'是一个用C++编写的完美的hash函数生成器.它通过一个完美的hash函数F转 换一个含有N元素的用户特定关键字集合到集合W. F唯一映... 阅读全文
posted @ 2010-12-27 16:28 napoleon_liu 阅读(1628) 评论(0) 推荐(0) 编辑
摘要: 命令行处理和 gperf 的作用 命令行处理一直以来都是软件开发中最容易被忽视的领域。几乎所有比较复杂的软件都具有一些可用的命令行选项。事实上,大量 if-else 语句经常被用来处理用户输入,因此维护这种遗留代码相当费时,对资深程序员亦是如此。这种情形下,很多 C 开发人员通常使用冗长(通常都嵌套使用)的 if-else 语句,以及 ANSI C 库函数,例如 strcmp、strcasecm... 阅读全文
posted @ 2010-12-27 11:12 napoleon_liu 阅读(1742) 评论(3) 推荐(0) 编辑
摘要: Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler。 让我们从 Lex 开始吧。 Lex Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。 一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。当... 阅读全文
posted @ 2010-12-27 09:56 napoleon_liu 阅读(562) 评论(1) 推荐(0) 编辑
摘要: FNV是 Glenn Fowler, Landon Curt Noll, and Phong Vo 三人的缩写。 FNV-1 哈希算法的核心思想如下: 实现源码 uint32_t fnv_hash(char const *str, int len) { unsigned long hash = 2166136261; //offset_basis //FNV prime for 32 bit is 16777619//#define FNV_OP() hash = (hash*16777619)^*str++#define FNV_OP() hash += (hash1) + (has 阅读全文
posted @ 2010-12-26 21:56 napoleon_liu 阅读(3003) 评论(1) 推荐(0) 编辑
摘要: #includestdio.h#includestring.h#include stdlib.h#include stdint.huint32_t rotate_hash(char *key, uint32_t len, uint32_t mask){ uint32_t hash, i; for (hash=0, i=0; ilen; ++i) hash = (hash5)^(hash27)^key[i]; return hash = (hash ^ (hash10) ^ (hash20)) & mask; // replace (hash % prime) 阅读全文
posted @ 2010-12-25 11:06 napoleon_liu 阅读(391) 评论(0) 推荐(0) 编辑
摘要: #includestdio.h #includestring.h #include stdlib.h #include stdint.h uint32_t additive_hash(char *key, uint32_t len, uint32_t prime) { uint32_t hash, i; for (hash=len, i=0; ilen; ++i) hash += key[i]; return (hash % prime); } int main(int argc, char **argv) { char name[1024]; int init =0; if 阅读全文
posted @ 2010-12-24 18:07 napoleon_liu 阅读(454) 评论(0) 推荐(0) 编辑
摘要: http://burtleburtle.net/bob/hash/doobs.html Bob优化它的第二版本hash, 速度提高了3倍,http://burtleburtle.net/bob/c/lookup3.c 下面我提取的一个变长key, 小端版本(intel机器) #include stdint.h /* defines uint32_t etc */ #include sys/param.h /* attempt to define endianness */ #ifdef linux # include endian.h /* attempt to define 阅读全文
posted @ 2010-12-22 17:22 napoleon_liu 阅读(2023) 评论(1) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 17 下一页