呼叫号码查找方法

文档序号:7929207阅读:910来源:国知局
专利名称:呼叫号码查找方法
技术领域
本发明涉及通讯领域,特别指一种接收呼叫后,查找与该呼叫最为匹配的呼叫号码查找方法。
背景技术
在电信运营中,经常出现一些需要根据主叫号码或被叫号码在国际区号表、国内区号表或本地局号表中匹配出长度最大的国际区号、国内区号或局号的情形,比如交换局接到用户呼叫需要根据被叫号码查找最为匹配的电话号码,通过合适的路由交换到被叫号码所在的局。因此,呼叫号码的最大匹配问题成为现今电信运营中广为遇见的问题。
所谓字符串最大匹配,即为对一个字符串,将该字符串跟一个已经存在的字符串集中的所有字符串进行匹配,在字符串集中满足下述要求的一个字符串称为待查找字符串的最大匹配(1)假定该字符串长度为n位,n为大于或等于1的整数,则该字符串与待查找字符串的前n位完全相同。比如待查找的字符串是1234567,在字符串集中有一个字符串是12345,其前5位与待查找的字符串相同。
(2)该字符串是已经存在的字符串集中满足条件(1)的字符串中长度最长的字符串。比如待查找的字符串是1234567,在字符串集中存在满足条件(1)的字符串只有12、123和123456,由于字符串123456长度最长,则认为123456是1234567的最大匹配。
对于一个字符串,在一个字符串集中查找其最大匹配时,可能查找到其最大匹配,也可能其最大匹配不存在。假设某市的本地局号表中有“1”、“12”、“13”、“3”、“34”、“123”、“4”、“43”、“123457”和“1234”共10个局号数据,要在10个这局号表中查找被叫号码“1234567”对应的最大匹配局号就应该为“1234”,如果要在10个这局号表中查找主叫号码“5432222”对应的最大匹配局号则查找失败,无对应的最大匹配局号,这就是字符串的最大匹配查找问题。
为了后面的描述更方便,先定义两个概念全匹配和长度匹配,全匹配的概念是假定字符串集中有一个字符串,如果该字符串是待查找字符串从首位开始的完全子串,则该字符串是待查找字符串的全匹配,匹配位数为该字符串的长度,这与前面最大匹配定义里的(1)是相同的。在字符串集中,长度最大的全匹配为待查找字符串的最大匹配。
长度匹配的概念是假定字符串集中有一个字符串,如果该字符串不是待查找字符串从首位开始的完全子串,但该字符串的前若干位跟待查找字符串的前若干位相同,则该字符串为待查找字符串的长度匹配字符串。假定该字符串长度为n位,其前i位与待查找字符串的前i位完全相同,其中i<n,则该字符串是待查找字符串的长度匹配,匹配位数为i。比如待匹配的字符串是1234567,在字符串集中有一个字符串是123457,其前5位与待匹配的字符串相同,则123457是1234567的长度匹配,匹配位数为5。
目前字符串匹配的常用查找方法是这样的一、先将字符串集按照字符串的字典顺序排序存放在字符串数组中,假设字符串集中字符串的个数为N个,待查找的最大匹配的字符串长度为M,设置变量m的初值为M;二、取待查找的字符串的前m位长子字符串,采用二分查找的方法在整个字符串数组中对该子字符串进行完全匹配查找,如果查找到全匹配字符串,则查找成功,结束最大匹配查找;否则执行下一步骤;三、将变量m的值减1,转步骤二,直到变量m的值等于1,这时查找最大匹配失败。
以在上述字符串集中查找字符串“1234567”的全匹配为例,这种方法的意思是,先取m最大等于7,用二分查找的方法在字符串集中查找与“1234567”完全相同的字符串,没有找到,将m减1,在字符串集中查找与“123456”完全相同的字符串,.......,直到当m=4时,找到“1234”为止,“1234”就是所要查找的最大匹配。
这种方法的缺点是需进行多次查找,而各次查找过程中的有关比较结果没有得到很好的利用,比如当m=6时,没有利用到m=7时的比较结果,当然,m=5时也没有利用m=7和m=6时的比较结果,每次都需要进行单独的、与前面结果没有联系的二分查找,因此进行字符串比较的次数太多,大大降低了匹配查找的效率。也就是说,在上述方法的二分查找中,注意力全部集中在查找全匹配上,然后得到最大匹配,但实际上在比较匹配时,即使没有找到全匹配,但比较的过程中往往被比较的字符串有几位与待查找的字符串是相同的,而以外的方法没有利用这些信息来调整后面的查找过程,造成查找效率极低。
技术内容本发明的目的是提出一种在后一次的查找过程中,能够充分利用前面的比较结果,大大减少比较次数,提高匹配查找效率的呼叫号码查找方法。
为实现上述目的,本发明提出的一种呼叫号码查找方法,该方法在已按字符串进行字典排序的呼叫号码字符串集中查找该呼叫号码字符串,具体包括以下步骤a、在字符串集中用二分法查找该呼叫号码字符串,并在查找过程中记录满足该呼叫号码字符串的若干位全匹配和若干位长度匹配的位置及匹配位数;b、将该呼叫号码字符串长度从最大查找长度开始,然后按本步骤执行的次数逐次递减1,判断是否存在匹配位数等于该结果+1的全匹配;找出匹配位数等于该结果的长度匹配的位置和匹配位数小于该结果的最大值的长度匹配的位置,并在与该两个位置相应的区间中进行二分法查找该呼叫号码字符串的前面若干位子字符串,其若干位数等于该结果,并在所述的二分法查找过程中记录或更新满足该前面若干位子字符串的若干位全匹配和若干位长度匹配的位置及匹配位数;重复步骤b、直到该结果等于1。
其中,为了进一步的提高查询效率,所述的步骤a中,如果该呼叫号码字符串的长度不大于呼叫号码字符串集中字符串的最大长度,则二分查找该呼叫号码字符串;否则,二分查找该呼叫号码字符串的前面若干位子字符串,其若干位数为呼叫号码字符串集中字符串的最大长度。所述的步骤b中找出匹配位数小于该结果的最大值的长度匹配的位置更进一步包括如果不存在匹配位数为小于上述结果的最大值的长度匹配,则在匹配位数等于上述结果的长度匹配的位置与起始位置相应的区间进行二分查找。
所述的步骤b更具体包括以下步骤b1、将该呼叫号码字符串长度从最大查找长度开始,然后按本步骤执行的次数逐次递减1,如果该结果等于0,则查找失败,否则继续;b2、判断是否存在匹配位数等于该结果+1的全匹配,如果存在,则该位置上的字符串就是所要查找的最大匹配,查找结束;否则继续;b3、如果不存在匹配位数等于该结果的长度匹配,则回到步骤b1,否则找出匹配位数等于该结果的长度匹配的位置和匹配位数小于该结果的最大值的长度匹配的位置,并在与该两个位置相应的区间中进行二分法查找该呼叫号码字符串的前面若干位子字符串,其若干位数等于该结果,并在所述的二分法查找过程中记录或更新满足该前面若干位子字符串的若干位全匹配和若干位长度匹配的位置及匹配位数;重复步骤b1、步骤b2、步骤b3、直到该结果等于1。
本发明的效果在于一般的方法在进行二次查找的过程中,在上一个循环中的某些信息,一些比较结果被轻率地丢弃了,比如虽然在上一次循环中虽然找不到全匹配的字符串,但在比较的过程中经常会出现待查找的字符串和二分查找时查到的字符串的前若干位相同的情况,这些信息在现有的方法中统统被丢弃了,本发明正是充分利用了这种信息,把这些长度匹配保留,比如在前一次匹配中找到两个匹配点I,J,I<=J,如果本次循环在所有匹配项中没有找到一个全匹配,因为匹配项按照字符串顺序排列,例如升序,则可以确认,在J到字符串集的最后一个字符串之间肯定无法找到我们所需要的最大匹配项,因为如果有最大匹配项,二分查找时找到J的位置就要靠后。将匹配的范围缩小到字符串集的第一个字符串到J之间,显然,最有可能的最大匹配项应该位于I-J之间,于是将被匹配项长度减至J,在I的位置和J的位置之间进行匹配。如果找不到最大匹配项,则在0-I之间进行匹配。如此重复,可以不断逼近我们所需要的匹配项直至找到最大匹配。当然,找到的匹配点可能不止I和J,可能还有其他的匹配点,但道理是一样的,都是在匹配点之间的小区间中进行二分查找,而不是象现有技术那样每个循环都是从头到尾进行二分查找,而由于记录下了I和J的匹配位数,本发明就可以直接降至该位数进行该位数的二分查找。也就是说,本发明在后一次的查找过程中,利用了前一次的比较结果,大大减少了其比较次数,提高了匹配查找的效率。本发明方法字符串匹配成功和失败的字符串平均比较次数为2*log(N),N表示字符串集中字符串的个数,跟需查找最大匹配字符串的长度无关。而现有技术查找成功的字符串平均比较次数为log(N)*M/2,查找失败的字符串平均比较次数为log(N)*M,N表示字符串集的个数,M表示需查找最大匹配的字符串长度。因此,本发明大大减少了匹配成功和匹配失败的比较次数,提高了匹配查找的效率。


