Stay Hungry.Stay Foolish.
高效准确的文本去重实现

起因

之前实现的版本可以做到100%的去重正确率,其实实际场景并不需要那么高的正确率,所以才有了现有的改进。

原理

typedef struct hashnode {
    unsigned long  hash; 
    int            next; 
} __attribute__((packed)) HashNode;

typedef struct hashtable {
    HashNode  *node;
    HashNode  *lastfree;
} HashTable;
  • hashtable的数据结构如上,hashtable里面保存两个指针,lastfree总是指向最后一个可用槽位,node指向首个hash槽位;
  • hashnode数据结构hash元素表示数据被hash所得的值,使用64位hash算法,next元素用于解决hash碰撞冲突;
  • 解决hash冲突参考的lua内核实现,闭散列法,即发生冲突时,不增加额外的槽位保存元素,而是把lastfree指针指向的位置给它存放,当先插入位置
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
评论

暂无评论~~