對(duì)布控車牌號(hào)碼進(jìn)行快速搜索的方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種車牌搜索方法,特別是一種對(duì)布控車牌號(hào)碼進(jìn)行快速搜索的方 法。
【背景技術(shù)】
[0002] 在省級(jí)卡口系統(tǒng)中,布控車輛的車牌信息往往百萬(wàn)甚至千萬(wàn)條。傳統(tǒng)的搜索效率 較低,用戶往往需要等很久才能獲取到需要的車牌信息。在數(shù)據(jù)庫(kù)系統(tǒng)中,為了加快數(shù)據(jù)的 訪問(wèn)速度,一般建立索引結(jié)構(gòu),索引結(jié)構(gòu)是一個(gè)或多個(gè)列的值進(jìn)行排序的結(jié)構(gòu)。因?yàn)橛脖P的 1/〇(輸入/輸出)速度非常耗時(shí),所以盡量選擇可以將I/O次數(shù)降低的數(shù)據(jù)索引。常見(jiàn)的硬盤 數(shù)據(jù)庫(kù)索引有B樹(shù)索引,B+樹(shù)索引,T樹(shù)索引,使用這些索引可以顯著的減少硬盤I/O數(shù)。
[0003] 不同于硬盤數(shù)據(jù)庫(kù)系統(tǒng),內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng)在數(shù)據(jù)訪問(wèn)時(shí)更加顯著的減少或消除磁 盤1/0,提高數(shù)據(jù)的訪問(wèn)速度。Cache(高速緩沖存儲(chǔ)器)是計(jì)算機(jī)系統(tǒng)的層次存儲(chǔ)結(jié)構(gòu)中,介 于中央處理器(CPU)和主存儲(chǔ)器(ROM)之間的高速小容量存儲(chǔ)器。它具有速度快、容量小的 特點(diǎn)。內(nèi)存層次結(jié)構(gòu)的意義在于利用引用的空間局部性和時(shí)間局部性原理,將經(jīng)常被訪問(wèn) 的數(shù)據(jù)放到快速的存儲(chǔ)器中,而將不經(jīng)常訪問(wèn)的數(shù)據(jù)留在較慢的存儲(chǔ)器中。CHJ訪問(wèn)數(shù)據(jù) 時(shí),先在Cache中查找,如果找到則直接傳輸?shù)紺PU中的寄存器中,這稱之為命中;如果沒(méi)有 找到,那么需要在內(nèi)存中查找,并且要把查找到內(nèi)容重新寫入Cache,下次讀取時(shí)就可以避 免內(nèi)存?zhèn)鬏敗?br>[0004] 傳統(tǒng)車輛號(hào)牌搜索NoX,使用二叉樹(shù)的查找過(guò)程如下:
[0005] 對(duì)布控車輛的所有號(hào)牌建立索引;
[0006] 加載索引到內(nèi)存數(shù)據(jù)庫(kù)中;
[0007] 根據(jù)根節(jié)點(diǎn)指針找到文件目錄的根磁盤塊1,將其中的信息NoX導(dǎo)入內(nèi)存,此時(shí)磁 盤I/O-次;
[0008] 此時(shí)內(nèi)存中有一個(gè)文件索引名NolO,根據(jù)算法發(fā)現(xiàn),N〇X〈N〇10,因此我們找到指針 P⑵;
[0009] 根據(jù)P(2)指針,我們定位到磁盤塊2,并將其中的信息導(dǎo)入內(nèi)存,此時(shí)磁盤1/0- 次;
[001 0]此時(shí)內(nèi)存中有另一個(gè)文件索引名N〇9,根據(jù)算法發(fā)現(xiàn),NoX>No9,因此我們找到指針 P(5);
[0011] 根據(jù)P(5)指針,我們定位到磁盤塊5,并將其中的信息導(dǎo)入內(nèi)存,此時(shí)磁盤1/0- 次;
[0012] 以此類推,如果NoX在此二叉樹(shù)中,時(shí)間復(fù)雜度為0(logn),返回實(shí)際數(shù)值。
[0013]如果NoX不在布控范圍中,則會(huì)遍歷此二叉樹(shù)的每一級(jí)深度,然后返回空值。
[0014]根據(jù)上面過(guò)程,如果在全省一百萬(wàn)布控車輛范圍中查找,最大可能需要20次遍歷 (2 ~ 20 = 1,048,576)才能找到結(jié)果。此時(shí)內(nèi)存查找次數(shù)為20次,同時(shí)磁盤1/0也達(dá)到20次。磁 盤的1/0操作將影響整個(gè)查找效率的決定因素。
[0015] 在計(jì)算機(jī)科學(xué)中,指針是編程語(yǔ)言中的一個(gè)對(duì)象或變數(shù),用來(lái)存儲(chǔ)某一個(gè)地址,這 個(gè)地址的值直接指向存在電腦存儲(chǔ)器中另一塊存儲(chǔ)器空間的值。指針參考了存儲(chǔ)器中某個(gè) 地址,通過(guò)被稱為反參考指針的動(dòng)作,可以取出在那個(gè)地址中存儲(chǔ)的值。在指針指向的地址 中的值,可能代表另一個(gè)變數(shù)、結(jié)構(gòu)、對(duì)象或函數(shù)。但是從指針本身無(wú)法得知它所引用的存 儲(chǔ)器中存儲(chǔ)了什么數(shù)據(jù)類型的信息。作個(gè)比喻,假設(shè)將電腦存儲(chǔ)器當(dāng)成一本書,一張內(nèi)容記 錄了某個(gè)頁(yè)碼加上行號(hào)的便利貼,可以被當(dāng)成是一個(gè)指向特定頁(yè)面的指針;根據(jù)便利粘貼 面的頁(yè)碼與行號(hào),翻到那個(gè)頁(yè)面,把那個(gè)頁(yè)面的那一行文字讀出來(lái),就相當(dāng)于是對(duì)這個(gè)指針 進(jìn)行反參考的動(dòng)作。
【發(fā)明內(nèi)容】
[0016] 本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種能夠避免對(duì)非布控車牌號(hào)進(jìn)行搜索、提高 查找效率的對(duì)布控車牌號(hào)碼進(jìn)行快速搜索的方法。
[0017] 本發(fā)明解決上述技術(shù)問(wèn)題所采用的技術(shù)方案如下:
[0018] 對(duì)布控車牌號(hào)碼進(jìn)行快速搜索的方法,包括如下步驟:
[0019] S11.將布控范圍內(nèi)的每個(gè)車牌號(hào)拆分到每一個(gè)數(shù)字或字符的位數(shù);
[0020] S12.將布控范圍內(nèi)的每個(gè)車牌號(hào)的每一個(gè)位數(shù)建立編號(hào)索引:
[0021 ]第一位設(shè)為P1,是漢字,來(lái)自于23個(gè)省、5個(gè)自治區(qū)和4個(gè)直轄市的簡(jiǎn)稱,也就是32 種可能,編號(hào)1_32;
[0022]第二位設(shè)為P2,是26個(gè)英文字母中的任意一個(gè),編號(hào)1-26;
[0023] 第三位至第七位分別設(shè)為?314、?5、?6和?7,同樣地,是26個(gè)英文字母和0-9中的 任意一個(gè),分別編號(hào)1-36;
[0024] S13.計(jì)算每一個(gè)布控范圍內(nèi)的車牌號(hào)的索引編號(hào)總值,計(jì)算方式如下:
[0025] P = P1*36~5*26+P2*36~5+P3*36~4+P4*36~3+P5*36~2+P6*36+P7,以及確定總值最 大值:P(max)=32*36~5*26+26*36~5+36*36~4+36*36~3+36*36~2+36*36+36;
[0026] S14.在內(nèi)存中建立車牌索引區(qū)域,按照P (max)的范圍來(lái)建立索引指針,將每一個(gè) 布控范圍內(nèi)的車牌號(hào)的索引編號(hào)總值對(duì)應(yīng)一個(gè)內(nèi)存中索引指針的位置;
[0027] S15.將布控范圍內(nèi)的車牌號(hào),按照索引編號(hào)總值在車牌索引區(qū)域一一標(biāo)記,有則 標(biāo)記值為1,無(wú)則標(biāo)記值為〇;
[0028] S21.獲取目標(biāo)車牌號(hào);
[0029] S22.將目標(biāo)車牌號(hào)拆分到每一個(gè)位數(shù);
[0030] S23.將目標(biāo)車牌號(hào)的每一位建立編號(hào)索引,與步驟S12中相同;
[0031] S24.計(jì)算目標(biāo)車牌號(hào)的索引編號(hào)總值,與步驟S13中相同;
[0032] S25.根據(jù)目標(biāo)車牌號(hào)的索引編號(hào)總值,索引指針在車牌索引區(qū)域中位移;
[0033] S26.根據(jù)位移結(jié)果,確定目標(biāo)車牌號(hào)對(duì)應(yīng)的目標(biāo)位置的標(biāo)記值;
[0034] S27.如果標(biāo)記值為0,返回未找到;如果標(biāo)記值為1,返回已找到;
[0035] S31.如果返回值為1,則在布控范圍的車牌號(hào)索引文件中按照傳統(tǒng)二叉樹(shù)搜索,并 返回搜索結(jié)果數(shù)據(jù);
[0036] S32.如果返回值為0,則不再進(jìn)行搜索。
[0037]本發(fā)明通過(guò)在內(nèi)存中建立車牌索引區(qū)域,先驗(yàn)證目標(biāo)車牌號(hào)是否為布控范圍內(nèi)的 車牌號(hào);若是則讀寫車輛過(guò)車數(shù)據(jù)庫(kù),找到目標(biāo)車牌號(hào)的信息數(shù)據(jù);若否,則不再對(duì)該車牌 號(hào)進(jìn)行下一步搜索。從而可以避免對(duì)大量的布控范圍外的車牌號(hào)進(jìn)行搜索,提高搜索速度 和搜索效率。
[0038] 作為優(yōu)選,目標(biāo)車牌號(hào)和布控范圍內(nèi)的車牌號(hào)分別為字符串形式。其優(yōu)點(diǎn)在于,字 符串的形式可以更好地將車牌號(hào)按位劃分,從而便于后續(xù)搜索步驟的進(jìn)行。
[0039] 作為優(yōu)選,S14中,車牌索引區(qū)域內(nèi)按照索引編號(hào)總值大小有序排列;S31中,如果 返回值為1,則在布控范圍的車牌號(hào)索引文件中采用二分法進(jìn)行搜索,并返回搜索結(jié)果數(shù) 據(jù)。其優(yōu)點(diǎn)在于,有序排列后可以采用二分法進(jìn)行搜索,大大減少搜索過(guò)程的時(shí)間消耗,提 高搜索效率。
[0040] 本發(fā)明同現(xiàn)有技術(shù)相比具有以下優(yōu)點(diǎn)及效果:
[0041] 1、由于布控范圍內(nèi)的車牌號(hào)占全部車牌號(hào)的比例較小,因此本發(fā)明采用先驗(yàn)證目 標(biāo)車牌號(hào)是否為布控范圍內(nèi)的車牌號(hào),若為布控范圍內(nèi)的車牌號(hào),再在布控范圍的車牌號(hào) 索引文件中進(jìn)行搜索的思路,從而避免對(duì)布控范圍外的車牌號(hào)進(jìn)行搜索,大大減少了 I/O操 作次數(shù),提高了查找效率。
[0042] 2、由于內(nèi)存讀寫速度遠(yuǎn)遠(yuǎn)快于硬盤讀寫速度,因此,本發(fā)明利用在Casch中建立車 牌索引區(qū)域,在該車牌索引區(qū)域中對(duì)檢測(cè)到的目標(biāo)車牌號(hào)進(jìn)行查找,確認(rèn)其是否是布控范 圍內(nèi)的車牌號(hào),減少了對(duì)布控范圍外的車牌號(hào)進(jìn)行搜索,大大提高了搜索的有效性和搜索 效率。
[0043] 3、由于對(duì)車牌索引區(qū)域內(nèi)按照索引編號(hào)總值大小有序排列,并采用二分法進(jìn)行搜 索,可以降低對(duì)布控范圍內(nèi)的車牌號(hào)進(jìn)行搜索的時(shí)間消耗,進(jìn)一步提高搜索效率。
[0044] 4、由于國(guó)內(nèi)車牌號(hào)的各種排列組合的方式是確定的,可以通過(guò)例舉的方式獲得所 有可能的車牌號(hào)碼;然后將車牌的七位數(shù)字或字母或漢字按照十進(jìn)制的方式轉(zhuǎn)化為統(tǒng)一的 數(shù)字,再轉(zhuǎn)化為內(nèi)存中一個(gè)固定的二進(jìn)制位置,從而便于對(duì)該車牌號(hào)碼對(duì)應(yīng)的內(nèi)存位置進(jìn) 行標(biāo)識(shí),進(jìn)而判斷是否進(jìn)行后續(xù)的搜索工作。
【附圖說(shuō)明】
[0045] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0046] 圖1為本發(fā)明的編號(hào)索引建立示意圖。
[0047] 圖2為本發(fā)明的部分車牌索引區(qū)域結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0048] 下面結(jié)合實(shí)施例對(duì)本發(fā)明做進(jìn)一步的詳細(xì)說(shuō)明,以下實(shí)施例是對(duì)本發(fā)明的解釋而 本發(fā)明并不局限于以下實(shí)施例。
[0049] 實(shí)施例1:本實(shí)施例的對(duì)布控車牌號(hào)碼進(jìn)行快速搜索的方法,包括如下步驟:
[0050] S11.將布控范圍內(nèi)的每個(gè)車牌號(hào)拆分到每一個(gè)數(shù)字或字符的位數(shù);
[0051] S12.將布控范圍內(nèi)的每個(gè)車牌號(hào)的每一個(gè)位數(shù)建立編號(hào)索引:
[0052]第一位設(shè)為PI,是漢字,來(lái)自于23個(gè)省、5個(gè)自治區(qū)和4個(gè)直轄市的簡(jiǎn)稱,也就是32 種可能,編號(hào)1_32;
[0053]第二位