除留余数法建哈希游戏平台立哈希表的方法改进
哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏
(1.甘肃联合大学理工学院,甘肃兰州730000;2.甘肃联合大学数学与信息学院,甘肃兰州730000)
摘要:查找是从大量的数据中得到所需信息经常要进行的工作。为了更好的查找,在存入数据时一种常用而有效的方法是用除留余数法来建立哈希表,用线性探测法处理冲突。目前,大部分书籍上在建立哈希表时都是一边存储,一边解决冲突。该方法由于哈希表中存在的“堆积”现象,大大降低了查找效率,并且从思想上来看,有很好的符合哈希法的初衷,是不顾后效的。文章对该方法做了改进,有效的克服了该方法的缺点。
在英汉字典中查找某个英文单词的中文解释,在新华字典中查找某个汉字的读音、含义,在对数表、平方根表中查找某个数的对数、平方根,以及邮递员送信件要按收件人的地址确定位置等等。可以说查找是为了从大量的数据中得到所需信息经常要进行的工作。
计算机及网络使信息查询更快捷、方便、准确。要从计算机及网络中查找特定的信息,就需要在计算机中存储包含该特定信息的表。如要从计算机中查找英文单词的中文解释,就需要存储类似英汉字典这样的信息表,以及对该表进行的查找操作。本文将讨论的即是“信息的存储和查找”方面的问题。
查找是许多程序中最消耗时间的一部分。因而,一种好的查找方法会大大提高运行速度。
查找效率依赖于查找过程所进行的比较次数。在我们接触到的算法中,设查找表总长为n,一般要找到所需元素,大部分都得比较n/2次以上。而当n趋于一个比较大的值时,这个n/2就不能小瞧了!
对于查找来说,理想的情况是希望不经过任何比较,一次存取便能得到所查记录,那就必须在记录的存储位置和他的关键字之间建立一个确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。因而在查找时,只要根据这个对应关系f,找到给定值K的像f(K)。若结构中存在关键字和K相等的纪录,则必定在f(K)的存储位置上,因此不需要进行比较便可直接取得所查记录。我们称这个对应关系f为哈希函数,按这个思想建立的表为哈希表。
对于n个数据元素的集合,总能找到关键码K与存放地址一一对应的函数f(K)。若最大关键码为m,可以分配m个存放数据元素的单元,选取函数f(K)=K即可,但这样会造成存储空间的很大浪费,甚至不可能分配这么大的存储空间。通常关键码的集合比哈希地址集合大得多,因而经过哈希函数变换后,可能将不同的关键码映射到同一个哈希地址上,这种现象称为冲突(Collision),映射到同一哈希地址上的关键码称为同义词。可以说,冲突不可能避免,只能尽可能减少。所以,哈希方法需要解决以下两个问题:
3所选函数对关键码计算出的地址,应在哈希地址集中大致均匀分布,以减少空间浪费。
下面讨论常用而有效的方法———除留余数法来建立哈希表,用线性探测法处理冲突。
除留余数法:f(K)=Kmodp(p是一个整数)即取关键码除以p的余数作为哈希地址。使用除留余数法,选取合适的p很重要,若哈希表表长为m,则要求p≤m,且接近m或等于m。p一般选取质数,也可以是不包含小于20质因子的合数。
线性探测法,即是由关键码得到的哈希地址一旦产生了冲突,也就是说,该地址已经存放了数据元素,就去寻找下一个空的哈希地址,只要哈希表足够大,空的哈希地址总能找到,并将数据元素存入。
存储,一边解决冲突,即遇到冲突立刻解决,处理完该数,再去存储下一个数。下面用实例来说明。
50、11、16、92均是由哈希函数得到的没有冲突的哈希地址而直接存入的;
=7,它本身没有同义词,但由于先解决了6和50的哈希地址冲突,造成了7和6,本不是同义词,却产生了哈希地址上冲突,由H1=(Hash(7)+1)mod11
=8找到空的哈希地址存入。同理,8本来没有同义词,却由于先解决了7和6和的哈希地址冲突,造成了8和7、6,本不是同义词,却产生了哈希地址上冲突。这样,线性探测法可能使第i个哈希地址的同义词存入第i+1个哈希地址,这样本应存入第i+1个哈希地址的元素变成了第i+2个哈希地址的同义词,。因此,可能出现很多元素在相邻的哈希地址上“堆积”起来。即采用除留余数法建立的哈希表有以下两个主要的缺点:
(1)由于哈希表中存在的“堆积”现象,即许多关键字被连续登记在一起,大大降低了查找效率。
%不需要进行比较便可直接取得所查记录。在哈希表填入的过程中,处理冲突时会带来新的冲突。在查找时,由于本不应放入该位置的数,却由于冲突的解决,而占了该位置,致使应存入该位置的数,却不在其位。也就是说这种填入方法是不顾后效的。
首先得强调存入是为了读取,哈希表的主要应用是为了方便进行查找,而在实际应用中,通常哈希表都是一次性建立好的,我们针对哈希表的这一特点,可以采用以下的策略:在建立哈希表时不再采取遇到冲突立刻解决的方法,而是先依次填入所有不产生冲突的元素,在填入的过程中 ,将遇到冲突的元素暂时放入一临 时队列中 ,并且记下它发生冲突位置 ,等一趟处理完后 ,
再去专门解决产生冲突元素 (暂存入队列中的元素) 。 我们仍然拿上面的例子来说明。
要解决冲突元素问题 ,将临时队列中的元素填 入哈希表 ,用线性探测法处理冲突 ,处理过程为 :
同理 ,取队列中第二个哈希地址上冲突的数据 元素得 Hash (22) = 0 ,寻找下一个空的哈希地址 :
就是引进外来的机读目录数据或 DVD - ROM 光盘数据 ,将要回溯建库的文献按不同的检索点 (比 较常用的是统一书号或 ISBN 书号) 进行抽取数据 , 发现有相应的数据后进行套录 ,再对其分类号 、馆藏 信息字段加以补充完善 , 并对其他字段进行审校。 这样做的优点是避免重复劳动 ,既方便快捷又能保 证质量 。我馆也套录西北师范大学图书馆少量书目 数据 。在套录的过程中 ,有相当数量的图书没有数 据 ,只能自建数据。
自建数据就是本馆的建库人员依据文献本身或 依据卡片目录进行数据原始录入 。我馆依据文献本 身录入 ,目的是保证数据的完善 、详细和准确 。
严格筛选把关人员。这些人都是编目工作人 员 ,在日常工作中进行图书著录 ,因此对图书著录非 常熟悉 ,如果其他著录人员出现错误 ,他们可以给予 及时的纠正。
2. 2. 4 中国分类主题词表 它是建立中文书目数据库的标准工具。90 年
代出版的《中国分类主题词表》,是在《中图法》类号 类目与《汉语主题词表》主题词对应的基础上 ,将分 类法与主题法先组式与后组式融为一体的一种新型 检索语言 。是主题标引的类目与主题词之大全 。随
输入性错误是指数据输入人员在回溯建库过程 中输入错误 。例如 : 在录入“ @”时忘记按 [ shift ] 键 而录入‘2’,多字 、少字 、错字 ,将 1976 输成 1996 等 等 。这种错误出现的几率很大 ,只要稍有疏忽很容 易产生 ,因此著录过程中要耐心 、细致 。
套录数据的优点是数据相对标准 、建库速度也 相对较快 。但这种做法有一个缺点 ,即任何一个数 据库都不能将本馆的所有馆藏图书全部包括在内 , 不论哪个数据库套录的同时还得补做原始数据的著 录 ,而且还存在数据格式不统一 ,不标准的问题 。目 前 ,国内的书目数据没有哪一种能实现全部套录不 用修改 。因此 ,我们在套录数据时 ,应该清楚地认识 到 ,套录数据并非机械地复制 ,需要工作人员认真审 核 ,对出现的问题一定要进行修改 ,以确保套录数据 的总体质量。
由于 2001 年前的书 ,还未进行回溯书目数据的 建库工作 ,读者必须持有两种借书证 ,造成诸多的不 便 。因此对我馆基本书库的回溯书目数据的建库 , 必须加快进行 。
总之 ,馆藏回溯书目数据库的建设是图书馆自 动化的核心之一 ,它牵动着图书馆自动化管理系统 能否全面使用 ,是各个功能是否得以实现的前提和
知识性错误是指著录人员知识掌握不够。例 如 :在 200 字段中西方个人著者名字必须倒序 ,但有 的人著录过程中没有倒序 ,分不清姓名 ; 不了解《分 类法》,出现分类号错误 。对这种错误必须要求在著
因此要不断的进行维护 , 它包括对数据的修改 、替 换 、更新 、合并 、删除等 ,并形成维护制度 ,确保书目 数据回溯建库的质量 ,满足我校教学和科研工作的 需求 。
在改进的方法中 ,考虑了以后有可能发生的情 况 ,避免了非同义词抢占同一个单元的可能性 ,处理 冲突时不会再带来新的冲突 ,冲突次数大大减少 ,查 找效率自然能够提高 。另外 ,改进的方法在读取数
据时不需面对非同义词的冲突 ,绝大部分数据不需 要进行比较便可直接取得所查记录 ,理论上也更接 近哈希法的初衷 ,从而为查找带来更大的方便。 参考文献 :
[ 2 ] 徐士良. 计算机软件技术基础. 清华大学出版社 ,2005.