Netfilter的连接跟踪表,是通过一个hash表来维护的,其首先把一个数据包根据来源/端口/协议转换成一个"tuple",然后根据这个"tuple"来计算hash值: [code]static u_int32_t hash_conntrack(const struct ip_conntrack_tuple *tuple) { #if 0 dump_tuple(tuple); #endif return (jhash_3words(tuple->src.ip, (tuple->dst.ip ^ tuple->dst.protonum), (tuple->src.u.all | (tuple->d...
函数原型 unsigned int find_index(char* c);
假设存在一哈希表 vector
字符串hash算法比较 链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但hash链表查找的时间效率为O(1)。设计高效算法往往需要使用hash链表,常数级的查找速度是任何别的算法无法比拟的,hash链表的构造和冲突的不同实现方法对效率当然有一定的影响,然而hash函数是hash链表最核心的部分,本文尝试分析一些经典软件中使用到的字符串hash函数在执行效率、离散性、空间利用率等方面的性能问题。 1 概述 链表查找的时间效...
字符串hash算法比较 1 概述 链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但hash链表查找的时间效率为O(1)。设计高效算法往往需要使用hash链表,常数级的查找速度是任何别的算法无法比拟的,hash链表的构造和冲突的不同实现方法对效率当然有一定的影响,然 而hash函数是hash链表最核心的部分,本文尝试分析一些经典软件中使用到的字符串hash函数在执行效率、离散性、空间利用率等方面的性能问题。 2 经典字...
线段hash算法 线段hash算法原理是:通过hash算法把Key转换成一个int类型的数字,然后按照每次比较2个bit来定位到一个内存块。结构图如图1-1: 图1-1 图1-1中的每个节点成为bucket,而每个bucket有4个元素。我们可以使用以下结构体定义: struct bucket { int elems[4]; }; 因为每个元素可能指向下一个节点或者一个数据块,所以我们必须有个标志指定元素指向的是下一个节点还是数据块。那么,我们把bucket的定义修改成: st...
一个hash算法的实现 http://www.cublog.cn/u/12592/index.html * Copyright 2006 David Crawshaw, released under the new BSD license. * Version 2, from http://www.zentus.com/c/hash.html */ #include #include #include #include "hash.h" /* Table is sized by primes to minimise clustering. See: http://planetmath.org/encyclopedia/GoodhashTablePrimes.html */ static const unsigned int sizes[] = {...
我有一个文本文件,里面存地电话号码,一行存一个,\N换行 如 13789022321 13589022325 13689022323 15989022323 15989022323 13589022325 13689022323 里面存在相同的号码 我要踢出相同的号码,只保留一个,怎么写这个算法, 比较快的算法