散列表
-
已知的几种查找方法:
- 顺序查找 O(N)
- 二分查找(静态查找) O ( l o g 2 N ) O(log_2N) O(log2N)
- 二叉搜索树、平衡二叉树 O ( h ) 、 O ( l o g 2 N ) O(h)、O(log_2N) O(h)、O(log2N)
- 还有其他方法吗?
-
二分法
- 十亿用户:30次、1T连续空间
- 按有效QQ号大小有序存储:在连续存储空间中,插入和删除一个新QQ号码将需要移动大量数据
-
查找的本质:已知对象找位置
- 有序安排对象:全序、半序
- 直接“算出”对象位置:散列
-
散列查找法的两项基本工作:
- 计算位置:构造散列函数确定关键字存储位置;
- 解决冲突:应用某种策略解决多个关键词位置相同的问题
-
时间复杂度几乎为常数: O ( 1 ) O(1) O(1),即查找时间与问题规模无关!
散列表(哈希表)
类型对象集:符号表是“名字-属性”对的集合。
操作集:
-
InitializeTable
-
IsIn
-
Find
-
Modefy
-
Insert
-
Delete
-
-
"散列"的基本思想是:
-
以关键字key为自变量,通过一个确定的函数h(x),计算出对应的函数值,作为数据对象的存储地址。
-
可能不同的关键词会映射到同一个散列地址上,
需要某种冲突解决策略
-