e,則返回布爾值0,表示“插入失敗”,并修改位于探測(cè)路徑上所有位置的hash_coll,令hash_coll-= I。其中,“插入失敗”表示哈希表中已無可用空位、無法繼續(xù)插入數(shù)據(jù),除非在聯(lián)機(jī)模式下一次性插入大量額外數(shù)據(jù),否則基本不會(huì)發(fā)生。在該情形下,操作員可考慮取消當(dāng)前操作;或等待一段時(shí)間,待表中出現(xiàn)空位后再嘗試操作。
[0119]步驟(3.3.3)中:基于哈希表的單條黑名單查詢
[0120]①當(dāng)脫機(jī)終端受理一張票卡交易時(shí),首先讀取票卡邏輯號(hào),并依據(jù)(3.2.3)進(jìn)行號(hào)段黑名單查詢,若“查找未命中”,則以待查詢票卡邏輯號(hào)為關(guān)鍵字key,根據(jù)(2.1)確定的哈希函數(shù)將其映射到哈希表中對(duì)應(yīng)位置H(key);若選擇開放尋址法解決地址沖突問題,則設(shè)置探測(cè)器locate_times = O并轉(zhuǎn)②;
[0121]②若該位置無沖突,即該處hash_coll = 0,則轉(zhuǎn)③;若該位置有沖突,則轉(zhuǎn)④;
[0122]③若該位置已被占用,即該處1gicalID ^ null,且該處存放的票卡邏輯號(hào)與待查詢票卡邏輯號(hào)相等,則返回布爾值1,表示“查找命中”;若該位置未被占用,或者該處存放的票卡邏輯號(hào)與待查詢票卡邏輯號(hào)不相等,則返回布爾值0,表示“查找未命中”;
[0123]④若該位置已被占用,即該處1gicalID幸null,且該處存放記錄的票卡邏輯號(hào)與待查詢票卡邏輯號(hào)相等,則返回布爾值1,表示“查找命中”;否則令locatejimes+ = I并轉(zhuǎn)⑤;
[0124]⑤若locate_times〈TableSize,則根據(jù)(2.2)確定的地址探測(cè)方法定位到下一個(gè)目標(biāo)位置并轉(zhuǎn)②;若locate_times = TableSize,貝Ij返回布爾值0,表示“查找未命中”。
[0125]步驟(3.3.4)中,基于哈希表的單條黑名單刪除
[0126]①以待刪除單條黑名單記錄的票卡邏輯號(hào)為關(guān)鍵字key,根據(jù)(2.1)確定的哈希函數(shù)將其映射到哈希表中對(duì)應(yīng)位置H(key);若選擇開放尋址法解決地址沖突問題,則設(shè)置探測(cè)器locate_times = O并轉(zhuǎn)②;
[0127]②若該位置無沖突,即該處hash_coll = 0,則轉(zhuǎn)③;若該位置有沖突,則轉(zhuǎn)④;
[0128]③若該位置已被占用,即該處1gicalID ^ null,且該處存放的票卡邏輯號(hào)與待刪除黑名單記錄的票卡邏輯號(hào)相等,則將該處存放的單條黑名單有效字段均置為null,同時(shí)修改探測(cè)路徑上所有其他位置的hash_colI,即令hash_col1- = I,并返回布爾值I,表示“刪除成功”;若該位置未被占用,或者該處存放的票卡邏輯號(hào)與待查詢票卡邏輯號(hào)不相等,則返回布爾值0,表示“刪除失敗”;
[0129]④若該位置已被占用,即該處1gicalID幸null,且該處存放的票卡邏輯號(hào)與待刪除黑名單記錄的票卡邏輯號(hào)相等,則將該處存放的單條黑名單有效字段均置為null,同時(shí)修改探測(cè)路徑上所有其他位置的hash_colI,即令hash_col1- = I,并返回布爾值I,表示“刪除成功”;否則令locate_times+ = I并轉(zhuǎn)⑤;
[0130]⑤若locate_times〈TableSize,則根據(jù)(2.2)確定的地址探測(cè)方法定位到下一個(gè)目標(biāo)位置并轉(zhuǎn)②;若locatejimes = TableSize,則返回布爾值0,表示“刪除失敗”。其中,刪除失敗表示待刪除票卡不在哈希表中。
[0131]本實(shí)施例1、2所示方案中,采用單條記錄和號(hào)段記錄相結(jié)合的終端黑名單存儲(chǔ)方式,既兼顧了存儲(chǔ)方式的靈活性,又可節(jié)約存儲(chǔ)空間;采用時(shí)間限制方法和分布式下載方法相結(jié)合的終端設(shè)備黑名單下載方案,有效減少了終端設(shè)備存放黑名單的數(shù)量,從而提高了檢測(cè)效率;采用基于有序鏈表的號(hào)段黑名單檢索和基于哈希表的單條黑名單檢索相結(jié)合的復(fù)合檢索方案,查詢算法的時(shí)間復(fù)雜度從線性查詢的ο (N)降低到了二分法查詢的ο (IgN)和哈希表查詢的ο (I)。支持聯(lián)機(jī)模式下對(duì)各終端設(shè)備內(nèi)存黑名單數(shù)據(jù)的插入、刪除操作,能夠?qū)崿F(xiàn)緊急情況下終端設(shè)備對(duì)黑名單變化的實(shí)時(shí)響應(yīng)。
[0132]以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出:對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
【主權(quán)項(xiàng)】
1.一種提高AFC系統(tǒng)終端設(shè)備黑名單匹配效率的方法,其特征在于:包括如下步驟: (1)車站終端設(shè)備黑名單存儲(chǔ)及下載 (1.1)終端設(shè)備黑名單存儲(chǔ):采取單條黑名單記錄和號(hào)段黑名單記錄相結(jié)合的方法; (1.2)終端設(shè)備黑名單下載:采用時(shí)間限制方法和分布式下載方法相結(jié)合的黑名單下載方法; (2)基于單條黑名單票卡邏輯號(hào)統(tǒng)計(jì)規(guī)律的哈希函數(shù)及地址沖突解決方法 (2.1)以單條黑名單的票卡邏輯號(hào)為關(guān)鍵字key,根據(jù)票卡邏輯號(hào)的組成結(jié)構(gòu)及其統(tǒng)計(jì)分布、構(gòu)造相應(yīng)的哈希函數(shù)H(key); (2.2)結(jié)合給定哈希函數(shù)H (key)下的實(shí)際地址沖突狀況,綜合考慮黑名單規(guī)模及實(shí)際可用內(nèi)存大小,選擇開放尋址法或分離鏈接法解決地址沖突問題; (3)黑名單檢索模式及檢索方法 (3.1)終端設(shè)備可采用脫機(jī)和聯(lián)機(jī)兩種檢索模式;正常情況下處于脫機(jī)模式,執(zhí)行交易票卡的黑名單查詢操作;緊急情況下進(jìn)入聯(lián)機(jī)模式,獲得授權(quán)后方可對(duì)終端設(shè)備內(nèi)存黑名單數(shù)據(jù)進(jìn)行增、刪操作; (3.2)基于有序鏈表的號(hào)段黑名單檢索方法 (3.2.1)基于有序鏈表的號(hào)段黑名單裝載 ①每個(gè)運(yùn)營(yíng)日終端設(shè)備上電啟動(dòng)后,初始化進(jìn)程自動(dòng)運(yùn)行,開辟內(nèi)存空間并創(chuàng)建空鏈表; ②初始化進(jìn)程將存放在終端設(shè)備外存的號(hào)段黑名單記錄讀入內(nèi)存緩沖區(qū),若各號(hào)段黑名單記錄互不重疊,則直接創(chuàng)建對(duì)應(yīng)節(jié)點(diǎn)存放號(hào)段記錄中的有效字段,并按其在數(shù)軸上的相對(duì)位置插入鏈表;若號(hào)段記錄間有相互重疊部分,則取其并集替代相關(guān)號(hào)段,得到互不重疊的號(hào)段記錄序列,再按其在數(shù)軸上的相對(duì)位置插入鏈表; (3.2.2)基于有序鏈表的號(hào)段黑名單插入 ①創(chuàng)建節(jié)點(diǎn)Pcur來存放待插入號(hào)段記錄中的有效字段;采用二分法定位待插入號(hào)段記錄在鏈表中的位置,并利用鏈表節(jié)點(diǎn)Ppre、Pnext來標(biāo)記之,貝U有(Ppre_>logicalID_beg〈Pcur->logicalID_beg)&&(Pcur->logicalID_end〈Pnext->logicalID_end);其中:logicalID_beg為起始邏輯號(hào),logicalID_end為終止邏輯號(hào); ②若節(jié)點(diǎn)Ppre與節(jié)點(diǎn)Pnext之間存在中間節(jié)點(diǎn),則將其刪除; ③若Ppre、Pcur>Pnext中的號(hào)段記錄均無重疊部分,則直接將Pcur插入到Ppre與Pnext之間;gPcur中的號(hào)段記錄與Ppre中的有重疊部分、與Pnext中的無重疊部分,貝Ij令 Ppre_>logicalID_end = Pcur_>logicalID_end ;若 Pcur 中的號(hào)段記錄與 Pnext 中的有重疊部分、與Ppre中的無重疊部分,貝Ij令Pnext_>logicalID_beg = Pcur->logicalID_beg ;若Ppre、Pcur> Pnext中的號(hào)段記錄有兩兩重疊部分,則令Ppre_>logicalID_end =Pnext_>logicalID_end,并從鏈表中刪除節(jié)點(diǎn)Pnext ; (3.2.3)基于有序鏈表的號(hào)段黑名單查詢 當(dāng)脫機(jī)終端受理一張票卡交易時(shí),首先讀取票卡邏輯號(hào),并采用二分法在鏈表中查找滿足logicalID_beg彡交易票卡邏輯號(hào)彡logicalID_beg的鏈表節(jié)點(diǎn);若找到該節(jié)點(diǎn),返回布爾值1,表示“查找命中”;若找不到該節(jié)點(diǎn),則轉(zhuǎn)入(3.3.3)進(jìn)入基于哈希表的單條黑名單查詢流程; (3.2.4)基于有序鏈表的號(hào)段黑名單刪除 ①采用二分法確定待刪除黑名單號(hào)段[logicalID_head,logicalID_tail]在鏈表中的位置,將定位到的鏈表節(jié)點(diǎn)記為Pdel,則有(Pdel->logicalID_beg ( logicalID_head)&&(logicalID_taiI ^ Pdel_>logicalID_end);若定位失敗,返回布爾值 0,表示“刪除失敗”; ②若Pdel_>logicalID_beg = logicalID_head,則令 Pdel_>logicalID_beg =logicalID_tail+l,并返回布爾值 1,表示“冊(cè)丨J 除成功”;若 Pdel_>logicalID_end =logicalID_tail,則令 Pde 1-> 1gi calID_end = logicalID_head -1,并返回布爾值 I,表不“刪除成功”;若 Pdel_>logicalID_beg Φ logicalID_head&&Pde 1->1gicalID_end Φ logicalID_tail,則創(chuàng)建節(jié)點(diǎn) Pnewl 和 Pnew2,使得 Pnewl_>logicalID_beg =Pdel_>logicalID_beg、Pnewl->logicalID_end = logicalID_head-KPnew2->logicalID_beg = Pdel->1gicalID_tail+KPnew2->1gicalID_end = Pdel->1gicalID_end,隨后刪除節(jié)點(diǎn)Pdeldf PnewUPnewl依次插入其原先位置,并返回布爾值1,表示“刪除成功”; (3.3)基于哈希表的單條黑名單檢索方法 (3.3.1)基于哈希表的單條黑名單裝載 ①每個(gè)運(yùn)營(yíng)日終端設(shè)備上電啟動(dòng)后,初始化進(jìn)程自動(dòng)運(yùn)行,開辟內(nèi)存空間并創(chuàng)建空哈希表;哈希