第八章_符号表题库.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 1,允许在同一程序中,把同一标识符多次说明为不同的名字,这些名字可以具有不同的属性,且通常应该存贮在不同的位置; 2,符号表的职责就是要区别同一标识符的不同说明; 3,有限的作用域给了编译程序允许符号表登记项共享空间的 机会: * * * 目标机器(字长和指令系统) * * * * * * * * * * * * * * * * 为什么 * * * * * * * * * * * * * * * * * * 对折半查找的评价 致命弱点是添加一项就要重新排序。 因此对于名字表不合适。 但是对于固定的表就很有用。 定义符表等 第8章 符号表 * left 结点值 内码 right 再改进-? 把符号表组织成一个二叉树,每一项是一个节点,节点组成: 第8章 符号表 * 构造过程: 这样构造的树,保持任何结点 P 右枝的所有结点值小于结点 P 的值,而 P 左枝的所有结点值大于结点 P 的值: P 值 P 左枝的所有结点值; P 值 P 右枝的所有结点值. 再加入名字 LMN: ABCD LMN XYZA 加入新结点:因为 XYAZ ABCD 置于左; 因为 ABAA ABCD 置于右 根结点:第一个遇到的名字,此时,左右指示器为 null. NULL XYZA RIGHT NULL ABAA NULL NULL LMN NULL root NULL ABCD NULL LEFT ABCD RIGHT root NULL XYZA NULL 第8章 符号表 * 评价 优点 二叉树与对折查找的效率比较: 附设左右指示器,耗费空间,每查找一项所的比较次数仍然和 log2N 成比例 顺序化整理工作十分简单 第8章 符号表 * 思考: 表格处理包括查表和填表,要两者快才好,但线性表和折半法只能 各占一边,能否找到更好的办法?? 还要考虑空间使用情况 三,直接取表法 K ? 表位置 若名字的第一个字母都不一样,可以 26 元的向量作符号表。 设映像函数 H( K ) 对每一个名字 K, H( K ) 就是 K 的第一个字母在字母表中的位置表头 起始地址为100 H( K ) = 100+( K’ )*l Z .. … K .. … B .. A .. 26 元向量----符号表 H(A) H(B) H(K) 100 l 第8章 符号表 * 优点: 这个方法查填都很快,一次就行,函数唯一的时候,名字不需要存 缺点: 1,如果名字 26, 要浪费表空间 2,如果有相同的第一个字母,本法无效,即使 26 字母也无效 然而,它给我们一个启示 利用函数关系查填表、构造表 四 混列表 Hash table, Computed entry table, Scatter table 如何改进直接取表法 去掉表长度 26 的限制,去掉名字字母构成的限制, 映像函数定义为: H( k ) 产生的唯一的一组整数,即对任何关键字 k1 != k2, 有H ( K1) != H( K2 ), H ( K ) 可能值的范围较大,导致无法查找存取表,于是放弃 H( K ) 唯一的条件并将H(K)限制在一个范围之内以便取表 第8章 符号表 * 混列表---定义 映像函数 H ( K ),1= H( K ) = N,当 K1 != K2 时,可能 H ( K1 ) == H ( K2 ),这种表叫做混列表 在 K2 进入但出现 H ( K2 ) == H ( K1 ) 之前,混列表类似于直接取表法,当出现 H ( K2 ) == H ( K1 ) 时, K2 放在何处?即:冲突溢出如何解决?? 混列表的各种次一级的分类依赖于处理溢出的方法(4 种) 问题: A 开放的混列表 给定关键字 K,在长度为 N 的表中加入或者选出它的算法: 计算 i = H( K ); 若表中 i 的位置为空,或在该元的名字域中有这个关键字 K, 则出口返回; 否则冲突,插入到邻近位置, 置 i = (i +1) mod M (其中 M= 2R , 取 R 位的 mask), 转第2步。 由于(3)强制循环,只要该表未填满,名字的查找总会终止。 第8章 符号表 * 例: M = 8 (8 == 23), 名字的开始符为 A ~ H,H( K ) 的位置为 K 的第一个字母在字母表的位置 CAT DOG COLD DAY HOT HAY CAT DOG COLD DAY HOT HAY 冲突了!! 第8章 符号表 * 第3步 否则冲

文档评论(0)

4477769 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档