zoukankan      html  css  js  c++  java
  • 散列表

    已知的几种查找方法:

    • 顺序查找       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.平方取中法

    无欲速,无见小利。欲速,则不达;见小利,则大事不成。
  • 相关阅读:
    Retrofit 2使用要点梳理:小白进阶回忆录
    浅析Android动画(三),自定义Interpolator与TypeEvaluator
    浅析Android动画(二),属性动画高级实例探究
    浅析Android动画(一),View动画高级实例探究
    Retrofit 2使用要点梳理:浅析POST文件/表单上传
    AS历史代码记录,找回本地未提交代码
    注解基础篇:自定义Java Annotation
    注解提高篇:自定义注解处理器(APT)
    AndroidStudio快捷键大全
    VisualStudio2015常用快捷键
  • 原文地址:https://www.cnblogs.com/ch122633/p/9058218.html
Copyright © 2011-2022 走看看