專利名稱:一種對(duì)海量含通配符黑名單高速匹配的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種字符串高速匹配方法,特別是一種對(duì)含通配符的海量黑名單的高 速匹配的方法。
背景技術(shù):
通配符(wildcard)是一類鍵盤字符,包括星號(hào)(*)、問號(hào)(?)和百分號(hào)(% )等, 當(dāng)進(jìn)行文件或字符內(nèi)容匹配時(shí)不知道真正字符或者不想鍵入完整單詞時(shí),可以使用它來代 替真正字符或完整的單詞。通配符其特征是以一個(gè)指定符號(hào)或詞組匹配零個(gè)、一個(gè)或多個(gè) 字符(可以為指定范圍的字符)。含有通配符的格式化字符串(本文稱為黑名單)常用于檢索文件名、標(biāo)題、簡介、 文章等字符串(本文稱為目標(biāo)字符串)比對(duì)操作,一般是通過黑名單與目標(biāo)字符串逐個(gè)比 對(duì)的方式進(jìn)行。這在黑名單數(shù)量比較少時(shí)(比如文件檢索通常只有一個(gè)格式化字符串)或 對(duì)實(shí)時(shí)性要求不高的情況下沒有什么問題。但當(dāng)黑名單數(shù)量較大時(shí)就會(huì)出現(xiàn)運(yùn)算不過來的 情況,實(shí)際試驗(yàn)當(dāng)超過100個(gè)黑名單時(shí)對(duì)一個(gè)目標(biāo)字符串的匹配就會(huì)出現(xiàn)明顯的遲滯,無 法滿足某些要求實(shí)時(shí)匹配的情況。在實(shí)際工作中我們開發(fā)了一個(gè)機(jī)動(dòng)車緝查布控系統(tǒng),其中有個(gè)比對(duì)報(bào)警程序,功 能是每過一輛車,就將車輛號(hào)牌與數(shù)據(jù)庫中的機(jī)動(dòng)車黑名單進(jìn)行匹配,實(shí)時(shí)得到是否布控 車輛(在黑名單中)的結(jié)果。因?yàn)閷?duì)車輛號(hào)牌識(shí)別準(zhǔn)確性問題(如車牌中‘8’、‘0’容易混 淆)和其他業(yè)務(wù)需要的原因,含有通配符的黑名單數(shù)量極大(超過10萬條),逐個(gè)匹配的方 式是完全無法勝任的。對(duì)于不含通配符的黑名單,我們采取的算法是對(duì)黑名單以快速排序法進(jìn)行排序, 而后通過二分查找法同過車車牌進(jìn)行高速匹配,在普通PC機(jī)上實(shí)測(cè)表明對(duì)超過100萬條黑 名單匹配時(shí)間在1毫秒左右。由此,我們考慮通過加強(qiáng)這種算法來支持含通配符的黑名單 匹配。首先想到了通過通配符逐個(gè)迭代目標(biāo)字符串(車牌)的方法,機(jī)動(dòng)車車牌一般是
7位(也有9位13位的),逐個(gè)迭代通配符有^ C 7等于126次,匹配時(shí)間從1毫秒左右
上升到超過0. 1秒。這個(gè)速度在只有一個(gè)通配符的情況下勉強(qiáng)可以接受,但當(dāng)有多個(gè)通配 符時(shí),迭代次數(shù)將以126的指數(shù)級(jí)增加,要實(shí)現(xiàn)實(shí)時(shí)匹配將完全不可行。必須設(shè)計(jì)一個(gè)方法 將迭代次數(shù)降下來。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)中存在的不足,提供一種對(duì)海量含通配符黑名單高 速匹配的方法,比傳統(tǒng)方法的匹配效率有極大提高。按照本發(fā)明提供的技術(shù)方案,所述對(duì)海量含通配符黑名單高速匹配的方法,用快 速排序法對(duì)海量含通配符的黑名單進(jìn)行排序,形成有序數(shù)組;然后對(duì)輸入的比對(duì)字符串,根據(jù)第一個(gè)字符,采用兩次二分查找法比對(duì)黑名單第一個(gè)字符確定一個(gè)子有序數(shù)組;當(dāng)所述子有序數(shù)組為空、為一個(gè)或多個(gè)相同黑名單時(shí),返回匹配結(jié)果,否則分兩條線向后遞歸迭 代一是將當(dāng)前字符替換為通配符向后遞歸迭代,另一是保留原字符向后遞歸迭代;直至 返回匹配結(jié)果或輸入字符串所有字符遞歸迭代完成。所述通配符是以一個(gè)指定符號(hào)或詞組匹配零個(gè)、一個(gè)或多個(gè)字符。所述通配符包括“*””和“ ?”,“*”可以匹配任何字符序列,包括無字符的情況; “? ”可以匹配任何單個(gè)字符。所述快速排序法采用通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一 部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)小,然后分別對(duì)兩部分?jǐn)?shù)據(jù)遞歸的進(jìn)行快速排 序,最后達(dá)到整個(gè)數(shù)據(jù)變成有序序列。本發(fā)明的優(yōu)點(diǎn)是不僅減少了迭代次數(shù),而且每次迭代的黑名單規(guī)模也顯著下降, 大大提高了整個(gè)匹配效率。
具體實(shí)施例方式本發(fā)明的執(zhí)行系統(tǒng)包括輸入模塊,用于從數(shù)據(jù)庫、文件等讀入黑名單選擇含通配 符的黑名單輸入系統(tǒng);海量黑名單快速排序模塊,用于對(duì)輸入的黑名單快速排序形成有序 數(shù)組;快速查找模塊,用于確定一個(gè)子有序數(shù)組;通配符遞歸迭代模塊,用于通過遞歸迭代 匹配輸入字符串,在遞歸迭代過程中通過快速查找模塊減少有序數(shù)組規(guī)模,從而提高匹配 速度。本發(fā)明用快速排序法對(duì)海量含通配符的黑名單進(jìn)行排序,形成有序數(shù)組。然后對(duì) 輸入的比對(duì)字符串,根據(jù)第一個(gè)字符,采用兩次二分查找法比對(duì)黑名單左起第一個(gè)字符和 輸入字符串左起第一個(gè)字符以確定一個(gè)子有序數(shù)組。如黑名單為... "All ? 65”、“B1 ? 123”、“B11 ? 23”、“C2 ? 123”···按遞增排序,輸入字符串為“B12345”,第一次查找第一個(gè)字符小于“B”的最大黑 名單即“All 65”,第二次則查找第一個(gè)字符大于“B”的最小黑名單即“C2 ? 123”,兩次 查找即確定了黑名單中第一個(gè)字符為“B”的子數(shù)組,且該數(shù)組保持了有序狀態(tài)(遞增),避 免了再次排序的時(shí)間消耗。當(dāng)兩次二分查找能得到一個(gè)唯一的匹配結(jié)果時(shí),即該子有序數(shù)組為空、為一個(gè)或 多個(gè)相同黑名單,返回比對(duì)結(jié)果,否則分兩條線向右遞歸迭代,一是將該字符替換為通配 符,再次采用兩次二分查找法進(jìn)行比對(duì),唯一匹配則返回結(jié)果,不唯一匹配則向右遞歸迭 代,另一是保留原字符直接向后遞歸迭代,直至匹配或輸入字符串所有字符遞歸迭代比對(duì) 完成。第η次迭代比對(duì)過程只比對(duì)黑名單左起η個(gè)字符,通過逐步增加比對(duì)特征,逐步減少
黑名單規(guī)模,高速接近比對(duì)結(jié)果。最壞情況下迭代次數(shù)與前述方法差不多也有 C \等
y=i
于126次,但因?yàn)槊看魏诿麊我?guī)模高速減少,即使是最壞情況比對(duì)消耗時(shí)間遠(yuǎn)小于前述方 法,且經(jīng)實(shí)驗(yàn)測(cè)試,因黑名單設(shè)置的規(guī)律性和有限性(即便達(dá)到百萬條黑名單,占可能的組 合比仍然不過百萬分之一),一個(gè)通配符多數(shù)情況下迭代次數(shù)8次以下即可比對(duì)命中或排 除,極大地提高了黑名單匹配效率。多通配符下,迭代次數(shù)也僅在(n+1)的3次方(η為通配符數(shù)),比如有3個(gè)通配符時(shí),為64次,比原方法在一個(gè)通配符下迭代次數(shù)還少,更不用說 因?yàn)槊看蔚诿麊我?guī)模減少而提高的效率。所述的快二分查找法充分利用了元素間的次序關(guān)系,采用分治策略,算法復(fù)雜度 是0(log η),即在最壞的情況下用0(log η)次比較完成搜索任務(wù)。它的基本思想是,將η 個(gè)元素分成個(gè)數(shù)大致相同的兩半,取a[n/2]與欲查找的χ作比較,如果χ = a [η/2]則找到 X,算法終止。采用其他快速查找方法也可行。
綜上,本方法對(duì)含通配符的黑名單匹配,即使是理論上最壞的情況,也比傳統(tǒng)方法 的效率有極大提高。在實(shí)際應(yīng)用環(huán)境中,因?yàn)楹诿麊蔚囊?guī)律性和有限性,比對(duì)效率則更高, 在百萬條黑名單條件下,含通配符比對(duì)與不含通配符黑名單比對(duì)效率在一個(gè)數(shù)量級(jí)內(nèi)(即 毫秒級(jí)內(nèi))。
權(quán)利要求
一種對(duì)海量含通配符黑名單高速匹配的方法,其特征是用快速排序法對(duì)海量含通配符的黑名單進(jìn)行排序,形成有序數(shù)組;然后對(duì)輸入的比對(duì)字符串,根據(jù)第一個(gè)字符,采用兩次二分查找法比對(duì)黑名單第一個(gè)字符確定一個(gè)子有序數(shù)組;當(dāng)所述子有序數(shù)組為空、為一個(gè)或多個(gè)相同黑名單時(shí),返回匹配結(jié)果,否則分兩條線向后遞歸迭代一是將當(dāng)前字符替換為通配符向后遞歸迭代,另一是保留原字符向后遞歸迭代;直至返回匹配結(jié)果或輸入字符串所有字符遞歸迭代完成。
2.如權(quán)利要求1所述對(duì)海量含通配符黑名單高速匹配的方法,其特征是所述通配符是 以一個(gè)指定符號(hào)或詞組匹配零個(gè)、一個(gè)或多個(gè)字符。
3.如權(quán)利要求1、2所述對(duì)海量含通配符黑名單高速匹配的方法,其特征是所述通配符 包括“*”和“ ?”,“*”可以匹配任何字符序列,包括無字符的情況;“? ”可以匹配任何單個(gè) 字符。
4.如權(quán)利要求1所述對(duì)海量含通配符黑名單高速匹配的方法,其特征是所述快速排序 法采用通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另 外一部分的所有數(shù)據(jù)小,然后分別對(duì)兩部分?jǐn)?shù)據(jù)遞歸的進(jìn)行快速排序,最后達(dá)到整個(gè)數(shù)據(jù) 變成有序序列。
全文摘要
本發(fā)明涉及一種對(duì)海量含通配符黑名單高速匹配的方法,用快速排序法對(duì)海量含通配符的黑名單進(jìn)行排序,形成有序數(shù)組;然后對(duì)輸入的比對(duì)字符串,根據(jù)第一個(gè)字符,采用兩次二分查找法比對(duì)黑名單第一個(gè)字符確定一個(gè)子有序數(shù)組;當(dāng)所述子有序數(shù)組為空、為一個(gè)或多個(gè)相同黑名單時(shí),返回匹配結(jié)果,否則分兩條線向后遞歸迭代一是將當(dāng)前字符替換為通配符向后遞歸迭代,另一是保留原字符向后遞歸迭代;直至返回匹配結(jié)果或輸入字符串所有字符遞歸迭代完成。本發(fā)明適用于交通監(jiān)控等監(jiān)控對(duì)象無法100%識(shí)別或黑名單無法精確設(shè)定的領(lǐng)域,提供一種高速實(shí)時(shí)匹配。
文檔編號(hào)G06F17/30GK101876989SQ20091023233
公開日2010年11月3日 申請(qǐng)日期2009年12月7日 優(yōu)先權(quán)日2009年12月7日
發(fā)明者劉太國, 張森, 方艾芬, 楊卓敏, 翁育峰, 馬慶 申請(qǐng)人:公安部交通管理科學(xué)研究所