对哈希表及哈希函数的一点理解
来源:互联网 发布:c语言getchar位置输入 编辑:程序博客网 时间:2024/04/28 20:41
原来也听过哈希表,觉得那是比较高级的程序员需要注意的事情,没有注意,但今天看了下,他也不是很高深,也只是一种很平常的数据结构而已。
1,先说一下记录:
我们一般都是把记录随机的放在表格中,如:张三,34;李四,23;王五,45;
这样我们去寻找(用计算机寻找,不是用眼睛)时,我们可能寻找王五的次数可能是1-3次都有可能;如果把人数扩大到n,那么会他的时间复杂度也是千变万化,可能你会采用一些算法,比如快速排序法去优化,但是时间复杂度还是会在o(1)-o(logn)之间,如何才能一次就找到我们想要的记录“王五”了,这就涉及到数据结构的设计了。
2,哈希表:
我们要一次就找到"王五",首先要对整个记录表进行重新编码,我们要额外开出空间来,重新存储这些编码,还要开出额外空间来存储编码和记录的对应规则,也就是成为规则,俗称哈希函数。这样,我们要找到王五,我们只要翻阅规则,找到王五的独一无二的编号,就可以直接找到王五了。这就是著名的“用空间换取时间”!
3,哈希函数:
哈希表不仅占用空间多,最大的缺点就是规则的设置,怎么样才能设置出独一无二的编码,为此,人们想出了很多方法:
3.1:直接定址:对于一些有序的数字记录:1,2....100.直接把他们的值作为编码。
数字分析法:对一些含有数字的记录,可以研究他的数字规律,找到合适的不会产生误会的方法;
平方取中法:也就是数字分析法吧,对数字平方后在处理,加大范围;
折叠法: 对数字相加后,去前面几位作为编码;
取余法:取一个大于记录总数的数P,除后的余数作为编码;
随机数法:取数字然后放到rand()会得到随机数,作为编码;
看来都是些数字游戏。
- 对哈希表及哈希函数的一点理解
- 对递归函数的一点小理解
- 对memset函数的一点理解
- 一点对pipe()函数的理解
- 对fork()函数的一点理解
- 对C#下函数,委托,事件的一点理解
- 对c#中的静态构造函数的一点理解
- 对c++拷贝构造函数的一点理解
- 对OpenCV 中cvQueryFrame函数的一点理解
- 对窗口过程函数WndProc()的一点理解
- 对OpenCV 中cvQueryFrame函数的一点理解
- 对窗口过程函数WndProc()的一点理解
- 对ActiveX的一点理解
- 对inherited的一点理解
- 对管理信息系统的一点理解
- 对主力的一点理解
- 对HANDLE_MSG()的一点理解
- 对__threadfence的一点理解
- 谈一下自己收集资料和整理资料的经验
- Loadrunner监视Linux系统过程及遇到的问题
- Maven系列— Maven3的安装(windows环境)
- 三层架构中多层的使用关系
- java.sql.SQLNonTransientConnectionException: Database 'TempStatsStore' shutdown. java.sql.SQLExcept
- 对哈希表及哈希函数的一点理解
- iPhone手机上的GPS位置信息采集与分享应用
- Java关键字:protected
- 菜鸟学Java(一)——Ajax异步检查用户名是否存在(附Demo下载)
- 编写正确的二分查找算法
- 需要即时客户端
- 直接选择排序的基本思想
- weblogic安装问题记录
- Ruby的优雅(C#版)