图1是本发明呼叫号码查找方法的流程图;图2是本发明呼叫号码查找方法的步骤b的流程图。
具体实现方式图1是本发明呼叫号码查找方法的流程图。在图1中,可以看出本发明的实现过程。现在举一个例子说明本发明的具体实施。
假定被查找的字符串集中的字符串的数量为32个,字符串最大长度为10,这些字符串是234562、234563、23458、23459、2346、11111、2、21、23453、234561、235、24、1111、22、23、231、232、2325、234、2343、23451、23452、25、26、3、1、11、111、2341、2342、31、32。
上述的呼叫号码字符串集按字符串的升序排列,其内容如下A
=1A[1]=11A[2]=111A[3]=1111A[4]=11111A[5]=2A[6]=21A[7]=22A[8]=23A[9]=231A[10]=232A[11]=2325A[12]=234A[13]=2341A[14]=2342A[15]=2343A[16]=23451A[17]=23452A[18]=23453A[19]=234561A[20]=234562A[21]=234563
A[22]=23458A[23]=23459A[24]=2346A[25]=235A[26]=24A[27]=25A[28]=26A[29]=3A[30]=31A[31]=32其中[]中0-31代表字符串的位置,A[ ]表示该位置上字符串的值。
将需要在其中查找的字符串集中的字符串按升序排列,这意味着在该字符串集中,靠后的项总要大于靠前的项。这样,本发明将尽量在靠后的区域查找匹配项。若在表中找出几个全匹配项,则可毫无异议地认定最后一个全匹配项为正确的最大匹配项。
一、在整个字符串集中进行二分查找该呼叫号码字符串,并在查找过程中同时记录满足该呼叫号码字符串的若干位全匹配和若干位长度匹配的位置、匹配位数;二分查找的方法是这样的对起始查找的位置和结束查找的位置取平均值,比较该位置的字符串与最大长度的该呼叫号码字符串的匹配情况,如果是全匹配或长度匹配,则记录其位置和匹配位数,其中如果该位置的字符串不小于本次二分查找待查找的字符串,则将该位置-1作为下一次结束查找的位置,否则将该位置+1作为下一次起始查找的位置;否则,直接进行正常的二分查找过程。
假设在上述字符串集中查找字符串23456789的最大匹配。用loaction[i]表示匹配位数为i的长度匹配的位置,长度匹配在前面已经定义,先初始化loaction[i]=-2,然后赋值location
=-1;用matched[i]表示匹配位数为i的全匹配的位置,全匹配在前面已经定义,先初始化matched[i]=-1。先假设字符串集中字符串的最大长度为10,而待查找字符串23456789的长度为8,因此在字符串集中进行二分查找待查找字符串23456789第一次循环开始查找的位置是0,结束查找的位置是31,取0和31的平均值取整为15,A[15]=2343<23456789,将15+1=16作为下一次开始查找的位置;而2343与23456789的前3位相同,2343是23456789匹配位数为3的长度匹配,记录loaction[3]=15。
第二次循环开始查找的位置是16,结束查找的位置是31,取16和31的平均值取整为23,A[23]=23459>23456789,将23-1=22作为下一次结束查找的位置;而23459与23456789的前4位相同,23459是23456789匹配位数为4的长度匹配,记录loaction[4]=23。
第三次循环开始查找的位置是16,结束查找的位置是22,取16和22的平均值取整为19,A[19]=234561<23456789,将19+1=20作为下一次开始查找的位置;而234561与23456789的前5位相同,234561是23456789匹配位数为5的长度匹配,记录loaction[5]=19。
第四次循环开始查找的位置是20,结束查找的位置是22,取20和22的平均值取整为21,A[21]=234563<23456789,将21+1=22作为下一次开始查找的位置;而234563与23456789的前5位相同,234563是23456789匹配位数为5的长度匹配,刷新loaction[5]=21,loaction[5]=19就被更新了。
第五次循环开始查找的位置是22,结束查找的位置是22,二者相等,本次二分查找结束,而且未找到全匹配,继续下一步。
二、如图2所示,将该呼叫号码字符串长度从最大查找长度开始,然后按本步骤执行的次数逐次递减1,如果该结果等于0,则查找失败,否则继续;如果存在匹配位数等于该结果+1的全匹配,则该位置上的字符串就是所要查找的最大匹配,查找结束;否则继续;如果不存在匹配位数等于该结果的长度匹配,则回到步骤二,否则找出匹配位数等于该结果的长度匹配的位置和匹配位数为小于该结果的最大值的长度匹配的位置,并在与该两个位置相应的区间中进行二分查找该呼叫号码字符串的前面若干位子字符串,其若干位数等于该结果;并在所述的二分查找过程中记录或更新满足该前面若干位子字符串的若干位全匹配和若干位长度匹配的位置及匹配位数;重复步骤二、直到该结果等于1。
其中,匹配位数等于上述结果的长度匹配的位置-1和匹配位数为小于上述结果的最大值的长度匹配的位置+1构成的区间,如果匹配位数等于上述结果的长度匹配的位置-1不大于匹配位数为小于上述结果的最大值的长度匹配的位置+1,则继续回到步骤二。
将前面使用的呼叫号码字符串从查找长度8开始,匹配位数等于8的全匹配和长度匹配均不存在;重新开始步骤二,将前面使用的呼叫号码字符串长度8减1为7,匹配位数等于7的全匹配和长度匹配均不存在;重新开始步骤二,将前面使用的呼叫号码字符串长度7减1为6,匹配位数等于6的全匹配和长度匹配均不存在;再重新开始步骤二,将前面使用的呼叫号码字符串长度6减1为5,匹配位数等于5的全匹配不存在,但匹配位数等于5的长度匹配存在,而在步骤一的过程中出现的长度匹配是loaction
=-1loaction[3]=15loaction[4]=23loaction[5]=21找到匹配位数等于5的位置是21,匹配位数为小于5的最大值4的长度匹配的位置是23,最大匹配位数为5,匹配位数等于21不大于23,重新开始步骤二;将前面使用的呼叫号码字符串长度5减1为4,匹配位数等于4的全匹配不存在,但匹配位数等于4的长度匹配存在,此时的长度匹配是loaction
=-1loaction[3]=15loaction[4]=23找到匹配位数等于4的位置是23,匹配位数为小于4的最大值3的长度匹配的位置是15,最大匹配位数为4,以匹配位数4确定的呼叫号码字符串“2345”,在16和22之间再进行二分查找第一次循环开始查找的位置是16,结束查找的位置是22,取16和22的平均值取整为19,A[19]=234561>2345,将19-1=18作为下一次结束查找的位置;而234561与2345的前4位相同,234561是2345匹配位数为4的长度匹配,记录loaction[4]=19;但由于4等于本次查找的最大匹配位数4,在下一次二分查找时是到前面的过程中出现的所有更新后的、并且匹配位数小于本次二分查找中所用的最大匹配位数的长度匹配中,寻找匹配位数最大的位置和匹配位数其次大的位置,所以这个记录已经没有什么意义了。
第二次循环开始查找的位置是16,结束查找的位置是18,取16和18的平均值取整为17,A[17]=23452>2345,将17-1=16作为再下一次结束查找的位置;而234561与2345的前4位相同,234561是23456789匹配位数为4的长度匹配,记录loaction[4]=17,同样,这个记录已经没有什么意义了。
第三次循环开始查找的位置是16,结束查找的位置是16,二者相等,本次二分查找结束,而且未找到全匹配,继续进行查找。
此时,前面的过程中出现的所有更新后的、并且匹配位数小于上一次二分查找中所用的最大匹配位数的长度匹配为loaction
=-1loaction[3]=15找到匹配位数等于3的位置是15,不存在匹配位数小于3的长度匹配,最大匹配位数为3,以匹配位数3确定的呼叫号码字符串“234”,在0和14之间再进行二分查找第一次循环,开始查找的位置是0,结束查找的位置是14,取0和14的平均值取整为7,A[7]=22<234,将7+1=8作为下一次开始查找的位置,22与234的前1位相同,22是23456789匹配位数为1的长度匹配,记录loaction[1]=7。
第二次循环,开始查找的位置是8,结束查找的位置是14,取8和14的平均值取整为11,A[11]=2325<234,将11+1=12作为下一次开始查找的位置,2325与234的前2位相同,2325是23456789匹配位数为2的长度匹配,记录loaction[2]=11。
第三次循环,开始查找的位置是12,结束查找的位置是14,取12和14的平均值取整为13,A[13]=2341>234,将13-1=12作为下一次结束查找的位置,2341与23456789的前3位相同,2341是234匹配位数为3的长度匹配,刷新loaction[3]=13,但是该值没有任何意义。
第四次循环,开始查找的位置是12,结束查找的位置是12,二者相等,本次二分查找结束。由于A[12]=234是234的全匹配,记录matched[3]=12,刷新loaction[3]=12,但是该值没有任何意义。
本次查找到长度为3的全匹配,该全匹配就是所查找字符串的最大匹配。
至此,匹配成功,共比较12次。匹配上的字符串为A[12]=234。
权利要求
1.一种呼叫号码查找方法,该方法在已按字符串进行字典排序的呼叫号码字符串集中进行,其特征在于,包括以下步骤a、在字符串集中用二分法查找该呼叫号码字符串,并在查找过程中记录满足该呼叫号码字符串的若干位全匹配和若干位长度匹配的位置及匹配位数;b、将该呼叫号码字符串长度从最大查找长度开始,然后按本步骤执行的次数逐次递减1,判断是否存在匹配位数等于该结果+1的全匹配;找出匹配位数等于该结果的长度匹配的位置和匹配位数小于该结果的最大值的长度匹配的位置,并在与该两个位置相应的区间中进行二分法查找该呼叫号码字符串的前面若干位子字符串,其若干位数等于该结果,并在所述的二分法查找过程中记录或更新满足该前面若干位子字符串的若干位全匹配和若干位长度匹配的位置及匹配位数;重复步骤b、直到该结果等于1。
2.根据权利要求1所述的呼叫号码查找方法,其特征在于所述的按字符串进行字典排序是指按字符串进行升序排列。
3.根据权利要求1所述的呼叫号码查找方法,其特征在于所述的步骤a中的二分法查找该呼叫号码字符串更具体地是指如果该呼叫号码字符串的长度不大于呼叫号码字符串集中字符串的最大长度,则二分法查找该呼叫号码字符串;否则,二分法查找该呼叫号码字符串的前面若干位子字符串,其若干位数为呼叫号码字符串集中字符串的最大长度。
4.根据权利要求1所述的呼叫号码查找方法,其特征在于所述的步骤a和步骤b中的二分法查找更进一步包括如果是全匹配或长度匹配,则记录其位置和匹配位数,其中如果该位置的字符串不小于本次二分法查找待查找的字符串,则将该位置-1作为下一次结束查找的位置,否则将该位置+1作为下一次起始查找的位置。
5.根据权利要求1所述的呼叫号码查找方法,其特征在于所述的步骤b更具体包括以下步骤b1、将该呼叫号码字符串长度从最大查找长度开始,然后按本步骤执行的次数逐次递减1,如果该结果等于0,则查找失败,否则继续;b2、判断是否存在匹配位数等于该结果+1的全匹配,如果存在,则该位置上的字符串就是所要查找的最大匹配,查找结束;否则继续;b3、如果不存在匹配位数等于该结果的长度匹配,则回到步骤b1,否则找出匹配位数等于该结果的长度匹配的位置和匹配位数小于该结果的最大值的长度匹配的位置,并在与该两个位置相应的区间中进行二分法查找该呼叫号码字符串的前面若干位子字符串,其若干位数等于该结果,并在所述的二分法查找过程中记录或更新满足该前面若干位子字符串的若干位全匹配和若干位长度匹配的位置及匹配位数;重复步骤b1、步骤b2、步骤b3、直到该结果等于1。
6.根据权利要求1所述的呼叫号码查找方法,其特征在于所述的步骤b中该两个位置相应的区间是指匹配位数等于该结果的长度匹配的位置-1和匹配位数为小于该结果的最大值的长度匹配的位置+1构成的区间。
7.根据权利要求5所述的呼叫号码查找方法,其特征在于所述的步骤b3中该两个位置相应的区间是指匹配位数等于该结果的长度匹配的位置-1和匹配位数为小于该结果的最大值的长度匹配的位置+1构成的区间。8、根据权利要求1所述的呼叫号码查找方法,其特征在于所述的步骤b中找出匹配位数小于该结果的最大值的长度匹配的位置更进一步包括如果不存在匹配位数小于该结果的最大值的长度匹配,则在匹配位数等于该结果的长度匹配的位置与起始位置相应的区间进行二分法查找。
9.根据权利要求5所述的呼叫号码查找方法,其特征在于所述的步骤b3中找出匹配位数小于该结果的最大值的长度匹配的位置更进一步包括如果不存在匹配位数小于该结果的最大值的长度匹配,则在匹配位数等于该结果的长度匹配的位置与起始位置相应的区间进行二分法查找。
10.根据权利要求1所述的呼叫号码查找方法,其特征在于所述的步骤b中找出匹配位数等于该结果的长度匹配的位置和匹配位数小于该结果的最大值的长度匹配的位置更进一步包括如果匹配位数等于该结果的长度匹配的位置-1不大于匹配位数为小于该结果的最大值的长度匹配的位置+1,则重新回到步骤b。
11.根据权利要求5所述的呼叫号码查找方法,其特征在于所述的步骤b中找出匹配位数等于该结果的长度匹配的位置和匹配位数小于该结果的最大值的长度匹配的位置更进一步包括如果匹配位数等于该结果的长度匹配的位置-1不大于匹配位数为小于该结果的最大值的长度匹配的位置+1,则重新回到步骤b。
全文摘要
一种呼叫号码查找方法,在已按字符串进行字典排序的呼叫号码字符串集中查找该呼叫号码字符串,它包括在整个字符串集中进行二分查找该呼叫号码字符串及其子字符串,并在查找过程中同时记录满足该呼叫号码字符串的若干位全匹配和若干位长度匹配的位置、匹配位数,在后面的二分查找过程中充分利用前面的二分查找中记录的全匹配和长度匹配的位置、匹配位数信息,从而大大减少了比较匹配的比较次数,提高匹配查找的效率。
文档编号H04M1/26GK1482784SQ0214231
公开日2004年3月17日 申请日期2002年9月13日 优先权日2002年9月13日
发明者郑育红 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1