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