信息检索论文范文篇1
桶排序法,先把被排数据所分布的区间[Dmin,Dmax](在这里Dmax,Dmin分别为被排数据的最大,最小值)划分成N个大小相等的子区间,称子为“桶”,然后将N个数据根据其大小分配入相应的“桶”内(桶[1],桶[2],…,桶[N])。借签桶排序中将数据根据其大小分配入相应“桶”的思想,我们在检索时将已排好序的数据也根据其大小将其分配入相应的“桶”内,然后再在“桶”内进行二分检索。假设按升序排列的N个数据已存放在data数组的元素data[0]~data[N-1]中,构造一个HASH函数为:
(式中Dmax=data[N-1],Dmin=data[0],N为数据个数)
二、基于HASH函数的二分检索算法HS
算法HS使用二个数组,data数组的元素data[0]~data[N-1]中存放按升序排列的N个数据,address数组的元素address[1]~address[N]中用来存贮经HASH函数转换后得到相同地址的数据个数。
算法HS
HS1[清address数组]将ddress[1]~address[N]都置0
HS2[Dmax中置最大值、Dmin中置最小值]Dmaxdata[N-1],Dmindata[0]
HS3[i置初始值]i0
HS4[求数据data[i]的HASH变换后的地址ad]ad
HS5[地址“碰撞”记数器address[ad]加1]address[ad]address[ad]+1
HS6[修改i]ii+1
HS7[比较i与N-1]若i<=N-1,则转HS4,否则转HS8。
HS8[address[0]置初值1]address[0]1
HS9[j置初始值]j1
HS10[求地址发生“碰撞”的数据在DATA数组中的首地址]address[j]=address[j]+address[j-1]
HS11[修改j]jj+1
HS12[比较j与N]若j<=N则转HS10,否则转HS13。
HS13[输入一个被检索的数据X]
HS14[对被检索数据X用HASH函数得地址ad]
HS15[确定“块”的下界low,上界high的值]lowaddress[ad-1],highaddress[ad]-1
HS16[在“块”内进行二分检索]在给定的下界与上界之间进行二分检索,若找到,则返“检索成功”信息,否则返加回“检索失败”信息。
HS17[本算法结束]
三、平均检索长度的分析
在本检索算法中,首先将被检索数据X经HASH函数转换出一个地址,根据这个地址将被检索的数据直接定位到相应的“块”中,然后在“块”中进行二分检索。因此通过对所有“块”内二分检索法的平均检索长度的计算就可求出本算法的平均检索长度。二分检索法的平均检索长度为:
下面我们来求本算法的平均检索长度。假设在N个数据均匀分布的情况下,经过本检索算法中HASH函数转换,每一个地址出现的概率相同,都等于1/N,因此,有m个数据转换得到相同地址的概率为:
(m=1,2,…,N)
参考文献[1]的附录中已证明:(1)
所以本检索算法的平均检索长度为(2)
由上式(1)和式(2)两个公式即可求得本算法的平均检索长度,其平均检索长度小于1.352(当N>100时)。
四、算法分析与实验结果
1.本算法的创新之处在于通过HASH函数可将被检索的数据X直接位置定位到相应的“块”(通过HASH函数转换后的地址相同的数据区间)中,再在“块”中进行二分检索。从而不再需要建立索引顺索表检索算法中的索引表,也就省去了索引顺索表检索算法中查找索引表确定所在“块”的平均检索长度。
2.此方法突破了HASH表的平均检索长度是装填因子(=(表中填人的记录数)/(哈希表的长度)的函数,而不是N的函数的弱点。
3.在理想情况下,即数据完全是均匀分布的情况下,本算法的平均检索长度可达理论极限值ASL=1。即使是在最坏的情况下,当N个数据经HASH函数转换后的地址均相同,所有数据均落在同一个“块”中,其平均检索长度ASL也只会下降到二分检索法时的平均检索长度。
4.本算法对于均匀分布的数据是极为有效的,通过计算得出其平均检索长度小于1.352(N>100时),因此检索效率很高。
5.本算法中的步骤HS1~HS12仅仅是为检索作的准备工作,相当于初始化的工作,只需在检索开始时做一次即可。
6.实验结果。为了对本检索算法的检索效率进行验证,我们用VB6.0编写了本算法以及二分检索法的程序,将二种检索算法的平均检索长度进行实际测定,实验中所用的数据由VB6.0的随时函数产生,数据的范围为(0~10000),实验结果如下表所示:
VB6.0程序二种检索算法平均检索长度对比表
我们在实验中测定平均检索长度时,通过程序对所有数据逐个检索,统计出检索完所有数据需进行比较的总次数再除以数据总数后得出。上表中当N=100时,本算法实际测定的值(1.38)与理论计算(1.352)略有误差,原因是我们用VB6.0中的随机函数产生的随机数在数据量较小时分布不一定很均匀。从表1中可以看到:当数据量稍大一些(N>100),本算法的平均检索长度的实测结果完全与理论分析一对致,并且远小于二分检索法的平均检索长度。本算法的平均检索长度随着数据量N的增加几乎不变。
[摘要]构造一个新的HASH函数,结合索引顺序表和二分检索法的思想,提出了一种高效率的信息检索算法,通过理论计算和实验证明此算法的平均检索长度小于1.352(N>100)。
信息检索论文范文篇2
作者:李爱军 孙智英 单位:山东农业大学图书馆 潍坊科技学院
在查找英文文献时更是如此,如要查找与土壤铜形态转化有关的文献时,可以直接查“copperspeciation”也可以查“cop-perfractionation”还可以将前面的“copper”换成“heavymetal”,这样就可以保证对所有相关的资料都检出。当然在检出条目过多时也可缩小检索的范围,或者在检出的文献中再选择关键词进行检索,以保证检出那些与目标内容密切相关的文献。运用检索的规则,调整检索范围对于文献较多的检索,不可能每篇文章都看,需要从中筛选出密切相关的进行阅读,因此需要调整策略进一步缩小检索的范围,减少文献检出的数量。而对于文献较少的内容则希望扩大检索的范围,这就需要熟悉检索规则,合理界定检索的范围。常用的方法有:(1)逻辑与(逻辑乘)的运用。用“and”或“*”连接几个检索词,可以缩小检索范围,减少检出文献的数量。例如,AandB(A*B)表示检出记录中必须同时含有检索项A和B,两个概念的交叉,即用逻辑与连接的检索词越多,检索范围越小[2-3]。(2)逻辑或(逻辑和)的运用。用“or”或“+”连接检索词,如检索AorB(A+B)可以检出单独含有检索项A或检索项B以及同时含有A、B两者的文献,可大大扩大信息检索范围,提高查全率,避免都信息查找的遗漏。(3)逻辑非(逻辑差)的运用。用“not”或“-”连接检索词,如AnotB(A–B)表示检索内容中有A但没有B,即凡含有检索项A而不含检索项B的记录为命中记录。逻辑非检索可以有效排除不相关的文献,提高了检索内容的准确度。运用通配符进行模糊搜索一般用“?”和“*”等通配符可以代替检索词中的一个或多个字母,这样仅利用检索词的部分不完整词形即可进行检索。通配符可以放在词根的前面、后面、中间,也可以放在两端。例如,检索“?Comput-er”则凡是后方为computer的词均可被检出,如可检出Microcomputer、Minicomputer等。检索“Comput-er?”时,前方为computer的词均可被检出,检出词可为Computers、Computerization等。检索“?Com-puter?”,检出词可为:Microcomputer、Minicomputer、Computers、Computerization等,凡是中间部分包含Computer的词均可被检出。对于意思相同但写法不同的的词,为了将所以包含这些词的文献检出,可将通配符置于检索词的中间,而词的前后方一致进行检索。通常用于英、美拼写不同的词的检索。如,检索“Colo?r”,检出词可包括为Colour和Color。限定检索词的出现位置有时为了提高查准率,需要固定检索词出现的位置关系,那么就需要用到一些限制位置的特殊用法。
位置限定运算符号一般有以下四种:①使用N(near的缩写)表示检索词的距离远近,如A(N)B表示两词相邻且词序可变,A(nN)B表示两词间可插入n个词(n为0,1,2…整数)[3,4]。②使用S(sentence的缩写)表示两次在句子中的关系,如A(S)B表示两词必须同时出现在同一句短语中,两词的前后顺序不限,中间插入词数量不限。③使用F(是field的缩写)表示两词在字段中的位置关系,如A(F)B表示A、B两检索词必须同时出现在同一文献记录的同一字段中,词序、中间插入词的数量不限,但必须指定所要找的字段。④用C(是citation的缩写)表示两检索词在文献纪录中的位置关系,如A(C)B表示两词必须同时在同一个文献记录中,两词的词序、出现的字段不限。限定检索的范围电子文献信息资源内部还包含许多个信息资源数据库,为了提高检索的速度和提高查准率,可以对要检索的数据库进行选定。如目前的[中国期刊全文数据库]可分为:理工A、理工B、理工C、农业、医药卫生、文史哲、政治军事与法律、教育与社会科学综合、电子技术与信息科学、经济与管理等10大专业数据库。如果要查找与农业相关的专题(如作物栽培)可以只选农业专业数据库即可。
而对有些检索主题可能会涉及多个专业数据库,那么就可以多选几个。在具体检索时还可对检索范围进行限定,如可选择检索词出现的位置,如主题、篇名、刊名、关键词、摘要、作者、单位及参考文献等,还可限定刊物出版的时间段等。利用二级检索功能或高级检索功能二级检索是指利用前一次检索的结果作为后一次检索的数据库,逐步缩小检索范围,即在上一次的检索查询结果中,再输入另外的检索词进行查询,这样检索的结果相当于用“and”或“*”连接几个检索词,或者直接输入几个关键词的检索效果,可以缩小检索范围、提高查准率。几乎所有的数据库都提供高级搜索服务,使用这一功能就可方便地对自己要检索的内容进行限定,在这里可以增加附加的检索条件,以缩小查询的范围,不同的搜索引擎提供不同的选项,常规的选项一般包括日期、作者、关键词、文献类型、范围、网域、语言等。
信息检索论文范文篇3
一、前言
计算机的日益普及和计算机技术日益成熟,使得计算机在工业控制监测中的应用渐渐深入。但工业应用不同于其它方面,它要求有较强的实时性。现在有很多的DOS软件在运行过程中通过挂接外部中断方式实现DOS应用软件与外设的实时通信,这种方法实现起来十分简单。而在Windows中应用程序能否也能够利用外部硬中断实现外设与Windows应用程序的实时通信呢?答案是肯定的。这里的关键是要解决好中断代码与Windows应用程序相互之间交换信息的问题。
从外设发送异步的硬中断,通过中断处理程序传递一条信息给Windows应用程序。这时可以初始化相关端口,准备好数据,然后进行数据传送,从而做到实时通信。
实现Windows应用程序响应外部中断的方法有很多,如Microsoft公司自己开发的SDK、DDK软件包,使用嵌入式汇编等等。本文将介绍一种在BC++3.1的基础上利用Windows3.1拥有的一些功能实现Windows实时通信的实例。
二、中断代码的位置
在Windows中,几乎所有的异步事件都是由中断处理程序来管理的。中断处理程序包含在设备驱动程序中,由Windows在环境初始化中安装。例如,KEYBOARD.DRV、MOUSE.DRV和COMM.DRV均含有中断处理程序,以处理相应的键盘、鼠标和串行口的异步中断。可以仿照标准设备驱动程序,编写中断处理代码,以响应外设的通信请求,从而完成一次实时通信。
中断代码既可以包含在应用程序的可执行代码中,也可以包含在动态连接库(DLL)中。包含在应用程序中的代码只能在一个程序中使用,而在动态连接库中的代码则可以在Windows系统中所有的应用程序所共享。这样不仅在整个Windows系统中只有一个中断代码的副本,提高了内存的使用效率,更重要的是可以防止由于同时存在多个中断代码的副本而发生冲突。本文将在DLL中编制中断处理程序。
当动态连接库被装入时,要调用DLL库的入口点LibMain(),利用这一点可以执行一些初始化工作,可以分配一些内存块,可以初始化一些全局变量或者静态变量,可以安装中断服务程序的代码等等。例如:
voidinterrupt(oldIsr)(--CPPARGS)
/*旧的中断服务程序地址*/
LibMain(HANDLEhInstance,WORDwDataSeg,WORDcbHeapSize,L
PSTR
lpszCmdLine)
{
…
oldIsr=getvect(IRQNum);
/*IRQNum指中断号*/
setvect(IRQNum,newIsr);
/*newIsr指新中断服务程序代码*/
return(1);
}
函数setvect()既可在实模式下,也可在保护模式下设置中断处理向量。
上述代码也可以放在一个由用户设置的引出(export)函数中,在应用程序中用户可以调用此引出函数来安装中断服务程序代码。
由于中断可以在任何时刻发生,中断代码必须驻留在内存中,并且在应用程序运行的过程中一直处于某一固定内存中。这一点无论是在实模式还是在保护模式下都是一致的。
在DLL的模块定义文件中应注意:
1.CODE语句为固定代码段,即FIXED;
2.EXPORTS语句要引出被应用程序和其它DLL用作入口点的函数。
三、通信机制
编写实时通信例程关键在于必须认识到,异步事件对应用程序的触发是异步发生的,不在Windows的消息处理机制和多任务范围内。为了使通信例程能够正确地工作,通信例程必须通知Windows有异步事件发生,且不能打断应用程序的任务管理或消息流。要作到这一点,通信例程必须通过调用PostMessage或PostAppMessage函数向应用程序的消息队列中加入一条消息。
需要注意的是,在DLL中调用PostMessage(HWNDhwnd,…)时,必须先确定hwnd的实际值,可以通过使用引出函数的办法来实现,如下所示:
staticHWNDhWndApp;
voidFARPASCALSetIsrWin(HWNDhwnd)
{
hWndApp=hwnd;
}
然后在应用程序的窗口函数中,对WM-CREATE消息进行处理时调用此函数来初始化DLL中的静态变量hWndApp:
CASEWM-CREATE:
…
SetIsrWin(hwnd);/*hwnd指应用程序窗口句柄*/
定义一个在应用程序中使用的消息:
#defineISRM-RUPTWM-USER+255最后在DLL中的中断服务程序代码中,调用PostMessage即可完成Windows应用程序和中断服务程序代码相互的信息交流:
voidinterruptnewIsr(--CPPARGS)
{
…
PostMessage(hWndApp,WM-RUPT,wParam,lParam);
…
}
四、程序实例
本示例先安装在DLL中的外中断服务代码,通过386/AT总线上的中断申请线(IRQ12)外触发,由中断服务代码发送一条消息WM-RUPT通知Windows应用程序外设有实时通信请求,应用程序收到这条消息后,在窗口用户区显示一条信息,表明已和外设联络上,并同时鸣叫一声喇叭。
版权声明:本文为一世相伴论文网(www.14380.com)发表,未经许可,不得转载。
- 上一篇:纳米材料论文范文(精选3篇)
- 下一篇:计算机毕业设计论文范文(精选3篇)