哈希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个数据1Byte1,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。
相关文章推荐
- C# 中使用 MD5 算法计算 hash (哈希)值的四种方法
- 从PHP的Hash(哈希)算法开始
- 继续算法 哈希Hash (一) 概述
- 搜索引擎中缓存(cache)用到的哈希(hash)算法
- 哈希(hash)算法的学习(二)
- 简单易懂讲解simhash算法 hash 哈希
- php+mysql分库分表的哈希(hash)算法
- 对字符串进行哈希的算法,hash_func
- 非对称算法,哈希Hash(散列)以及证书的那些事
- 哈希(hash)算法
- C# 中使用 MD5 算法计算 hash (哈希)值的四种方法
- 算法 哈希(hash——map)
- php+mysql分库分表的哈希(hash)算法
- c#的哈希(hash)算法解析
- 哈希(hash)算法的学习(一)
- 哈希(Hash)算法
- 简单易懂讲解simhash算法 hash 哈希
- 算法打基础——HashⅡ: 全域哈希与完美哈希
- C# 中使用 MD5 算法计算 hash (哈希)值的四种方法
- hash取模一致性哈希