散列表

已知的几种查找方法:

  • 顺序查找       O(N)
  • 二分查找(静态查找)    O(log2N)
  • 二叉搜索树、平衡二叉树      O(h) h为二叉查找树的高度     O(log2N)

查找的本质:一直对象找位置。

  • 有序安排对象:全序、半序
  • 直接“算出”对象位置:散列

散列查找法的两项基本工作:

  • 计算位置:构造散列函数确定关键词存储位置;
  • 解决冲突:应用某种策略解决多个关键词位置相同的问题。

时间复杂度几乎是常量:O(1),即查找时间与问题规模无关!

类型名称:符号表(SymbolTable)

数据对象集:符号表是“名字(Name)-属性(Attribute)”对的集合。

操作集:Table∈SymbolTable,Name∈NameType,Attr∈AttributeType

1、SymbolTable InitializeTable(int TableSize):

创建一个长度为TableSize的符号表;

2、Boolean Isln(SymbolTable Table,NameType Name):

查找特定的名字Name是否在符号表Table中

3、AttributeType Find(SymbolTable Table,NameType Name):

获取Table中指定名字Name对应的属性;

4、SymbolTable Modefy(SymbolTable Table,NameType Name,AttributeType Attr):

将Table中指定名字Name的属性修改为Attr;

5、SymbolTable Insert(SymbolTable Table, NameType Name, AttributeType Attr):

向Table中插入一个新名字Name及其属性Attr;

6、SymbolTable Delete(SymbolTable Table,NameType Name):

从table中删除要给名字Name及其属性。

“散列”的基本思想是:

(1)以关键字key为自变量,通过一个确定的函数h(散列函数),计算出对应的函数值h(key),作为数据对象的存储地址。

(2)可能不同的关键字会映射到同一个散列地址上,即h(keyi) = h(keyj) (当keyi≠keyj),称为“冲突(Collision)”。

------需要某种冲突解决策略

一个“好”的散列函数一般应该考虑下列两个因素:

1.计算简单,以便提高转换速度;

2.关键词对应的地址空间分布均匀,以尽量减少冲突。

数字关键词的散列函数构造

1.直接定址法

2.除留余数法

3.数字分析法

4.折叠法

5.平方取中法

猜你喜欢

转载自www.cnblogs.com/ch122633/p/9058218.html