宁波seo优化:下面是用C语言实现BM算法的程序-百姓标王
宁波seo优化专栏

宁波seo优化:下面是用C语言实现BM算法的程序

发布时间:2018-09-22 18:48:04

  P:bccabcetbc

下面是用C语言实现BM算法的程序的图片70

  图4-6比较过程3
  可见,当P向左找不到“tbc”时,就找到“tbc”的最长与P的前缀匹配的后缀,并将P向右移。用L(£)表示这个最长后缀的长度,这个例子中/二8。
  下面是用C语言实现BM算法的程序。
  甘includedstring,h〉
  祐include  #include
  /*辅助数组,取决于字符集,默认的采用ASCII字符集,256个元素*/#defineLEN256
  intBMMatcher(char*s,char*p,intindex,intposition口)/*参数说明:char*s:匹配串
  char*p:模式串
  intindex;模式串匹配的起始位置,是匹配串的索引intposition[]:辅助数组*/intlen=strlen;inti,j,nextindex;i=strlen-1;j=index+strlen-1;for(;i>=0;i----,j------)
  {
  if(s[j]!=p)break;
  >
  if(i<0)return0;/*匹配成功*/
  elseif(position[s[j]]>0)nextindex=index+i-position[s匸jZO;elsenextindex=index十1;if(nextindex>LEN-strlen)retum-1;/*匹配失败,无法进行下一次匹配*/elsereturnnextindex;/*匹配失败,需要下一次匹配*/}
  /*测试,匹配串和模式串都使用小写字符*/
  intmain()
  {
  intposition[LEN]={0};/*辅助数组*/
  char*src=“itisjustatest,whatwouldyoudo?”;/*匹酉己串*/char*patten=“whatwoulcf;/*模式串*/inti,nextindex,index=-2,pos=0;for(i=0;i  index=BMMatcher(src,patten,0,position);while(!(index==-l||index==0))/*循环匹配,直到匹配成功,或者匹配失败结束*/{
  nextindex=index;
  index=BMMatcher(src,patten,nextindex,position);if(index==-1)

下面是用C语言实现BM算法的程序的图片83

  printfCCannotfindit ”);

下面是用C语言实现BM算法的程序的图片74

  if(index==0)

下面是用C语言实现BM算法的程序的图片79

  printf(“Findit,theindexis:%d. extindex);system(”MUSE“);return0;4.2侧雜裣者
  倒排文档是一种面向单词的索引机制,相对顺排文档而言,是将顺排文档中可检索字段的作者名、关键词、分类号等取出,按一定规则排序,归并相同词汇,并把在顺排文挡中相关记录的记录号集合赋予其后,以保证通过某一特征词能够快速、方便地获取相关记录。
  由于倒排文档的组成特点,使得许多数学检索模型(如布尔模型、集合运算等)能够方便地用于信息检索中,它把两个检索词的逻辑运算转换成了两个检索词之间的记录号集合的运算。目前最常见的倒排文档检索为逆波兰展开法。
  倒排检索
  倒排文档的检索算法一般分成如下3步进行。
  ①词汇查找。将查询串中的单词和模式分割成独立的部分,短语和近似査询串被分割成单个词汇。
  ②查找词汇出现的情况。获取与查询串中所有词汇相关的出现情况列表。
  ③词汇出现情况的操作。主要是通过对上一步中获取的词汇出现情况的操作实现短语查询、近似查询和布尔查询。如果词汇出现情况采用的是块寻址方式,那么在执行这些操作的时候就必须对这些块中的文本进行检索,以获取所查询的词汇在文本中的具体位置。
  这样,在对倒排文档进行检索的时候总是从词汇表开始査询。因为一般说来,词汇表可以与倒排文档分开存放,而且它的空间需求比较少,适合于放置在内存中。
  对于单个词汇的查询来说,只要从词汇表中找到对应的单词就可以找到指向该单词的出现情况列表。因此在倒排文档中对于单个的词汇査询来说,其查询的时间复杂度为0(lg/2),其中《为词汇表的长度。对于单个词汇的査询,该词汇的出现情况列表可以直接作为捡索结果返回给用户,而对于多个词汇的査询,还需要対这些列表进行一系列相关的操作。
  在倒检索中进行上下文查询(查询串由多个单词构成,这种情况在査询过程中比较常见)相对于单词汇查询要复杂得多。首先获取查询串中每个词汇的出现情况列表,然后遍历所有这些获取的列表,看看查询串中的词汇是否在文本中顺序出现或者比较靠近。这些列表的合并和交叉运算需要花费的时间比单词查询长得多。
  如果词汇出现情况是以块的方式来呈现的,在上下文搜索中就必须对这些块寻址方式的出现情况列表进行合并和交义运算,对于符合条件的块所对应的文本再进行文本检索,并确定词汇出现的具体位置。
  倒排文档

下面是用C语言实现BM算法的程序的图片73

  倒排文档的组成元素主要包括:关键字(作者、主题词、分类号等)、目长(含有该关键字记录的条数)、记录号集合(所有与该关键字有关的记录号)。倒排文档的建立是建筑在顺排文档(主文档)的基础之上的,它是从主文档中提取可检索字段内容,也有采取自动从标题、文摘或全文中提取关键词,利用所得到的这些属性词来建立倒排文档。
  倒排文档的结构

下面是用C语言实现BM算法的程序的图片84

  倒排文挡可视为主文档的辅助索引,它从不同的角度提供了对主文档的快速查询,一般来说,不同属性的数据构成不同的倒排索引文档,下面给出了10篇文献(见表4.14)的作者倒排文档(见表4.15)和索引词倒排文档(见表4.16)。
  文献部分厲性
  记录号篇名作者索引词
  网络安全技术的採讨A网络安全,防火墙,黑客2网络教育课程开发研究B网络,课程开发,教学设计3构建视频会议系统技术浅析C网络,视频会议,多媒体通信4网络安全在IP城域网的应用A网络安全,城域网,黑客5智能光网络在城域网中的应用B网络,城域网,IP技术6浅谈电信网络的安全A网络安全,通信,IP技术7网络存储技术的研究C网络,存储技术,网络安全8无线接人在网络融合中的应用C网络,无线网,IP技术9网格研究及其面临的问题B网格技术,网络安全10宽带光纤接入网的发展趋势A网络,宽带网,光纤?
  S作者索引

下面是用C语言实现BM算法的程序的图片76

  作者目长记录号集合
  A41:4:6:10
  B32:5:9
  C33:7:8
  关键词索引
  索引词目长记录号集合
  网络安全31:4:6
  防火墙11
  黑客21:4
  网络62:3:5:7:8:10
  课程开发12
  教学设计12
  视频会议13
  多媒体通信13
  城域网24:5
  IP技术25:6
  通信16
  存储技术17
  无线网18

下面是用C语言实现BM算法的程序的图片82

  网格技术19
  宽带网110

下面是用C语言实现BM算法的程序的图片78

  光纤110
  由表4.15、表4.16可以看出,倒排文档主要有3个字段,作者或索引词字段主要为快速检索提供索引,记录号集合的主要作用是为了在检索中进行集合运算和对命中结果的直接调用,目长在检索中起辅助作用。
  倒排文档的建立
  由顺排文档构造倒排文档需要经过抽词、排序、归并和组织等过程,具体实现步骤如下:
  选择需要做索引的字段属性(如作者、关键词等),抽出其中的内容,并在其后附上其记录号;?对抽出的内容进行排序,使之便于归并相同内容;?对相同内容进行归并,把合并后的内容放人倒排文档的主健字段(如标引词、作者等),统计每一数据的频次作为目长,把每一内容后的记录号顺序放在记录号集合字段。
  在建立倒排文档的过程中还有两个问题需要注意。
  上述的过程是批处理的过程,在实际的数据库建设中是不断地追加数据的过程。因此,倒排文档的建立应具有及时更新的功能,所以对批处理创建倒排文档的过程需要更改。首先,从增加的记录中取出倒排索引的字段内容,然后,查询倒排索引。若命中,则将该记录的目长加1,并将增加记录的记录号追加进倒排文档的记录号集合字段。若没有命中,则将该字段内容以及记录号增加到倒排文档之中,并将目长置1。
  由于每一个关键字所对应的记录数相差很大,因此对于只能处理定长字段的数据库或文件系统,需建立溢出文档来解决不定长问题。
  逆波兰表达式
  逻辑提问式类似于算术表达式,对于检索而言,这种表达式并不是最优和最简洁的形式,需要进行必要的转换。1929年波兰的逻辑学家卢卡西维兹提出了梅运算符放在运算项后面的逻辑表达式,又称”逆波兰表达式“。这种表达式能非常方便地进行检索运算。日本的福岛先生最早将逆波兰表达式应用于情报检索,故又称为”福岛方法“。
  逆波兰表达式又叫做后缀表达式,是一种没有括号,并严格遵循”从左到右“运算的后缀式表达方法,如表4.17所示。
  正常的表达式与逆波兰表达式对照表
  正常的表达式逆波兰表达式

下面是用C语言实现BM算法的程序的图片72

  a+fta*6*+
  a+(6—f)a,b,c,一,+
  a+(6—c)*da,</,6,c,一,*,+
  a=l+31,3
  a*(6+c)+cZa,6,c,+,*,£?,+?
  逆波兰表达式的优势在于只用两种简单操作,人栈和出栈就可以完成任何普通表达式的运算,其运算方式如下。
  如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再人栈,最后当表达式扫描完后,栈里的就是结果。

下面是用C语言实现BM算法的程序的图片75

  将一个普通的顺序表达式转换为逆波兰表达式的一般算法如下。
  ①首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越髙的原则。
  ②读人一个简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号”并“。
  ③从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。
  ④如果不是数字,该字符则是运算符,此时须比较优先关系。
  具体做法如下:将该字符与运算符桟顶的运算符的优先关系相比较。如果该字符优先关系高于此运算符栈顶的运算符,则将该运算符人桟。若不是的话,则将栈顶的运算符从栈中弹出,宁波seo优化直到栈顶运算符的优先级低于当前运算符,将该字符人栈。
  ⑤重复上述操作①?②直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,便可以将简单算术表达式转化为逆波兰表示的简单算术表达式。
  不论是算术表达式还是逻辑提问式中,运算符均有其运算优先级,这就决定了表达式转换具有一定的复杂度。在逻辑提问式中,其运算符的优先次序分别为:”一“、”*“、”+“,另外括号内的运算优先级最髙。因此,在转换处理过程中,対运算符的优先级做如下定义(见表4.18)o表4.18运算符的优先级
  运算符优先处現的级别
  
  +2
  *3
  一4
  那么计算机怎样通过后缀式来进行运算呢?这里首先假设读取分析表达式的准备工作都已经做好了,那么首先需要做的是把表达式转换成后缀式,也就是逆波兰表达式的构建过程。
  构建器由两个主要组件组成,一个是目标表达式的存储器,另一个是符号栈。与源表达式的扫描顺序一样,存储器是从左向右储存数据的,而符号栈则遵守后进先出的原则。
  首先读人一个数据。
  ①如果是单目运算符,直接人符号栈;
  ②如果是运输量,则直接写人存储器?,检査符号栈顶是否有单目运算符,有的话则全部出栈,并写人存储器;③如果是左括号”(“,则直接人符号桟;

下面是用C语言实现BM算法的程序的图片81

  ④如果是右括号”)“,则弹出符号桟数据,写入存储器,直到左括号弹出;⑤如果是普通运算符,则与栈顶符号比较优先级,若大于栈顶优先级,则人桟;杏则弹出桟顶符号并写人存储器,直到栈顶符号的运算优先级较小为止;⑥如果是结束符(表示表达式已全部读完),则符号栈全部弹出并写人存储器,否则读取数据进人下个过程。
  此外还有一些处理的技巧,比如定义一个优先级最低的运算符诈为表达式结束的标志,在符号桟里首先加人一个结束标志,那么表达式读完时则自动弹出栈中所有符号,并写人存储器结尾表不成功。
  表示表达式:u*6+c*W+e)构建的过程。

下面是用C语言实现BM算法的程序的图片77

  逆波兰表达式构建过程
  序号表达式目标数据堆桟说明
  a*6+c*(d+e)井井井表示结束符
  a*6+c*(c/+e)并a井a写人内存
  *6+c*(t/+e)并a井**>#
  b+c*(d+e)并ah并*6写人内存
  +f*(t/+e)并ab*并+<*
  c*井ab*并++>井
  c*(d+e)并ab*c井+写人内存
  *(J+e)#ab*c井+**>+
  (朴e)#ab*c井+*左括号送人堆栈
  d+e)井ab*cd#+*(c/写人内存

下面是用C语言实现BM算法的程序的图片71

  +e)#ab*cd井+*(++>(
  e)井ab*cde井+*(+e写人内存
  并ab*cde-——并+*右括号”)“遇左括号”(“弹出堆栈14并ab*cde+*+井并弹出堆栈
  检索指令表的生成
  逻辑提问式的逆波兰表达式不能直接用于检索,还需要将其转换成一组检索指令才能进行检索操作。转换工作是直接针对逆波兰表达式进行的,通过逐行扫描逆波兰输出表,根据其具体内容实现从逆波兰表到检索指令表的转换。
  操作指令表由4列元素组成:第1列为操作码,指定本行操作类型,如输人操作、运算操作、转储操作等;以后3列为操作数属性,根据操作码来决定3个操作数之间的关系,具体处理如下。
  若为检索词,操作码置1,第1操作数存放从逆波兰输出表中取出的检索同地址,第3操作数放置在放该检索词记录号集合的工作区代号。如表4.20表明检索词表的03号关键词的记录号集合存放在第2工作区。
  检索词操作指令表示
  操作码第1操作数第2操作数第3操作数
  
  若为运算符,操作码为”3“、”4“、”5“,分别代表运算符”+“、”*“、”一“,第1、2操作数指定的两个工作区的记录号集合根据操作码进行相关运算,其结果送第3操作数指定的工作区。如表4.21表示第3、4两个工作区的记录号集合进行”与“运算,其结果存放第1工作区。
  运算操作指令表示
  操作码第1操作数第2操作数第3操作数
  41
  若为结束行,将操作码置2,表示转储操作,把检索运算结果送第7工作区。因此,第1操作数放检索结果占用的工作区,将第3操作数置7,表示把检索的最终结果转移到第7工作区,参见表4.22。
  转储操作指令表示
  操作码第1操作数第2操作数第3操作数
  
  转储操作结束,将最后一行的操作码置为0,表示终止操作,其他操作数为空,参见表4.23O
  转储操作指令表示
  操作码第1操作数第2操作数第3操作数
  
  由于计算机内存资源的有限,福岛方法设定工作区为7个,工作区的使用从前向后遇空闲即分配,从而保证了7个工作能够满足检索过程的需要。
  检索实施
  当检索指令表生成后,就进人实际检索处理阶段,整个检索过程主要依赖检索词表和检索操作指令表,执行步骤按照检索指令表的顺序进行,具体操作如下。
  若操作码为”1“,应进行查找和输人操作。将该行第1操作数中数据取出,根据获得的数据来得到检索词,以该检索词去査倒排索引文档,得到的记录号集合存储到第3操作数指定的工作区中。

下面是用C语言实现BM算法的程序的图片80

  若操作码为”2“,说明应进行转储操作。需将第1操作数指定的工作区中的记录号集合存储到第3操作数指定的工作区中。
  若操作码大于”2“,表示需进行逻辑运算操作,应将第1、2操作数指定的工作区中的记录号集合,按操作码代号进行响应的逻辑运算,运算结果存放到第3操作数指定的工作区中。
  若操作碍为”0“,则表示该逻辑提问式检索结束,须根据第7工作区的内容(命中结果)到主文档中调出命中记录,显示或打印给用户。
  其体裣索方铉
  布尔检索
  布尔检索是指利用布尔运算符连接各个检索词,然后由计算机进行相应逻辑运算,以找出所需信息的方法。它使用面最广、使用频率最高。在具体检索时,是通过以下3个布尔运算符来实现其功能的。
  ①AND(或*)
  逻辑与,可用来表示其所连接的两个检索项的交叉部分,也即交集部分。如果用AND连接检索词A和检索词B,则检索式为:
  AANDB(或A*B)
  表示让系统检索同时包含检索词A和检索词B的信息集合C。
  ②OR(或+)
  逻辑或,用OR连接检索词A和检索词B,则检索式为:
  AORB(或A+B)
  表示让系统査找含有检索词A、B之一,或同时包括检索词A和检索词B的信息。
  ③NOT(或一)
  本文转载自
  宁波seo优化www.leseo.net
  补充词条:宁波谷歌seo  宁波网站优化推广  宁波网站排名优化  宁波网站seo优化  宁波seo网站优化 

相关内容推荐

直通车关键词排名掉京东关键词突然排名不见标品关键词排名关键词排名-粒米之光伦敦关键词排名案例谷歌关键词排名代理商官网关键词优化排名多少钱湖南竞价关键词排名刷关键词排名 电话周o斯好提高关键词的自然排名公司电话西藏自治区淘宝刷关键词排名石家庄百度关键词排名哪家公司好许昌关键词搜索排名技巧贵阳seo关键词排名2017环保关键词排名关键词排名倾向出价移动端关键词排名价格是多少钱关键词排名提升柒金手指花总商丘360关键词优化排名工具焦作官网关键词搜索排名工具关键词快速排名qs云速捷丷正规关键词排名收费淘宝商品优化关键词排名阿里后台怎么查看关键词排名正规关键词排名大全江苏关键词排名挖掘怎么查看店铺排名和关键词优化青海正规的关键词优化排名优化关键词排名找大将军16娄底关键词快速排名关键词排名推广策略关键词优化玖金手指排名142021年闲鱼关键词排名阿里巴巴关键词自动排名表优化关键词排名首选金苹果吉林微信关键词排名佛山关键词排名点击恩平百度关键词排名网络关键词排名佳选火28星达刷关键词排名氺金苹果下拉冫湖北省宜昌市关键词排名昭通关键词排名优化方案下拉关键词排名首推29火星澳门关键词优化排名公司百万关键词排名优化技巧提高关键词排名姑云速捷靠谱拼多多的关键词排名怎么做用百家号怎么做关键词排名纺织关键词排名培训查拼多多关键词排名的软件关键词排名100以后百度单个关键词没排名直通车增加关键词排名塑胶杯关键词排名阿里地区关键词排名实力强关键词优化排名多少钱福清关键词排名水果罐头在企业关键词的排名山东青岛seo关键词排名渠道江阴关键词排名湾里区关键词排名网络推广渠道关键词快速排名卑云速捷平顶山百度关键词排名哪家好运城关键词排名优化东莞关键词自动排名河南360关键词排名优化费用浙江网站关键词排名优化费用晋中关键词排名业务前景搜狗网站关键词排名优化拼多多关键词排名越靠前越好吗关键词排名衤金苹果出词快彡关键词排名有什么关系河南排名快关键词排名哪家好上海营销关键词排名优化平顶山百度关键词自然排名工具宁波企业关键词排名关键词竞价排名推荐金手指黑龙江省关键词seo排名优化邢台seo优化关键词排名如何查淘宝标题关键词排名信息关键词排名管理系统关键词优化自然排名模仿人为点击关键词排名标题没有关键词销量排名淘宝搜索关键词排名在哪搜关键词排名下跌原因关键词排名推广服务网站关键词优化排名哪家好移动关键词快速排名外包南京免费建站关键词排名直通车关键词预估排名升关键词排名不只是出高价六盘水关键词排名公司周口新站长尾关键词排名软件提升seo关键词排名价格表常德关键词推广排名苏州关键词排名公司名公司佛山关键词排名服务商鹤壁关键词排名推广陕西关键词排名工具宁德优化关键词排名关键词排名优化企商机下拉关键词排名遴选火星8开封网站长尾关键词排名技巧关键词排名 花总专业ebay推广关键词排名服务关键词的排名怎么操作关键词排名是按照什么排的抖音视频关键词搜索排名青岛关键词排名效果黄石关键词排名分析临沂seo关键词优化排名钱包的关键词排名互联网关键词排名询问报价关键词排名提高不起来菏泽关键词快速排名公司邢台关键词排名哪里有名韶关关键词排名方法关键词排名优化公司外包推广关键词排名项目关键词排名怎么能靠前优化关键词排名就选o火10星门关键词排名接触选云速 捷快速提高网站关键词排名贵州刷搜狗关键词排名关键词哪些属性会影响到排名淘宝搜索关键词排名哪里看刷关键词排名卩金苹果实力5118关键词排名查询工具提升关键词排名室云速捷声名下拉关键词排名首推31火星关键词优化排名wh云速捷氵直通车关键词有排名可否删除为什么关键词越刷排名越靠后黄山网站关键词排名提升工具陕西搜索关键词排名优化技术新民万词关键词排名陕西网站关键词排名优化方案微博关键词排名在哪搜周口整站关键词搜索排名软件关键词排名查询必上榜软件兰州关键词排名公司刷关键词排名提升+sit建湖关键词百度排名名气大的关键词排名网站关键词排名稳定关键词影响宝贝排名来源关键词怎么观察排名关键词排名突然下降怎么办黑帽怎么做关键词排名关键词排名对产品有什么影响甘肃优化手机关键词排名长治关键词排名推广旌阳区关键词seo排名优化嘉兴关键词排名优化技巧余杭区关键词排名企业关键词优化排名qq建群做关键词排名关键词优化排名找大将军20焦作关键词排名推广临沂提升关键词排名的方法搜索关键词排名和电脑不一样关键词排名推广怎样做网络关键词排名可靠易 速达珠海电器关键词排名公司抖音关键词排名技术互联网关键词排名询问报价关键词排名公司心细火23星关键词排名敝瘟 大将军29多功能关键词排名一体化关键词排名犭首选金手指壹柒大众关键词排名规则惠州关键词排名咨询报价陕西关键词seo排名神马手机关键词排名点击软件贵州怎么做关键词排名优化推荐关键词seo排名称赞火星洛阳整站关键词排名优化公司高新关键词排名优化关键词排名单子淘宝直通车关键词排名怎么算百度关键词排名靠前哪家好营销关键词排名优化学习无锡关键词排名推广方式排名关键词公司哪家好app排名关键词积分墙seo关键词排名来选火星6东莞关键词排名首页关键词排名厘金手指下拉贰壹谷歌关键词排名显示淘宝怎样选关键词做排名杀菌灯关键词全世界排名武清关键词排名推广搜狗查关键词排名方法安庆关键词排名渠道百度搜索关键词排名外包澳门百度关键词排名优化济南关键词排名策略关键词排名最好的外链方案淘宝关键词排名代理

合作伙伴

百姓标王

龙岗网络公司
深圳网站优化
龙岗网站建设
坪山网站建设
百度标王推广
天下网标王
SEO优化按天计费
SEO按天计费系统