公开/公告号CN106657527A
专利类型发明专利
公开/公告日2017-05-10
原文格式PDF
申请/专利权人 天津七一二通信广播股份有限公司;中国人民解放军国防信息学院;
申请/专利号CN201611110073.1
申请日2016-12-06
分类号H04M1/2745;
代理机构天津中环专利商标代理有限公司;
代理人胡京生
地址 300462 天津市滨海新区经济技术开发区西区北大街141号
入库时间 2023-06-19 02:05:15
法律状态公告日
法律状态信息
法律状态
2019-04-12
授权
授权
2017-09-29
著录事项变更 IPC(主分类):H04M1/2745 变更前: 变更后: 申请日:20161206
著录事项变更
2017-06-06
实质审查的生效 IPC(主分类):H04M1/2745 申请日:20161206
实质审查的生效
2017-05-10
公开
公开
技术领域
本发明涉及一种基于图的前缀可判断的任意长度电话号码存储和查询方法,本发明来源于在不同类型的电话系统构成的电话网络中,在各系统间互相拨打电话时,包含电话号码适配功能、语音服务器查询功能的语音网关设备,以及包含电话号码查询功能、归属地查询功能的电话终端设备。其中涉及使用图结构存储和查询任意长度电话号码的方法,特别涉及能够判断电话号码前缀的查询方法。
背景技术
在一个由多种不同类型的电话系统构成的电话网络中,需要语音网关进行电话系统间话音业务的转发。但是,各电话系统的拨号方式往往有所不同。如某些电话交换机系统拨打外线号码规则为添加前缀89,某些企业内部电话交换机需添加前缀9,某些基于IP电话的语音服务器可任意设置前缀规则或者不添加前缀号码。这些电话交换机或语音服务器可能会将前缀号码一并送给语音网关,语音网关需要对这些不同格式、不同前缀、不同规则的电话号码进行适配,判断此电话号码应该转发给哪个交换机或者语音服务器。某些语音网关系统或者电话终端设备还需要包含查询电话号码的归属地、联系人信息的功能。
一般地,系统使用电话号码表存储和查询电话号码。常用的电话号码表存储和查询方法有两种:哈希散列法和字典树法。这两种方法都是使用特定的数据结构构造电话号码表,达到电话号码存储和查询的目的。
在小型的语音网关系统或者电话终端设备中,常使用哈希散列表存储电话号码。该方法需要将所有已知号码逐条、完整的存储。该方法实现简单,但是需要消耗巨大的存储空间,因此只适合存储少量的电话号码。在大中型语音网关系统中,多使用字典树存储电话号码,这种方法将有公共头的电话号码合并存储在同一结点中,优化了存储空间。
上述两种电话号码存储和查询方法,在处理前缀号码问题时一般有两个解决方案。第一种方案,将带有不同前缀和不带前缀的电话号码分别当做独立的电话号码存储。例如,分别存储815002、89815002,无论查询815002还是89815002,都能匹配到正确的电话号码。但是,每增加一个新的前缀号码,电话号码表就要多消耗一倍的存储空间,造成了存储空间的巨大消耗。第二种方案,增加独立的前缀号码表,在查询电话号码前,先遍历前缀号码表,判断前缀号码。例如,前缀号码表中存储了号码89,查询电话号码前,先查询前缀号码表,若待查询电话号码以89开头,则先将89删除,再使用剩余位数去电话号码表中查询。由于需要增加前缀号码表,因此该方案需要增加额外的存储空间。由于无论待查询的电话号码是否包含前缀号码,每次查询电话号码时都要遍历前缀号码表,因此该方法也会增加额外的查询时间。
以上两种方法都不能较好的解决查询电话号码时,判断电话号码前缀的问题。要么大幅增加存储空间,要么增加查询步骤,增加查询时间。
发明内容
鉴于上述现有技术现状,本专利提供一种基于图的前缀可判断的任意长度电话号码存储和查询方法。本方法采用有向图数据结构,在一张图中同时存储电话号码和前缀号码,为图中的结点添加属性,添加前缀号码结点指向根结点的路径,实现在查询电话号码的同时判断前缀号码的目的。
本专利为实现上述目的,所采取的技术方案是:一种基于图的前缀可判断的任意长度电话号码存储和查询方法,利用语音网关或电话终端设备为平台,实现电话号码存储和查询功能,其特征在于,使用图结构存储电话号码,可查询任意长度的电话号码,可判断电话号码前缀,步骤如下:
步骤一、存储电话号码,规则为:构造一棵字典树,从根结点开始,依次使用待存储电话号码的每一位数字创建子结点,每个子结点的值等于该数字,从根结点至叶子结点的路径,不包含根结点,表示一个完整的电话号码,兄弟结点间的值不重复,具有相同前缀的电话号码拥有共同的父结点,按上述方法为每个不包含前缀的电话号码创建对应路径;
步骤二、按步骤一中的方法为所有已知的前缀号码在同一棵树中创建路径,前缀号码与步骤一中的电话号码可共同拥有相同的父结点;
步骤三、为每个结点标识结点属性,结点属性有以下四种:0x00表示此结点为中间结点,该结点不包含任何附加信息,0x01表示此结点为服务器结点,该结点包含语音服务器信息,0x02表示此结点为联系人结点,该结点包含此电话号码所属联系人信息,0x04表示此结点为前缀结点,从根结点至此结点的路径为前缀号码,一个结点最多可以包含两个属性:前缀结点属性和任意一个其他属性;
步骤四、为前缀结点添加指向根结点的路径,将树升级为有向图;
步骤五、查询电话号码,规则为:从步骤一中描述的根结点开始作为当前结点,依次读取待查询电话号码中的每一位数字,并与当前结点所指向的所有邻接结点的值进行比较,若相等,则匹配该邻接结点成功,继续以该邻接结点作为当前结点,遍历电话号码中的下一位数字,若当前结点所指向的所有邻接结点中没有与该数字相等的结点,或已读完待查询电话号码中的所有数字,则结束查询;
步骤六、遍历过程中,若当前结点包含服务器结点属性,则提取此结点存储的服务器信息,并继续遍历,若当前结点包含联系人结点属性,则提取此结点存储的联系人信息,并结束查询,若遍历至前缀结点,则根据该结点的指向返回起始结点继续遍历;
步骤七、为了防止死循环的发生,约定一个结点的前缀属性只能生效一次,第二次遍历至该结点则忽略其前缀属性继续遍历;
步骤八、结束查询时,若遍历过程中成功查询到服务器信息或联系人信息,则查询成功,否则查询失败。
本方法特点是:在存储空间方面,假设前缀号码的位数为“M”,不包含前缀号码的电话号码的位数为“N”。使用哈希散列法存储不包含前缀号码的电话号码消耗的存储空间最大为N×10N个存储单元。使用字典树法存储不包含前缀号码的电话号码消耗的存储空间最大为(10(N+1)-1)/9个存储单元。当使用哈希散列法存储电话号码表,且使用第一种前缀号码解决方案时,需要的存储空间最大为原电话号码表的M×10M倍。当使用字典树法存储电话号码表,且使用第二种前缀号码解决方案时,需要的存储空间最大为在原电话号码表的基础上,增加(10(M+1)-1)/9个存储单元。而本发明相比原电话号码表,当M≤N时,不增加任何存储空间;当M>N时,最大仅增加(10(M+1)-10(N+1))/9个存储单元。因此,本发明相比现有的两种技术方案,可大幅降低存储空间消耗。
在查询时间方面,本发明与第一种方案前缀号码解决方案耗时相当,本发明在查询没有前缀号码的电话号码时,不增加额外的查询时间,但第二种前缀号码解决方案无论待查询电话号码是否包含前缀号码,都需遍历前缀号码表,因此本发明在总体查询时间上优于第二种前缀号码解决方案。
综上所述,在判断电话号码前缀时,本方法将前缀号码与不包含前缀的电话号码合并存储在一张图中,既不大幅增加存储空间,又无需增加额外的查询时间。本方法比第一种前缀号码解决方案大幅减少存储空间消耗。本方法比第二种前缀号码解决方案大幅减少存储空间消耗和总体查询时间。相比现有技术方案,本方法使用更少的存储空间和更短的查询时间,大大提高了电话号码的存储和查询效率,可有效降低存储和查询操作的空间复杂度及时间复杂度,极大提升执行效率。因此,本方法是一种整体上优于现有技术方案的方法。
本方法适用于语音网关或电话终端设备的电话号码存储和查询功能。
附图说明
图1为本发明的有向图存储结构示意图。
具体实施方式
为了更清楚的理解本发明,结合附图和实例详细描述本发明:
某电话网络由三个电话系统组成。系统一是某型号IP电话系统,区号为“81”,内部包含一个号码为“5002”的电话(以下简称目标电话)。系统二是某型号ATM电话交换机系统,该系统呼叫外线号码的方法为“89+外线电话号码”,即系统二呼叫系统一中的目标电话需要拨打的电话号码为“89815002”,其中“89”是前缀号码。系统三是某型号模拟电话系统,该系统呼叫外线号码的方法为直拨外线电话号码,即系统三呼叫系统一中的目标电话需要拨打的电话号码为“815002”。三个电话系统呼叫外线号码时均将该号码送至语音网关进行转发。
存储时,语音网关将电话号码“815002”及前缀号码“89”按步骤一至步骤四所述的方法存储在磁盘中;
步骤一、存储不包含前缀的电话号码“815002”;首先构造一棵字典树。从此字典树的根结点开始,依次使用“8”、“1”、“5”、“0”、“0”、“2”共6个数字创建6个结点,每个结点的值等于该数字。从根结点开始,后一个结点作为前一个结点的子结点。从根结点到叶子结点“2”的路径表示完整的电话号码“815002”。
步骤二、存储前缀号码;按步骤一中的方法在上述字典树中创建路径“89”。路径“89”与路径“815002”拥有相同的父结点“8”。
步骤三、为每个结点标识结点属性;其中,将结点“1”标识为0x01服务器结点,添加号码“815002”所属的语音服务器地址:“IP=192.168.10.121”,将结点“2”标识为0x02联系人结点,添加号码“815002”所属的联系人姓名:“张三”。将结点“9”标识为0x04前缀结点,将其余结点标识为0x00中间结点。
步骤四、为前缀结点“9”添加指向根结点的路径,将树升级为有向图。
步骤四中描述的有向图存储结构如图1所示。
若系统三呼叫号码“815002”,则语音网关发起查询操作,查询过程为:从“根”结点开始使用第一位号码“8”与“根”结点指向的邻接结点“8”比较,相等,匹配成功。继续使用下一位号码“1”与结点“8”指向的邻接结点“9”、“1”分别比较,结果是与结点“1”匹配成功。依此类推,最终号码“2”与结点“2”匹配成功,结束查询,得到路径“815002”。遍历过程中成功查询到电话号码“815002”的语音服务器IP地址“192.168.10.121”和联系人姓名“张三”。
若系统二呼叫号码“89815002”,则语音网关发起查询操作,查询过程为:从根结点开始使用第一位号码“8”与根结点指向的邻接结点“8”比较,相等,匹配成功。继续使用下一位号码“9”与结点“8”指向的邻接结点“9”“1”分别比较,结果是与结点“9”匹配成功。结点“9”的属性是前缀结点,依据遍历规则,设置当前结点为“9”指向的邻接结点——“根”结点,继续遍历下一位号码“8”。依此类推,在遍历结束时获得路径“89815002”,并获得前缀号码“89”。遍历过程中成功查询到电话号码“89815002”的语音服务器IP地址 “192.168.10.121”和联系人姓名“张三”。
若系统二呼叫号码“89845002”,则语音网关发起查询操作,查询过程与上述“89815002”过程类似,区别是遍历过程中以结点“8”为当前结点时,没有找到结点“8”指向的值为“4”的邻接结点,结束查询,且查询过程中没有遍历到服务器结点和联系人结点,查询失败。
根据上述说明,结合本领域技术可实现本发明的方案。
机译: 通过使用可重映射前缀表示和定义多长度字段以紧凑存储IP前缀的游程长度编码方案来提高基于位图树的存储引擎中平均存储容量的方法
机译: 通过使用可重映射前缀表示和定义多长度字段以紧凑存储IP前缀的游程长度编码方案来提高基于位图树的存储引擎中平均存储容量的方法
机译: 通过压缩单长度前缀的表示来增加基于多比特特里的硬件存储引擎中的存储容量的方法