r>[0037]④將待插入黑名單記錄中的有效字段存入預(yù)先創(chuàng)建的鏈表節(jié)點;若該位置未被占用,即表中該處地址為null,則將節(jié)點鏈入該位置,并返回布爾值1,表示“插入成功”;若該位置已被占用,即表中該處地址不為null,則將節(jié)點插入該位置所指鏈表的頭部并返回布爾值I,表示“插入成功”;
[0038](3.3.3)基于哈希表的單條黑名單查詢
[0039]①當(dāng)脫機(jī)終端受理一張票卡交易時,首先讀取票卡邏輯號,并依據(jù)(3.2.3)進(jìn)行號段黑名單查詢,若“查找未命中”,則以待查詢票卡邏輯號為關(guān)鍵字key,根據(jù)(2.1)確定的哈希函數(shù)將其映射到哈希表中對應(yīng)位置H(key);若(2.2)中選擇開放尋址法解決地址沖突問題,則設(shè)置探測器locatejimes = O并轉(zhuǎn)②;若(2.2)中選擇分離鏈接法解決地址沖突問題,則轉(zhuǎn)⑥;
[0040]②若該位置無沖突,即該處hash_coll = 0,則轉(zhuǎn)③;若該位置有沖突,則轉(zhuǎn)④;
[0041]③若該位置已被占用,即該處1gicalID ^ null,且該處存放的票卡邏輯號與待查詢票卡邏輯號相等,則返回布爾值1,表示“查找命中”;若該位置未被占用,或者該處存放的票卡邏輯號與待查詢票卡邏輯號不相等,則返回布爾值0,表示“查找未命中”;
[0042]④若該位置已被占用,即該處1gicalID幸null,且該處存放記錄的票卡邏輯號與待查詢票卡邏輯號相等,則返回布爾值1,表示“查找命中”;否則令locatejimes+ = I并轉(zhuǎn)⑤;
[0043]⑤若locate_times〈TableSize,則根據(jù)(2.2)確定的地址探測方法定位到下一個目標(biāo)位置并轉(zhuǎn)②;若locate_times = TableSize,貝Ij返回布爾值0,表示“查找未命中”;
[0044]⑥若該位置未被占用,即表中該處地址為null,則返回布爾值0,表示“查找未命中”,否則轉(zhuǎn)⑦;
[0045]⑦在該位置指向的鏈表中逐個比對各節(jié)點的票卡邏輯號與待查詢票卡邏輯號是否相等,若找到相匹配的,則返回布爾值1,表示“查找命中”;否則返回布爾值0,表示“查找未命中”;
[0046](3.3.4)基于哈希表的單條黑名單刪除
[0047]①以待刪除單條黑名單記錄的票卡邏輯號為關(guān)鍵字key,根據(jù)(2.1)確定的哈希函數(shù)將其映射到哈希表中對應(yīng)位置H(key);若(2.2)中選擇開放尋址法解決地址沖突問題,則設(shè)置探測器locatejimes = O并轉(zhuǎn)②;若(2.2)中選擇分離鏈接法解決地址沖突問題,則轉(zhuǎn)⑥;
[0048]②若該位置無沖突,即該處hash_coll = 0,則轉(zhuǎn)③;若該位置有沖突,則轉(zhuǎn)④;
[0049]③若該位置已被占用,即該處1gicalID ^ null,且該處存放的票卡邏輯號與待刪除黑名單記錄的票卡邏輯號相等,則將該處存放的單條黑名單有效字段均置為null,同時修改探測路徑上所有其他位置的hash_colI,即令hash_col1- = I,并返回布爾值I,表示“刪除成功”;若該位置未被占用,或者該處存放的票卡邏輯號與待查詢票卡邏輯號不相等,則返回布爾值0,表示“刪除失敗”;
[0050]④若該位置已被占用,即該處1gicalID幸null,且該處存放的票卡邏輯號與待刪除黑名單記錄的票卡邏輯號相等,則將該處存放的單條黑名單有效字段均置為null,同時修改探測路徑上所有其他位置的hash_colI,即令hash_col1- = I,并返回布爾值I,表示“刪除成功”;否則令locate_times+ = I并轉(zhuǎn)⑤;
[0051]⑤若locate_times〈TableSize,則根據(jù)(2.2)確定的地址探測方法定位到下一個目標(biāo)位置并轉(zhuǎn)②;若locatejimes = TableSize,則返回布爾值0,表示“刪除失敗”;
[0052]⑥若該位置未被占用,即表中該處地址為null,則返回布爾值0,表示“刪除失敗”;若該位置已被占用,則轉(zhuǎn)⑦;
[0053]⑦在該位置指向的鏈表中逐個比對各記錄的票卡邏輯號與待查詢黑名單記錄的關(guān)鍵字是否相等,若查找到相匹配的,則將其從鏈表刪除,并返回布爾值1,表示“刪除成功”;否則返回布爾值0,表示“刪除失敗”。
[0054]具體的,所述步驟(1.1)中,所述的單條黑名單記錄應(yīng)用于黑名單票卡邏輯號分布較為離散的情況下,包含如下字段:票卡邏輯號(1gicalID)、黑名單生成時間(cre_time)、黑名單類別(b_class)、最近活動時間(active_time)、生成原因(cre_reason)。
[0055]具體的,所述步驟(1.1)中,所述的號段黑名單記錄包含如下字段:起始邏輯號(logicalID_beg)、終止邏輯號(logicalID_end)、黑名單生成時間(cre_time)、黑名單類另Ij (b_class)、生成原因(cre_reason)。
[0056]具體的,所述步驟(1.2)中,所述的時間限制方法設(shè)定票卡的有效期,有效期內(nèi)用戶在終端使用票卡時,自動將卡激活,使其有效期增加;若有效期內(nèi)從未使用該卡,則需要到地鐵售票窗口延長有效期;所述的時間限制方法僅將黑名單全數(shù)據(jù)庫中處于有效期內(nèi)的黑名單數(shù)據(jù)下發(fā)到終端設(shè)備。
[0057]具體的,所述步驟(1.2)中,所述的分布式下載方法根據(jù)設(shè)備容量將黑名單庫動態(tài)地分配到各終端設(shè)備上,并保證全部黑名單覆蓋整個系統(tǒng)。
[0058]具體的,所述步驟(2.1)中,構(gòu)造相應(yīng)的哈希函數(shù)H(key)方法包括直接尋法址、數(shù)字分析法、平方取中法、折疊法、除留余數(shù)法。
[0059]更為具體的,所述步驟(3.2.1)②中,所述的號段記錄中的有效字段必須包括起始邏輯號(logicalID_beg)、終止邏輯號(logicalID_end),號段記錄中的其他字段可根據(jù)運營需求及終端實際可用內(nèi)存酌情選取。
[0060]更為具體的,所述步驟(3.3.1)①中,所述的空哈希表,其初始化方案取決于(2.2)中選定的地址沖突解決方法:若選擇開放尋址法,則哈希表是一個結(jié)構(gòu)數(shù)組,其結(jié)構(gòu)體成員除了單條黑名單記錄中的有效字段外,還應(yīng)包括hash_coll項,用于記錄表中該位置當(dāng)前的沖突次數(shù),且空哈希表中各位置均滿足:hash_coll = 0、logicalID = null ;若選擇分離鏈接法,則哈希表是一個頭節(jié)點指針數(shù)組,被散列到表中某處的單條黑名單記錄中的有效字段被存入預(yù)先創(chuàng)建的鏈表節(jié)點,再鏈入該位置,且空哈希表中各指針均置為null。
[0061]更為具體的,所述步驟(3.3.1)②中,所述的有效字段必須包括票卡邏輯號(1gicalID),單條黑名單記錄中的其他字段可根據(jù)運營需求及終端實際可用內(nèi)存酌情選取。
[0062]更為具體的,所述步驟(3.3.1)①中所述的載荷因子α,其取值范圍通??刂圃?.6?0.9之內(nèi);對于開放尋址法,則應(yīng)嚴(yán)格限制在0.8以下。
[0063]有益效果:本發(fā)明提供的提高AFC系統(tǒng)終端設(shè)備黑名單匹配效率的方法,其優(yōu)點在于:
[0064]①采用單條記錄和號段記錄相結(jié)合的終端黑名單存儲方式,既兼顧了存儲方式的靈活性,又可節(jié)約存儲空間;
[0065]②采用時間限制方法和分布式下載方法相結(jié)合的終端設(shè)備黑名單下載方案,有效減少了終端設(shè)備存放黑名單的數(shù)量,從而提高了檢測效率;
[0066]③采用基于有序鏈表的號段黑名單檢索和基于哈希表的單條黑名單檢索相結(jié)合的復(fù)合檢索方案,查詢算法的時間復(fù)雜度從線性查詢的O(N)降低到了二分法查詢的o(lgN)和哈希表查詢的0(1)。
[0067]④支持聯(lián)機(jī)模式下對各終端設(shè)備內(nèi)存黑名單數(shù)據(jù)的插入、刪除操作,能夠?qū)崿F(xiàn)緊急情況下終端設(shè)備對黑名單變化的實時響應(yīng)。
【附圖說明】
[0068]圖1為本發(fā)明主要實施步驟示意圖。
[0069]圖2為黑名單票卡檢索流程示意圖。
【具體實施方式】
[0070]下面結(jié)合附圖對本發(fā)明作更進(jìn)一步的說明。
[0071]實施例1:選擇分離鏈接法解決哈希函數(shù)H (key)中地址沖突問題
[0072]如圖1所示為一種提高AFC系統(tǒng)終端設(shè)備黑名單匹配效率的方法的步驟示意圖,下面結(jié)合實例對本發(fā)明做出進(jìn)一步的說明。
[0073](I)車站終端設(shè)備黑名單存儲及下載方案設(shè)計
[0074]本實例以蘇州地鐵AFC系統(tǒng)為實施背景,其終端嵌入式讀寫器采用32位CPU、嵌入式操作系統(tǒng),F(xiàn)LASH與內(nèi)存應(yīng)有足夠的容量,用以運行操作系統(tǒng)、應(yīng)用程序和保存與票卡有關(guān)的參數(shù)文件。
[0075](1.1)黑名單票卡邏輯號分布較為離散的情況下,采取單條存儲方式;對于某些特殊的情況,譬如整批票卡的丟失,采取號段記錄的方式以節(jié)約存儲空間。
[0076](1.2)采用時間限制方法和分布式下載方法相結(jié)合的終端設(shè)備黑名單下載方案
[0077](1.2.1)時間限制方法將票卡的有效期定為一年。有效期內(nèi)用戶在終端使用票卡時,自動將卡激活,使其有效期增加一年;若一年之內(nèi)從未使用該卡,則需要到地鐵售票窗口延長有效期。時間限制方法僅將黑名單全數(shù)據(jù)庫中處于有效期內(nèi)的黑名單數(shù)據(jù)下發(fā)到終端設(shè)備。
[0078](1.2.2)根據(jù)設(shè)備容量大小,將黑名單庫動態(tài)地分配到各終端設(shè)備上,并保證全部黑名單覆蓋整個系統(tǒng);同時,各設(shè)備上存放的黑名單列表也應(yīng)動態(tài)地從全黑名單庫中提取,使得同一設(shè)備在一段時間內(nèi)被黑名單庫完全覆蓋。
[0079](2)基于單條黑名單票卡邏輯號統(tǒng)計規(guī)律的哈希函數(shù)設(shè)計及地址沖突解決方案確定
[0080](2.1)蘇州地鐵票卡邏輯號為8個字節(jié)的BCD碼,可用16位十進(jìn)制數(shù)表示。其低32位從高位到低位依次為:前導(dǎo)碼(Sbit)+卡印刷類型(Sb