您的位置:首页 > 其它

哈希Hash 算法

2016-12-13 14:08 211 查看

注意

文章详解(http://blog.csdn.net/v_july_v/article/details/6256463

哈希由来:

数组的特点是:寻址容易,插入和删除困难

链表的特点是:寻址困难,插入和删除容易

做出一种寻址容易,插入删除也容易



哈希特点:

通过散列算法,变换成固定长度的输出;

散列值的空间通常远小于输入的空间, 不同的输入可能会散列成相同的输出,

不可能从散列值来唯一的确定输入值

一种将任意长度的消息压缩到某一固定长度的消息摘要的函数 HASH主要用于

信息安全领域中加密算法,一些不同长度的信息转化成杂乱的128位的编码,HASH值

哈希表长度该定义多大:

一般采用哈希算法的时候,哈希表的长度设为多大?有什么依据?

越长碰撞越少,但耗得资源也就多了

最大的出发点就是没有冲突

哈希就是散列,散列就是把关键字分布均匀撒到到每一个桶内,哈希表越长,散列函数越好,自然查找效率就越高.

哈希表长度定义举例说明:

比如说要处理的数据集合有100,000个,每一项的数据占用内存约为50bytes,我的哈希表的长度在多大比较合适?

hash表里面存指针,表长整成数据集合的10倍,100000*4*10 也就是4MB内存

空间换时间(越长碰撞越少,内存消耗越多,查找和插入速率越接近O(1))

一万,一千万,一亿数据需要多少空间:

1万数据,1个数据1Byte

1,0000 -> 10,000 大约10KB

1千万数据,1个数据1Byte

1000,0000 -> 10,000,000 大约10M

1亿数据,1个数据1Byte

10000,0000 -> 100,000,000 大约100M

10亿数据,1个数据1Byte

10,0000,0000 -> 1,000,000,000 大约1G

1Byte = 8bit 表示最大数值 2^8 = 256

2Byte = 2*8bit 表示最大数值 2^16 = 65536 = 6,5536(约6千) = 65,536

4Byte = 4*8bit 表示最大数值 2^32 = 4294967296 = 42,9496,7296(约42亿) = 4,294,967,296

32位机器,地址4个字节表示,寻址就是42,9496,7296(约42亿),所以内存最多可以用4G,但不是所有地址都用于内存,所以内存最大支持会小于4G。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: