已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文收录于2003年12期哈希表在电信公用电话客户流失分析中的应用 马根峰,常文卓 (广东电信公用电话管理中心 广州 510635) 摘要 哈希表是数据结构中的重要概念之一。由于它在记录查找时一次存取便能得到所查记录,所以在经常要进行的大容量数据库表的查询时,显示出相当高的效率。本文首先介绍了哈希表的有关知识,然后介绍了电信公用电话客户流失分析中为了实现合并表所采用的哈希表、冲突解决方法,接着介绍了合并表的处理流程,最后简介了应用中的关键算法。 关键词 哈希表;哈希函数;冲突处理方法 ;关键算法The application of Hash Table in statistics of client lose analyzing in telecommunacation public payphone MA Gen-feng Chang Wen-zhuo (Guangdong Telecommunacation public payphone management center , Guangzhou 510635)ABSTRACT: Hash Table is a important conception of data structure in computer field. Because it can get the record in one times read & write, its very efficient in the query of big table. Firstly the article introduces the interrelated knowledge to Hash Table, then introduces the Hash Table used and method of resolving conflict in the process of building the Hash Table in statistics of client lose analyzing in telecommunacation public payphone, then introduces the flow of uniting two data table in a application. Finally the key algorithm is introduced.KEY WORDS: Hash Table ; Hash function ; method to resolving the conflict; key Algorithm1 引言在电信公用电话的经营分析中,客户流失分析的一个方面是确定不同时期使用电信公话业务(如广东电信的200业务)客户的变化。为了统计各种数据的方便,通常要将两个不同时期发生电信业务(如200业务)时的关系模式R和S进行合并成关系模式T,其中R、S和T分别为R(电话号码,),S(电话号码, )T(电话号码,存在表,)但是由于关系模式R和S中通常都有上百万个元组,采用常规的方法实现起来算法复杂度都非常大,耗用的时间都太长,所以必须采用特殊的方法来解决上边的问题。在数据结构中有一个重要的概念,那就是哈希表,在解决这类问题上显示出卓越的效率。2 哈希表在折半查找、二叉树查找和B_树查找时,查找的效率依赖于查找过程中所进行的比较次数。而我们期望的情况是希望不经过任何比较,一次存取便能得到所查记录,那就必须在记录的存储位置和它的关键字之间建立一个确定的关系f,使每个关键字和结构中一个唯一的存储位置相对应。因而在查找时,只要根据这个对应关系f找到给定值K的像f(K)。若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上,由此,不需要进行比较便可直接取得所查记录。这个对应关系f就是哈希函数,按这个思想建立的表为哈希表。3 使用哈希表来进行数据表的合并 3.1 哈希函数的选定哈希表的构造方法很多,常用的方法包括直接定址法、数字分析法、平方取中法、折叠法、除数余数法和随机数法。其中除数余数法是种最简单,也最常用的构造哈希函数的方法。在这里我选用了除数余数法来构造哈希函数,将Rphonenum转换成int64型。P值的选择: 在使用除数余数法时,对P值的选择很重要。若选的不好,容易产生哈希冲突。根据众人的经验,可以选P为质数或不包含小于20的质因数的合数。在本应用中所采用的是寻找一个大质数P,并且P稍大于关系模式R的元组数。这可以在哈希表类中增加一个函数来构造这个大质数P。哈希表长度的确定:由于P稍大于R的元组数,所以可以利用P作为哈希表的长度。 3.2 处理冲突的方法的选定通常用的处理冲突的方法有下面几种,开放定址法、再哈希法、链地址法和建立一个公共溢出区法。在本应用中我采用的是链地址法。因为采用链地址法时,查找成功时的平均查找长度Snc 和不成功时的长度Unc都比较小, 其中=表中填入的记录数/哈希表的长度,在这里3.3 利用哈希表进行合并表的处理流程利用哈希表,我们很容易想到两个不同时期的数据表进行合并的解决方案。具体的处理流程如下图所示:4 关键算法简介4.1 哈希表类type pointer=nodeType; nodeType=record data:int64; next:pointer; end; linkSttp=pointer;THash = class intLenHash:integer; /哈希表的长度 intDataInHash:integer; /哈希表中填入的记录数 HashTbl :array of linksttp;/采用链地址解决哈希冲突的哈希表 function isExistsInHash(int_var:int64):boolean;/判断某一电话号码是否存在 constructor Create(ary_data:array of int64);/创建哈希表 destructor Destroy(); procedure GenerateLenHashtbl(p_RecordCount:integer);/产生大质数P end;4.2 建立哈希表constructor THash.create(ary_data:array of int64);var i:integer; intMod:integer; p_hash,p_temp,p_next,:linksttp;begin intDataInHash:=high(ary_data)+1; /设置哈希表中数据的个数 GenerateLenHashtbl(high(ary_data); / 生成一个比记录个数稍大的素数,也/就是哈希表的长度intLenHash setlength(HashTbl,intLenHash); for i:=0 to high(ary_data) do begin intMod:=ary_datai mod intLenHash;/用除数余数法构造哈希函数f p_hash:=HashTblintmod; if p_hash=nil then begin new(p_temp); p_temp.data:=ary_datai; p_temp.next:=nil; HashTblintmod:=p_temp; end else begin p_hash:=p_hash.next; while p_hash nil do begin p_hash:=p_hash.next; end; new(p_temp); p_temp.data:=ary_datai; p_temp.next:=nil; p_hash.next:=p_temp; end; end;end;4.3 利用哈希表判断Sphonenum是否存在function THash.isExistsInHash(int_var:int64):boolean;/存在的话返回true,不存在的话返回falsevar intMod:integer; p_hash:linksttp;begin intMod:=int_var mod intLenHash; p_hash:=HashTblintMod; if p_hash=nil then result:=false else begin if p_hash.data=int_var then result:=true else begin p_hash:=p_hash.next; while p_hashnil do begin if p_hash.data =int_var then result:=true; p_hash:=p_hash.next ; end; result:=false; end; end;end;5 结束语 在电信业务领域内,对大容量数据表的处理是经常要进行的。而利用哈希表来进行记录的查找时,一次存取便能得到所查记录,显示出卓越的性能。关于这方面的问题,还需要和大家共同探讨。参考文献: 1 严蔚敏,吴伟民 数据结构 北京:清华大学出版社,1992.62 (美)Steve Teixerira Xavier Pacheco 任旭钧,王永生,冯泽波等译 DELPHI 5 Developers Guide 北京:机械工业出版社20
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 48208-2026刚性有机封装基板规范
- 2026年人教版高中英语高三上册第6单元听力专项训练习题及答案
- 网络营销师考试电子商务虚拟现实与增强现实应用专项训练题库及答案
- 湖北省武汉市实验中学七年级语文第7章综合测试卷及答案
- 考研法学805商法学专项训练题库及答案
- 安全评价师职业资格考试安全管理实务习题集及答案
- 《健康养老职业素养与安全》习题库及答案 模块一 单元二:健康素养
- 2026年消防安全知识考试题库及答案
- 2026年中小学教师招聘考试语文科目专项训练试卷(附答案)
- 北京市延庆区2026年八年级上学期期中数学试卷附答案
- 主动脉夹层诊疗中国专家共识(2025版)
- 2026年中国太平洋保险集团股份有限公司人员招聘笔试参考题库及详细答案解析
- 2026云南省综合评标专家库专家考试历年参考题库含答案详解
- 学堂在线 面向未来社会的服务设计与管理 章节测试答案
- 2025年贵州省12月普通高中学业水平合格性考试化学试卷
- 2026年重庆入团测考试题库附答案(精练)
- 2025年汽车智能控制题库及答案
- 《成功之路+起步篇+2》第5课课件
- 血液透析患者内瘘感染的护理
- 植物拓印艺术课件
- DB32-T 4870-2024 中医膏方临床应用与制备工艺规范
评论
0/150
提交评论