随笔分类 -  算法和数据结构

摘要:多读多写下,先进后出队列,可以不加锁,下面是实现代码 lifo.h#include "cas.h" #include <stddef.h>struct lifo_node { volatile struct lifo_node *next; };struct lifo { void init() { top = NULL; cnt=0; } void push(lifo_node *node) { struct lifo old_val, new_val; do { old_val = *this; node->next = old_val.top; ne 阅读全文
posted @ 2011-04-06 10:25 napoleon_liu 阅读(2357) 评论(0) 推荐(0) 编辑
摘要:Chrod算法是P2P中的四大算法之一,是有MIT(麻省理工学院)于2001年提出,其他三大算法分别是: CAN Pastry Tapestry Chord的目的是提供一种能在P2P网络快速定位资源的的算法,Cord并不关心资源是如何存储的,只是从算法层面研究资源的取得,因此Chord的API就简单到只有一个set、get。 1、Chord是什么? Chord是一个算法,也是一个协议。作为一个算法... 阅读全文
posted @ 2011-03-10 20:56 napoleon_liu 阅读(1030) 评论(0) 推荐(0) 编辑
摘要:Richard Jones Blog : http://www.metabrew.com/article/libketama-consistent-hashing-algo-memcached-clients In old way, clients mapped keys->servers like this:server = serverlist[hash(key)%serverlist.len... 阅读全文
posted @ 2011-03-10 20:49 napoleon_liu 阅读(1766) 评论(0) 推荐(0) 编辑
摘要:前两天在网上看到世界知名的电骡服务器Razorback 2被查封、4人被拘禁的消息,深感当前做eMule / BitTorrent等P2P文件交换软件的不易。以分布式哈希表方式(DHT,Distributed Hash Table)来代替集中索引服务器可以说是目前可以预见到的为数不多的P2P软件发展趋势之一,比较典型的方案主要包括:CAN、CHORD、 Tapestry、Pastry、Kademlia和Viceroy等,而Kademlia协议则是其中应用最为广泛、原理和实现最为实用、简洁的一种, 当前主流的P2P软件无一例外地采用了它作为自己的辅助检索协议,如eMule、Bitcomet、Bi 阅读全文
posted @ 2011-01-11 23:47 napoleon_liu 阅读(1063) 评论(0) 推荐(0) 编辑
摘要:为什么要整数哈希   很多时候,可以直接用整数作为键,比如QQ号码,手机号码,但这些号码的分布性不是均匀的(比如高位的变化更少,低位变化更多)。   分布均匀指的是每位为0或1的概率都是一样的。 理论基础 整数哈希的目标     1. 函数要是可逆的(1对1的映射)     2. 雪崩效应(输入中1bit的变化 影响 输出中1/4 到 1/2的bits变化) 可逆操作     key +... 阅读全文
posted @ 2010-12-29 16:54 napoleon_liu 阅读(11345) 评论(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) 编辑
摘要:命令行处理和 gperf 的作用 命令行处理一直以来都是软件开发中最容易被忽视的领域。几乎所有比较复杂的软件都具有一些可用的命令行选项。事实上,大量 if-else 语句经常被用来处理用户输入,因此维护这种遗留代码相当费时,对资深程序员亦是如此。这种情形下,很多 C 开发人员通常使用冗长(通常都嵌套使用)的 if-else 语句,以及 ANSI C 库函数,例如 strcmp、strcasecm... 阅读全文
posted @ 2010-12-27 11:12 napoleon_liu 阅读(1759) 评论(3) 推荐(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 阅读(3042) 评论(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 阅读(392) 评论(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 阅读(2086) 评论(1) 推荐(0) 编辑
摘要:最近在研究无锁算法, 参照Michael and Scott的伪码,实现了个c++版本。参考 http://www.cs.rochester.edu/research/synchronization/pseudocode/queues.html 伪代码是:Code highlighting prod... 阅读全文
posted @ 2010-08-07 09:53 napoleon_liu 阅读(7708) 评论(13) 推荐(1) 编辑