一種dfa矩陣的壓縮方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種DFA矩陣的壓縮方法,其包括:獲取確定的有限狀態(tài)自動機(jī)DFA矩陣;將DFA矩陣的行分為若干組;從分在同一組的行中分別選出每一列上出現(xiàn)次數(shù)最多的元素值,獲得組的核;以及獲得分在同一組的行中的特別元素值,建立第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,第一對應(yīng)關(guān)系為組與核的對應(yīng)關(guān)系,第二對應(yīng)關(guān)系為特別元素值與特別元素值所在組、所在行及所在列的對應(yīng)關(guān)系;保存核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系。本發(fā)明方法不僅能夠提高DFA矩陣的壓縮率,而且不以DFA矩陣的列中具有連續(xù)相同狀態(tài)為壓縮DFA矩陣的前提條件,容錯率相對較高。
【專利說明】—種DFA矩陣的壓縮方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)字處理領(lǐng)域,具體涉及一種確定的有限狀態(tài)自動機(jī)(英文:Deterministic Finite Automaton,簡稱:DFA)矩陣的壓縮方法及裝置。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)規(guī)模的爆炸式擴(kuò)大以及網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,網(wǎng)絡(luò)安全問題也日益嚴(yán)峻,傳統(tǒng)防火墻已不能滿足如今復(fù)雜多變的網(wǎng)絡(luò)安全需求。在這種情況下,業(yè)界開發(fā)了一種入侵檢測系統(tǒng)(英文:Intrusion_Detection System,簡稱:IDS)。IDS是一種對網(wǎng)絡(luò)傳輸進(jìn)行實(shí)時監(jiān)視,在發(fā)現(xiàn)可疑數(shù)據(jù)包時發(fā)出警報或者采取主動反應(yīng)措施的網(wǎng)絡(luò)安全系統(tǒng),能夠?yàn)橛嬎銠C(jī)網(wǎng)絡(luò)系統(tǒng)在面對內(nèi)部攻擊、外部攻擊和誤操作時提供實(shí)時保護(hù),幫助計算機(jī)網(wǎng)絡(luò)系統(tǒng)應(yīng)付各種網(wǎng)絡(luò)攻擊。目前,IDS主要采用的入侵檢測技術(shù)是深度包檢測(英文:De印Packet Inspection,簡稱:DPI)技術(shù),其主要作用于開放系統(tǒng)互連(英文:0pen SystemInterconnection,簡稱:0SI)參考模型的應(yīng)用層。深度包檢測技術(shù)用于實(shí)時地對數(shù)據(jù)包中包含的數(shù)據(jù)內(nèi)容進(jìn)行檢測,通過判斷數(shù)據(jù)包的數(shù)據(jù)中是否包含預(yù)定入侵規(guī)則中正則表達(dá)式所描述的特征(該判斷過程稱為正則表達(dá)式的匹配),過濾出滿足預(yù)定入侵規(guī)則的數(shù)據(jù)包,并交由上級系統(tǒng)處理。該正則表達(dá)式具有靈活性、邏輯性和功能性強(qiáng)的特點(diǎn),用于描述具有多種變化形式的入侵?jǐn)?shù)據(jù)。正則表達(dá)式可以編譯成DFA,該DFA可以按照狀態(tài)跳轉(zhuǎn)的方式進(jìn)行正則表達(dá)式的匹配。
[0003]DFA是一個能實(shí)現(xiàn)狀態(tài)轉(zhuǎn)移的自動機(jī),包括多個表示狀態(tài)的結(jié)點(diǎn)以及這些狀態(tài)結(jié)點(diǎn)之間的有向邊(有向邊可以稱為轉(zhuǎn)移邊)。其中,多個表示狀態(tài)的結(jié)點(diǎn)可以包括一個表示起始狀態(tài)的結(jié)點(diǎn)、一個或多個表示終止?fàn)顟B(tài)的的結(jié)點(diǎn),還可以包括一個或多個一般狀態(tài)的結(jié)點(diǎn)。DFA從起始狀態(tài)開始,逐個跳轉(zhuǎn)字符地讀入一個跳轉(zhuǎn)字符串,每讀入一個跳轉(zhuǎn)字符就根據(jù)給定的轉(zhuǎn)移函數(shù)從當(dāng)前狀態(tài)轉(zhuǎn)移至下一個狀態(tài)。在讀完該跳轉(zhuǎn)字符串之后,如果該自動機(jī)曾經(jīng)轉(zhuǎn)移到某個終止?fàn)顟B(tài)即表示匹配成功,即確定該數(shù)據(jù)包中存在該正則表達(dá)式所描述的數(shù)據(jù)特征,反之則表示正則表達(dá)式匹配失敗。
[0004]目前,DFA—般采用圖論中鄰接矩陣的結(jié)構(gòu)進(jìn)行存儲,這種鄰接矩陣又稱為DFA的跳轉(zhuǎn)表。如圖1所示,一個DFA對應(yīng)一個跳轉(zhuǎn)表,DFA中的每一個起始狀態(tài)對應(yīng)表中的一行,每一個跳轉(zhuǎn)字符對應(yīng)表中的一列。表中的每一個元素為一個狀態(tài),元素(i,j)表示第i個狀態(tài)經(jīng)過跳轉(zhuǎn)字符j可以跳轉(zhuǎn)到的狀態(tài)。圖1示出一種DFA以及該DFA對應(yīng)的跳轉(zhuǎn)表。然而,采用這種DFA的跳轉(zhuǎn)表存在一個問題:當(dāng)大量的正則表達(dá)式編譯成DFA后,其占用的存儲空間大,使得檢索速度變慢。為了克服此問題,可以對正則表達(dá)式進(jìn)行有效的分組,并將每個分組中的正則表達(dá)式進(jìn)行合并編譯,生成對應(yīng)的DFA。這樣,在利用某一個DFA檢測數(shù)據(jù)包時,就可以對多個正則表達(dá)式同時進(jìn)行匹配,從而達(dá)到減少存儲空間和提高查找預(yù)定入侵規(guī)則速度的目的。但是,由于硬件芯片的存儲空間有限,DFA的數(shù)據(jù)仍然較大,當(dāng)使用硬件進(jìn)行深度包檢測時,從片外加載大尺寸的DFA數(shù)據(jù)會極大影響芯片性能。為了解決此問題,有研究人員提出一種識別和壓縮DFA(英文:Recoganized and Compact DFA)的方法,該方法的主要流程步驟可以包括:
[0005]步驟1:輸入DFA矩陣。
[0006]輸入的DFA矩陣是經(jīng)過分組哈希后所生成的N*M方陣,行與行之間是自然排序。在該DFA矩陣中,行代表狀態(tài)號,而列代表跳轉(zhuǎn)字符,N*M方陣中的元素代表跳轉(zhuǎn)狀態(tài)。
[0007]步驟2:按照DFA矩陣的行的相關(guān)性,對行進(jìn)行劃分。
[0008]由于輸入的DFA矩陣之間是自然排序,不便于后續(xù)的壓縮,因此步驟2的目的是將N*M矩陣根據(jù)行相關(guān)進(jìn)行聚類,然后對矩陣進(jìn)行重新排序,劃分成邏輯上直觀的矩陣。該矩陣所具有的特點(diǎn)是,相鄰行之間的相似性較大。由于對整個DFA矩陣行進(jìn)行了重新排序,跳轉(zhuǎn)表中所代表的跳轉(zhuǎn)狀態(tài)也發(fā)生了改變,所以必須對原有狀態(tài)號進(jìn)行重新編輯。經(jīng)過重新編輯行號后,新生成的DFA矩陣是一個經(jīng)過聚類后,相鄰行相關(guān)性較大的DFA矩陣。但新生成矩陣和步驟I中未經(jīng)處理的DFA矩陣是同構(gòu)的,仍然保持原有跳轉(zhuǎn)表的狀態(tài)對應(yīng)關(guān)系。
[0009]步驟3:將DFA矩陣轉(zhuǎn)換成位圖、線性表和輔助數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)壓縮。其中,位圖表示矩陣的位圖模式;線性表表示矩陣的基因信息;輔助數(shù)據(jù)結(jié)構(gòu)表示位圖編號和列的基址的對應(yīng)關(guān)系。
[0010]所謂的位圖,是對一個向量進(jìn)行處理,每遇到第一個不同的狀態(tài),則位圖中該位為1,其余為O。在步驟3中,對DFA矩陣的列向量進(jìn)行位圖處理,處理后的矩陣將成為一個01矩陣,I代表跳轉(zhuǎn)狀態(tài)發(fā)生改變,O代表該狀態(tài)與該列之前最近的I所代表的狀態(tài)相同。將位圖按位存儲,不同的模式分開存儲,對于每一個位圖,若其不足一個字節(jié)的則在其后補(bǔ)O。經(jīng)過處理后的矩陣不再具有元素特性,形成一個模式矩陣,每一列代表一種位圖模式,存儲該矩陣中出現(xiàn)了不同的位圖模式的次數(shù)以及位圖模式的編號。而關(guān)于每一個矩陣的元素特性(以下稱為基因),由于O表示與該列之前最近的I所代表的基因相同,因此只需保存在位圖中為I的基因,將這些基因按列順序存儲,并將每列的起始位置進(jìn)行記錄,形成線性表。將線性表與位圖編號進(jìn)行匹配對應(yīng),生成一個<bitmapID,base>結(jié)構(gòu),bitmapID表示位圖編號,base表示每列基因在線性表的基址。如果相鄰兩列的基因完全相同,則其后base值只需要與前一個base值相同,從而可以減少存儲一列的基因,實(shí)現(xiàn)對線性表的壓縮。
[0011]根據(jù)位圖、線性表和輔助數(shù)據(jù)結(jié)構(gòu),可以還原一個完整的DFA矩陣。例如,當(dāng)輸入一個狀態(tài)和一個跳轉(zhuǎn)字符時,首先根據(jù)輸入的跳轉(zhuǎn)字符,在〈bitmapID,base)數(shù)據(jù)結(jié)構(gòu)中確定其所在的列號和位圖模式,根據(jù)還原該列的數(shù)據(jù)信息,再根據(jù)輸入的狀態(tài)號,可以確定輸出的跳轉(zhuǎn)狀態(tài)。
[0012]從以上可知,在將DFA矩陣轉(zhuǎn)換成位圖、線性表和輔助數(shù)據(jù)結(jié)構(gòu)過程中,減少了位圖中連續(xù)相同狀態(tài)的數(shù)據(jù)的存儲,以及減少了線性列表中完全相同的相鄰列的基因的存儲,從而實(shí)現(xiàn)對DFA矩陣的壓縮,減少DFA數(shù)據(jù)占用的存儲空間。
[0013]但是,上述方法是在DFA矩陣的列中具有連續(xù)相同狀態(tài)的條件下才行之有效,容錯率低,而且位圖中的一位只能代表一個狀態(tài),仍然需要大量數(shù)據(jù)記錄狀態(tài),DFA矩陣的壓
縮率不高。
【發(fā)明內(nèi)容】
[0014]本發(fā)明提供一種DFA矩陣的壓縮方法,通過本發(fā)明方法能夠提高DFA矩陣的壓縮率。[0015]本發(fā)明第一方面提供了一種DFA矩陣的壓縮方法,包括:
[0016]獲取確定的有限狀態(tài)自動機(jī)DFA矩陣;
[0017]將DFA矩陣的行分為若干組;
[0018]從分在同一組的行中分別選出每一列上出現(xiàn)次數(shù)最多的元素值,獲得所述組的核,所述核為將選出的元素值按所屬列的順序排成的行;以及獲得所述分在同一組的行中的特別元素值,所述特別元素值與所述核中對應(yīng)的元素值不同,所述特別元素值所在的列與所述核中對應(yīng)的元素值所在的列相同;
[0019]建立第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述第一對應(yīng)關(guān)系為所述組與所述核的對應(yīng)關(guān)系,所述第二對應(yīng)關(guān)系為所述特別元素值與所述特別元素值所在組、所在行及所在列的對應(yīng)關(guān)系;
[0020]保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系。
[0021]結(jié)合本發(fā)明第一方面,在第一方面的第一種可能實(shí)現(xiàn)方式中,所述將DFA矩陣的行分為若干組,包括:
[0022]基于聚類算法,將DFA矩陣的行分為若干組,使得在同一組中,每一列上的相同元素的數(shù)量大于或等于預(yù)設(shè)值。
[0023]結(jié)合本發(fā)明第一方面的第一種可能實(shí)現(xiàn)方式,在第一方面的第二種可能實(shí)現(xiàn)方式中,所述基于聚類算法,將DFA矩陣的行分為若干組,包括:
[0024]根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖;
[0025]從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值;
[0026]根據(jù)所述閾值,將所述賦權(quán)無向完全圖劃分為邊權(quán)值大于所述閾值的連通子圖;
[0027]將屬于同一個連通子圖的DFA矩陣的行分為一組。
[0028]結(jié)合本發(fā)明第一方面的第二人種可能實(shí)現(xiàn)方式,,在第一方面的第三種可能實(shí)現(xiàn)方式中,在根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖之后,所述方法還包括:將所述賦權(quán)無向完全圖加入圖集合;從所述圖集合中選取未劃分的賦權(quán)無向完全圖進(jìn)行劃分;
[0029]所述從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:從選取的賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值。
[0030]結(jié)合本發(fā)明第一方面第三種可能實(shí)現(xiàn)方式,在第一方面的第四種可能實(shí)現(xiàn)方式中,在將DFA矩陣的行分為若干組之后,所述方法還包括:
[0031]計算第一存儲空間和第二存儲空間;所述第一存儲空間為保存所述若干組所需的存儲空間之和,其中每一組所需的存儲空間包括每一組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;所述第二存儲空間為保存所述DFA矩陣所需的存儲空間,其中保存所述DFA矩陣所需的存儲空間包括由DFA矩陣的所有行組成的組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;
[0032]當(dāng)所述第一存儲空間小于所述第二存儲空間時,將所述連通子圖標(biāo)記為已劃分的圖,并加入所述圖集合;
[0033]當(dāng)所述第一存儲空間大于所述第二存儲空間時,將所述連通子圖加入所述圖集合;
[0034]所述保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括:當(dāng)所述第一存儲空間小于所述第二存儲空間時,保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系。
[0035]結(jié)合本發(fā)明第一方面或第一方面的第一至第四任意一種可能實(shí)現(xiàn)方式,在第一方面的第五種可能實(shí)現(xiàn)方式中,所述從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:從所述賦權(quán)無向完全圖的權(quán)值中選取最小權(quán)值作為閾值。
[0036]結(jié)合本發(fā)明第一方面第二至第五任意一種可能實(shí)現(xiàn)方式,在第一方面的第六種可能實(shí)現(xiàn)方式中,所述賦權(quán)無向完全圖的權(quán)值滿足如下公式:
[0037]w Cri,rj) =C | hamdist Cri,r」)
[0038]其中,w(ri; rj)表示賦權(quán)無向完全圖的權(quán)值集合,A表示DFA矩陣中第i行的元素,rj表示DFA矩陣中第j行的元素,i和j表示不同的行數(shù),C表示DFA矩陣中行所包括的元素的個數(shù),hamdist^, rj)表示海明距離函數(shù)。
[0039]結(jié)合本發(fā)明第一方面或第一方面的第一至第六任意一種可能實(shí)現(xiàn)方式,在第一方面的第七種可能實(shí)現(xiàn)方式中,所述保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括:
[0040]將每一組的核組成核矩陣,保存所述核矩陣;將每一組的特別元素值組成特殊跳轉(zhuǎn)表,保存所述特殊 跳轉(zhuǎn)表;
[0041]所述方法還包括:記錄每一組的核在核矩陣中的地址,以及記錄每一組的特別元素值在所述特殊跳轉(zhuǎn)表中的地址。
[0042]結(jié)合本發(fā)明第一方面或第一方面的第一至第七任意一種可能實(shí)現(xiàn)方式,在第一方面的第八種可能實(shí)現(xiàn)方式中,在獲取DFA矩陣之后,所述方法還包括:
[0043]將所述DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;其中,所述DFA矩陣中相同的列對應(yīng)同一列編號;
[0044]根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的編號,建立所述DFA矩陣的字符映射表,所述字符映射表用于表示所述跳轉(zhuǎn)字符與所述列編號的對應(yīng)關(guān)系;
[0045]將所述DFA矩陣中相同的列進(jìn)行合并,獲得合并后的DFA矩陣;
[0046]所述將DFA矩陣的行分為若干組,包括:將合并后的DFA矩陣的行分為若干組。
[0047]結(jié)合本發(fā)明第一方面的第八種可能實(shí)現(xiàn)方式,在第一方面的第九種可能實(shí)現(xiàn)方式中,所述獲取DFA矩陣,包括:
[0048]獲取至少兩個DFA矩陣;
[0049]所述將所述DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;包括:
[0050]將所述至少兩個DFA矩陣的列進(jìn)行編號,獲得所述至少兩個DFA矩陣的列編號;其中,所述至少兩個DFA矩陣中所有相同的列對應(yīng)同一列編號;
[0051]所述根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的列編號,建立所述DFA矩陣的字符映射表,包括:
[0052]根據(jù)所述至少兩個DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述至少兩個DFA矩陣的列對應(yīng)的列編號,建立所述至少兩個DFA矩陣的字符映射表;
[0053]在建立所述至少兩個DFA矩陣的字符映射表之后,所述方法還包括:
[0054]將所述至少兩個DFA矩陣的字符映射表合并成所述至少兩個DFA矩陣對應(yīng)的共同的字符映射矩陣,其中,所述共同的字符映射矩陣的列對應(yīng)的跳轉(zhuǎn)字符用ASCII碼表示,所述共同的字符映射矩陣的每一行對應(yīng)所述至少兩個DFA矩陣中的一個DFA矩陣;
[0055]將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,所述私有字符映射矩陣由所述共同的字符映射矩陣中的部分列組成,所述公有字符映射矩陣由所述共同的字符映射矩陣中的另一部分列組成;
[0056]將所述公有字符映射矩陣的行進(jìn)行編號,獲得所述公有字符映射矩陣的行對應(yīng)的行編號;其中,所述公有字符映射矩陣中所有相同的行對應(yīng)同一行編號;
[0057]記錄所述公有字符映射矩陣的行與所述行編號的對應(yīng)關(guān)系;
[0058]將所述公有字符映射矩陣中相同的行進(jìn)行合并,獲得壓縮的DFA公有字符映射矩陣。
[0059]結(jié)合本發(fā)明第一方面的第九種可能實(shí)現(xiàn)方式,在第一方面的第十種可能實(shí)現(xiàn)方式中,所述將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括:
[0060]將所述共同的字符映射矩陣中的與表示自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述私有字符映射矩陣的列;
[0061]將所述共同的字符映射矩陣中的與表示非自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述公有字符映射矩陣的列。
[0062]結(jié)合本發(fā)明第一方面的第九種可能實(shí)現(xiàn)方式,在第一方面的第十一種可能實(shí)現(xiàn)方式中,所述將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括:
[0063]將所述共同的字符映射矩陣中的第32至第127列組成私有字符映射矩陣;
[0064]將所述共同的字符映射矩陣中的第O至第31列以及第128至第255列組成公有字符映射矩陣。
[0065]本發(fā)明第二方面提供了一種壓縮DFA矩陣的裝置,包括:
[0066]獲取單元,用于獲取確定的有限狀態(tài)自動機(jī)DFA矩陣;
[0067]分組單元,用于將所述獲取單元獲取到的所述DFA矩陣的行分為若干組;
[0068]核單元,用于在所述分組單元將所述DFA矩陣的行分為若干組之后,從分在同一組的行中分別選出每一列上出現(xiàn)次數(shù)最多的元素值,獲得所述組的核,所述核為將選出的元素值按所屬列的順序排成的行;以及獲得所述分在同一組的行中的特別元素值,所述特別元素值為與所述核中對應(yīng)的元素值不同的所述分在同一組的行中的元素值,所述特別元素值所在的列與所述核中對應(yīng)的元素值所在的列相同;
[0069]記錄單元,用于建立第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述第一對應(yīng)關(guān)系為所述組與所述核的對應(yīng)關(guān)系,所述第二對應(yīng)關(guān)系為所述特別元素值與所述特別元素值所在組、所在打及所在列的對應(yīng)關(guān)系;
[0070]存儲單元,用于保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系。 [0071]結(jié)合本發(fā)明第二方面,在第二方面的第一種可能實(shí)現(xiàn)方式中,分組單元,用于將所述獲取單元獲取到的所述DFA矩陣的行分為若干組,包括:
[0072]用于基于聚類算法,將所述DFA矩陣的行分為若干組,使得在同一組中,每一列上的相同元素的數(shù)量大于或等于預(yù)設(shè)值。[0073]結(jié)合本發(fā)明第二方面的第一種可能實(shí)現(xiàn)方式,在第二方面的第二種可能實(shí)現(xiàn)方式中,所述分組單元用于基于聚類算法,將DFA矩陣的行分為若干組,包括:
[0074]用于:根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖;從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值;根據(jù)所述閾值,將所述賦權(quán)無向完全圖劃分為邊權(quán)值大于所述閾值的連通子圖;將屬于同一個連通子圖的DFA矩陣的行分為一組。
[0075]結(jié)合本發(fā)明第二方面的第二人種可能實(shí)現(xiàn)方式,,在第二方面的第三種可能實(shí)現(xiàn)方式中,所述分組單元還用于:在根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖之后,將所述賦權(quán)無向完全圖加入圖集合;從所述圖集合中選取未劃分的賦權(quán)無向完全圖進(jìn)行劃分;
[0076]所述分組單元用于從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:用于從選取的賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值。
[0077]結(jié)合本發(fā)明第二方面第三種可能實(shí)現(xiàn)方式,在第二方面的第四種可能實(shí)現(xiàn)方式中,所述分組單元還用于:在將DFA矩陣的行分為若干組之后,計算第一存儲空間和第二存儲空間;所述第一存儲空間為保存所述若干組所需的存儲空間之和,其中每一組所需的存儲空間包括每一組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;所述第二存儲空間為保存所述DFA矩陣所需的存儲空間,其中保存所述DFA矩陣所需的存儲空間包括由DFA矩陣的所有行組成的組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;當(dāng)所述第一存儲空間小于所述第二存儲空間時,將所述連通子圖標(biāo)記為已劃分的圖,并加入所述圖集合;當(dāng)所述第一存儲空間大于所述第二存儲空間時,將所述連通子圖加入所述圖集合;
[0078]所述存儲單元用于 保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括:用于當(dāng)所述第一存儲空間小于所述第二存儲空間時,保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系。
[0079]結(jié)合本發(fā)明第二方面或第二方面的第一至第四任意一種可能實(shí)現(xiàn)方式,在第二方面的第五種可能實(shí)現(xiàn)方式中,所述分組單元用于從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:用于從所述賦權(quán)無向完全圖的權(quán)值中選取最小權(quán)值作為閾值。
[0080]結(jié)合本發(fā)明第二方面第二至第五任意一種可能實(shí)現(xiàn)方式,在第二方面的第六種可能實(shí)現(xiàn)方式中,所述賦權(quán)無向完全圖的權(quán)值滿足如下公式:
[0081 ] w (Ji, r」)=C I hamdist Cri,r」)
[0082]其中,w(ri; rj)表示賦權(quán)無向完全圖的權(quán)值集合,A表示DFA矩陣中第i行的元素,rj表示DFA矩陣中第j行的元素,i和j表示不同的行數(shù),C表示DFA矩陣中行所包括的元素的個數(shù),hamdist^, rj)表示海明距離函數(shù)。
[0083]結(jié)合本發(fā)明第二方面或第二方面的第一至第六任意一種可能實(shí)現(xiàn)方式,在第二方面的第七種可能實(shí)現(xiàn)方式中,所述存儲單元用于保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括:
[0084]用于將每一組的核組成核矩陣,保存所述核矩陣;將每一組的特別元素值組成特殊跳轉(zhuǎn)表,保存所述特殊跳轉(zhuǎn)表;
[0085]所述記錄單元還用于:記錄每一組的核在核矩陣中的地址,以及記錄每一組的特別元素值在所述特殊跳轉(zhuǎn)表中的地址。
[0086]結(jié)合本發(fā)明第二方面或第二方面的第一至第七任意一種可能實(shí)現(xiàn)方式,在第二方面的第八種可能實(shí)現(xiàn)方式中,所述裝置還包括:
[0087]編號單元,用于將所述獲取單元獲取到的DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;其中,所述DFA矩陣中相同的列對應(yīng)同一列編號;
[0088]映射單元,用于根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的編號,建立所述DFA矩陣的字符映射表,所述字符映射表用于表示所述跳轉(zhuǎn)字符與所述列編號的對應(yīng)關(guān)系;
[0089]合并單元,用于將所述DFA矩陣中相同的列進(jìn)行合并,獲得合并后的DFA矩陣;
[0090]所述分組單元用于將DFA矩陣的行分為若干組,包括:用于將合并后的DFA矩陣的行分為若干組。
[0091]結(jié)合本發(fā)明第二方面的第八種可能實(shí)現(xiàn)方式,在第二方面的第九種可能實(shí)現(xiàn)方式中,所述獲取單元用于獲取DFA矩陣,包括:用于獲取至少兩個DFA矩陣;
[0092]所述編號單元用于將所述DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;包括:
[0093]用于將所述至少兩個DFA矩陣的列進(jìn)行編號,獲得所述至少兩個DFA矩陣的列編號;其中,所述至少兩個DFA矩陣中所有相同的列對應(yīng)同一列編號;
[0094]所述映射單元用于根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的列編號,建立所述DFA矩陣的字符映射表,包括:
[0095]用于根據(jù)所述至少兩個DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述至少兩個DFA矩陣的列對應(yīng)的列編號,建立所述至少兩個DFA矩陣的字符映射表;
[0096]所述映射單元還用于在建立所述至少兩個DFA矩陣的字符映射表之后,將所述至少兩個DFA矩陣的字符映射表合并成所述至少兩個DFA矩陣對應(yīng)的共同的字符映射矩陣,其中,所述共同的字符映射矩陣的列對應(yīng)的跳轉(zhuǎn)字符用ASCII碼表示,所述共同的字符映射矩陣的每一行對應(yīng)所述至少兩個DFA矩陣中的一個DFA矩陣;
[0097]所述映射單元還用于將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,所述私有字符映射矩陣由所述共同的字符映射矩陣中的部分列組成,所述公有字符映射矩陣由所述共同的字符映射矩陣中的另一部分列組成;
[0098]所述編號單元還用于將所述公有字符映射矩陣的行進(jìn)行編號,獲得所述公有字符映射矩陣的行對應(yīng)的行編號;其中,所述公有字符映射矩陣中所有相同的行對應(yīng)同一行編號;
[0099]所述記錄單元還用于記錄所述公有字符映射矩陣的行與所述行編號的對應(yīng)關(guān)系;
[0100]合并單元還用于將所述公有字符映射矩陣中相同的行進(jìn)行合并,獲得壓縮的DFA公有字符映射矩陣。
[0101]結(jié)合本發(fā)明第二方面的第九種可能實(shí)現(xiàn)方式,在第二方面的第十種可能實(shí)現(xiàn)方式中,所述映射單元用于將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括:
[0102]用于:將所述共同的字符映射矩陣中的與表示自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述私有字符映射矩陣的列;將所述共同的字符映射矩陣中的與表示非自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述公有字符映射矩陣的列。[0103]結(jié)合本發(fā)明第二方面的第九種可能實(shí)現(xiàn)方式,在第二方面的第十一種可能實(shí)現(xiàn)方式中,所述映射單元用于將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括:
[0104]用于:將所述共同的字符映射矩陣中的第32至第127列組成私有字符映射矩陣;將所述共同的字符映射矩陣中的第O至第31列以及第128至第255列組成公有字符映射矩陣。
[0105]本發(fā)明提供的一種DFA矩陣的壓縮方法通過將DFA矩陣進(jìn)行分組,并從組中獲得DFA矩陣的核和特別元素值,并建立第一對應(yīng)關(guān)系,即所述組與所述核的對應(yīng)關(guān)系,以及建立第二對應(yīng)關(guān)系,即所述特別元素值與所述特別元素值所在組、所在行及所在列的對應(yīng)關(guān)系。由于保存DFA矩陣的核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系所需的存儲空間小于保存DFA矩陣的存儲空間,因此,本發(fā)明方法能夠提高DFA矩陣的壓縮率。另外,本發(fā)明方法不以DFA矩陣的列中具有連續(xù)相同狀態(tài)為壓縮DFA矩陣的前提條件,容錯率相對較高。
【專利附圖】
【附圖說明】
[0106]為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對現(xiàn)有技術(shù)和實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0107]圖1是一種DFA矩陣不意圖;
[0108]圖2是另一種DFA矩陣的示意圖;
[0109]圖3是本發(fā)明實(shí)施例提供的一種DFA矩陣的壓縮方法的流程圖;
[0110]圖4是又一種DFA矩陣的不意圖;
[0111]圖5是本發(fā)明實(shí)施例提供的對DFA矩陣的行進(jìn)行分組的步驟流程圖;
[0112]圖6是本發(fā)明實(shí)施例中合并DFA矩陣中相同的列的步驟流程圖;
[0113]圖7是本發(fā)明實(shí)施例提供的一種DFA跳轉(zhuǎn)表不意圖;
[0114]圖8是本發(fā)明實(shí)施例提供的一種合并后的DFA矩陣示意圖;
[0115]圖9是本發(fā)明實(shí)施例提供的一種壓縮多個DFA矩陣的步驟流程示意圖;
[0116]圖10是本發(fā)明實(shí)施例提供的一種多個DFA矩陣的共同的字符映射矩陣示意圖;
[0117]圖11是本發(fā)明實(shí)施例提供的一種私有字符映射矩陣示意圖;
[0118]圖12是本發(fā)明實(shí)施例提供的一種公有字符映射矩陣示意圖;
[0119]圖13是本發(fā)明實(shí)施例提供的一種壓縮DFA矩陣的裝置示意圖;
[0120]圖14是本發(fā)明實(shí)施例提供的另一種壓縮DFA矩陣的裝置示意圖。
【具體實(shí)施方式】
[0121]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、詳細(xì)地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。[0122]為了更好地理解本發(fā)明的技術(shù)方案,下面結(jié)合附圖對本發(fā)明提供的實(shí)施例進(jìn)行詳細(xì)地描述。
[0123]一般DFA矩陣包括256列,每一列代表一個跳轉(zhuǎn)字符,也即DFA矩陣的列對應(yīng)跳轉(zhuǎn)字符,跳轉(zhuǎn)字符的寬度為一個字節(jié)。圖2示出了一種DFA矩陣(圖2只示出了部分跳轉(zhuǎn)字符),該DFA矩陣包括起始狀態(tài)列和7個與跳轉(zhuǎn)字符對應(yīng)的列(如a、b、C、d、e、f、g跳轉(zhuǎn)字符代表的列)。為了壓縮DFA矩陣,減少DFA矩陣所需的存儲空間,本發(fā)明實(shí)施例提供一種DFA矩陣的壓縮方法,用于提高DFA矩陣的壓縮率。如圖3所示,所述方法具體可以包括:
[0124]101、獲取 DFA 矩陣。
[0125]DFA矩陣的矩陣元素表示相應(yīng)行表示的狀態(tài)在輸入相應(yīng)列表示的跳轉(zhuǎn)字符后跳轉(zhuǎn)到的狀態(tài)。DFA矩陣的列表示輸入的跳轉(zhuǎn)字符,DFA矩陣的行表示狀態(tài)。如圖3所示,圖3中的DFA矩陣為5列12行的DFA矩陣。
[0126]102、將DFA矩陣的行分為若干組。
[0127]可以按照DFA矩陣的行的相似度,將相似度高的行分在一組。相似度高的行即具有相同的元素值較多的行。這里的若干組可以是一組,也可以是兩組或兩組以上。具體的,可以基于聚類算法,將DFA矩陣的行分為若干組,使得在同一組中,每一列上的相同元素的數(shù)量大于或等于預(yù)設(shè)值。這里的預(yù)設(shè)值可以根據(jù)每一組包含的行數(shù)進(jìn)行設(shè)定,如預(yù)設(shè)值可以設(shè)定為一個組包含的行數(shù)減去預(yù)設(shè)的數(shù)的差值,預(yù)設(shè)的數(shù)可以為1、2或其他數(shù)。預(yù)設(shè)的數(shù)越小,預(yù)設(shè)值越大,同一組內(nèi)的行的相似度越高。例如,將圖4中的DFA矩陣的行分為四組,分別為第O組、第I組、第2組和第3組,預(yù)設(shè)值為每一組包含的行數(shù)減I。具體的,將第O行、第I行、第2行、第3行和第10行分在第O組,第O組包含的行完全相同;將第4行分在第I組,第I組只包括第4行,相當(dāng)于第I組包含的行完全相同;將第5行、第6行和第8行分在第2組,第2組包含3個行,每一列上相同元素的數(shù)量都大于或等于2 ;將第7行、第9行、第11行和第12行分在第3組,第3組包含4個行,每一列上相同元素的數(shù)量都大于或等于3。
[0128]103、從分在同一組的行中分別選出每一列上出現(xiàn)次數(shù)最多的元素值,獲得所述組的核和所述分在同一組的行中的特別元素值。
[0129]其中,所述核為將選出的元素值按所屬列的順序排成的行;所述特別元素值為與所述核中對應(yīng)的元素值不同的所述分在同一組的行中的元素值,所述特別元素值所在的列與所述核中對應(yīng)的元素值所在的列相同。
[0130]以圖4中的DFA矩陣為例,在上述分的四個組中,第O組的核即為“ 3、1、O、2、4 ”,第O組沒有存在特別元素值;第I組的核即為“3、8、7、2、4”即第4行所包含的元素值,第I組也沒有存在特別元素值;第2組的核即為“9、6、7、12、10”,由于第2組中的第5行第2列對應(yīng)的元素值為8與第2組的核中的第2列對應(yīng)的元素值6不同,因此第2組的特別元素值為8 ;第3組的核即為“9、11、0、12、10”,由于第3組中的第12行第5列對應(yīng)的元素值為5與第2組的核中的第5列對應(yīng)的元素值10不同,因此第3組的特別元素值為5。
[0131]104、建立第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述第一對應(yīng)關(guān)系為所述組與所述核的對應(yīng)關(guān)系,所述第二對應(yīng)關(guān)系為所述特別元素值與所述特別元素值所在組、所在行及所在列的對應(yīng)關(guān)系。
[0132]本發(fā)明實(shí)施例記錄每一個組與核的對應(yīng)關(guān)系,以及記錄特別元素值與其所在組、所在行及所在列的對應(yīng)關(guān)系。例如,記錄上述第2組的特別元素值為8所在的組為第2組,所在的行為第5行,所在的列為第2列;以及記錄上述第3組的特別元素值為5所在的組為第3組,所在的行為第12行,所在的列為第5列。簡而言之,記錄特別元素值8和5分別在DFA矩陣中的位置。
[0133]105、保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系。
[0134]應(yīng)用本發(fā)明實(shí)施例,上述圖4所表示的DFA矩陣只需保存4個組的核、以及特別元素值5、8,以4個組的核與組的對應(yīng)關(guān)系,特別元素值在DFA矩陣中的位置。其中,4個組的核的存儲空間只相當(dāng)于DFA矩陣的4個行的存儲空間,其他特別元素值、4個組的核與組的對應(yīng)關(guān)系、特別元素值在DFA矩陣中的位置所占用的空間遠(yuǎn)小于4個組的核所占用的空間。因此,保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,顯然比保存DFA矩陣所需的存儲空間小。根據(jù)所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,仍然可以還原出所述DFA矩陣。因此,本發(fā)明實(shí)施例提供的方法能夠壓縮DFA矩陣,減少存儲DFA矩陣所需的存儲空間,而且所述方法不以DFA矩陣的列中具有連續(xù)相同狀態(tài)為壓縮DFA矩陣的前提條件,容錯率相對較高。
[0135]在本發(fā)明實(shí)施例中,步驟102可以通過如下技術(shù)措施進(jìn)一步實(shí)現(xiàn),其具體可以包括:
[0136]根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖;
[0137]從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值。
[0138]根據(jù)所述閾值,將所述賦權(quán)無向完全圖劃分為邊權(quán)值大于所述閾值的連通子圖;將屬于同一個連通子圖的DFA矩陣的行分為一組。
[0139]以下結(jié)合圖5對DFA矩陣的行的分組做詳細(xì)說明。
[0140]如圖5所示,基于層次聚類法,對DFA矩陣的行進(jìn)行分組。該層次聚類法是一種自頂向下分裂的層次聚類。首先將所有的對象置于一個分組中,對象即指DFA矩陣,然后逐步細(xì)分成越來越小的分組,直至達(dá)到結(jié)束條件,得到所要的分組。應(yīng)用該層次聚類法實(shí)現(xiàn)DFA矩陣分組的具體步驟包括:
[0141]201、輸入數(shù)據(jù)集。該數(shù)據(jù)集即表示DFA矩陣。
[0142]202、構(gòu)造賦權(quán)無向完全圖G。
[0143]具體的,根據(jù)輸入的數(shù)據(jù)集,構(gòu)造賦權(quán)無向完全圖G所述賦權(quán)無向完全圖的權(quán)值滿足如下公式:
[0144]w Cri,rj) =C | hamdist Cri,r」)
[0145]其中,w(ri; rj)表示賦權(quán)無向完全圖的權(quán)值集合,A表示DFA矩陣中第i行的元素,rj表示DFA矩陣中第j行的元素,i和j表示不同的行數(shù),C表示DFA矩陣中行所包括的元素的個數(shù),hamdist Ov rj)表示海明距離函數(shù)。所述閾值可以是所述賦權(quán)無向完全圖的最小權(quán)值。
[0146]203、將賦權(quán)無向完全圖G加入圖集合Gs中。其中,圖集合Gs初始為空。
[0147]204、判斷圖集合Gs中是否包含未劃分的圖。
[0148]若判斷圖集合Gs中包含未劃分的圖,則執(zhí)行步驟205。
[0149]若判斷圖集合Gs中不包含未劃分的圖,則執(zhí)行步驟211。
[0150]211、層次聚類結(jié)束,輸出圖集合Gs。此時輸出的圖集合Gs中的劃分的連通子圖即表示DFA矩陣的行的分組,保存這些分組的核、特別元素值、這些分組與核的對應(yīng)關(guān)系,以及特別元素值與特別元素值所在組、所在行及所在列的對應(yīng)關(guān)系。
[0151]205、選取一個未劃分的圖Gi。
[0152]具體的,從圖集合Gs中選取一個未劃分的賦權(quán)無向完全圖進(jìn)行劃分。
[0153]206、判斷圖Gi中是否有未被選中的權(quán)值。
[0154]若判斷圖Gi中有未被選中的權(quán)值,則執(zhí)行步驟207 ;
[0155]若判斷圖Gi中沒有未被選中的權(quán)值,則返回執(zhí)行步驟204。
[0156]207、從選取的賦權(quán)無向完全圖的權(quán)值中選取最小權(quán)值作為閾值。
[0157]208、判斷所述閾值能否劃分圖Gi。
[0158]若判斷所述閾值能夠劃分圖Gi,則執(zhí)行步驟209 ;
[0159]若判斷所述閾值不能夠劃分圖Gi,則返回執(zhí)行步驟206。
[0160]209、根據(jù)閾值,將圖Gi劃分為多個連通子圖。該連通子圖的邊權(quán)值大于所述閾值。
[0161]在將圖Gi劃分為多個連通子圖之后,也即在將圖Gi分為多個組之后,計算第一存儲空間和第二存儲空間;所述第一存儲空間為保存所述多個組所需的存儲空間之和,其中每一組所需的存儲空間包括每一組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;所述第二存儲空間為保存所述DFA矩陣所需的存儲空間,其中保存所述DFA矩陣所需的存儲空間包括由DFA矩陣的所有行組成的組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間。
[0162]當(dāng)所述第一存儲空間小于所述第二存儲空間時,將所述連通子圖標(biāo)記為已劃分的圖,并執(zhí)行步驟210 ;當(dāng)所述第一存儲空間大于所述第二存儲空間時,也將執(zhí)行步驟210。
[0163]對于第一存儲空間和第二存儲空間的比較,還可以通過比較每個劃分的組的目標(biāo)函數(shù)值之和與圖Gi的目標(biāo)函數(shù)值來實(shí)現(xiàn)。其中,劃分的組的目標(biāo)函數(shù)用于計算保存每個劃分的組所需的存儲空間,其計算公式可以為:f (G) =Cost (G)+C,其中,f(G)表示保存每個劃分的組所需的存儲空間,C表示劃分的組的核所需的存儲空間,cost(G)表示分組的存儲代價,即用于存儲除核以為還需存儲的對應(yīng)關(guān)系信息、特別元素值等。圖Gi的目標(biāo)函數(shù)值用于計算直接保存圖Gi對應(yīng)的DFA矩陣的所需的存儲空間。當(dāng)劃分的組的目標(biāo)函數(shù)值之和小于圖Gi的目標(biāo)函數(shù)值時,則將劃分得到的子圖加入到圖集合Gs中,并標(biāo)記這些子圖為為劃分圖。
[0164]210、將劃分得到的連通子圖加入圖集合Gs。
[0165]在執(zhí)行步驟210后,重新返回步驟211。
[0166]在上述實(shí)施例中,在獲得劃分的組的核之后,可以將獲得的所有核組成核矩陣,保存核矩陣,并記錄每一組的核在核矩陣中的地址,從而實(shí)現(xiàn)對各組的核的保存;還可以將每一組的特別元素值組成特殊跳轉(zhuǎn)表,保存所述特殊跳轉(zhuǎn)表,并記錄每一組的特別元素值在所述特殊跳轉(zhuǎn)表中的地址,以實(shí)現(xiàn)每一組的特別元素值的保存。
[0167]為了進(jìn)一步壓縮DFA矩陣,本發(fā)明實(shí)施例還可以采取以下技術(shù)措施。
[0168]如圖6所示,在本實(shí)施例中,在獲取DFA矩陣之后,所述方法還可以包括:
[0169]301、將所述DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號。其中,所述DFA矩陣中相同的列對應(yīng)同一列編號。[0170]302、根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的編號,建立所述DFA矩陣的字符映射表。所述字符映射表用于表示所述跳轉(zhuǎn)字符與所述列編號的對應(yīng)關(guān)系。
[0171]303、將所述DFA矩陣中相同的列進(jìn)行合并,獲得合并后的DFA矩陣。
[0172]304、將合并后的DFA矩陣的行分為若干組。
[0173]例如,根據(jù)上述步驟,可以將圖2所示的DFA矩陣轉(zhuǎn)換為如圖7所示的DFA矩陣的字符映射表,以及如圖8所示的合并后的DFA矩陣。在圖2所示的DFA矩陣中,跳轉(zhuǎn)字符a、c、g對應(yīng)的列完全相同,列的元素值分別是0、0、0、4,列對應(yīng)的列編號為O ;跳轉(zhuǎn)字符b、e對應(yīng)的列完全相同,列的元素值分別是1、4、1、0,列對應(yīng)的列編號為I ;跳轉(zhuǎn)字符d、f對應(yīng)的列完全相同,列的元素值分別是0、2、0、0,列對應(yīng)的列編號為2。在圖7中,跳轉(zhuǎn)字符a、c、g對應(yīng)的列編號都為0,跳轉(zhuǎn)字符b、e對應(yīng)的列編號為1,跳轉(zhuǎn)字符d、f對應(yīng)的列編號為2,在圖8中,合并后的DFA矩陣則由列編號0、1和2對應(yīng)的列組成。
[0174]由于DFA矩陣中的多個相同列只需保存一列,無需重復(fù)保存,因此,合并后的DFA矩陣占用的存儲空間較小。
[0175]當(dāng)獲取多個DFA矩陣時,本發(fā)明實(shí)施例還可以采取以下進(jìn)一步技術(shù)措施,同時壓縮多個DFA矩陣。
[0176]如圖9所示,壓縮多個DFA矩陣的步驟包括:
[0177]401、獲取至少兩個DFA矩陣。
[0178]402、將所述至少兩個DFA矩陣的列進(jìn)行編號,獲得所述至少兩個DFA矩陣的列編號;其中,所述至少兩個DFA矩陣中所有相同的列對應(yīng)同一列編號。
[0179]403、根據(jù)所述至少兩個DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述至少兩個DFA矩陣的列對應(yīng)的列編號,建立所述至少兩個DFA矩陣的字符映射表。
[0180]404、將所述至少兩個DFA矩陣中相同的列進(jìn)行合并,獲得合并后的DFA矩陣。每個列編號可以對應(yīng)合并后的DFA矩陣中的一個列。
[0181 ] 405、將所述至少兩個DFA矩陣的字符映射表合并成所述至少兩個DFA矩陣對應(yīng)的共同的字符映射矩陣。其中,所述共同的字符映射矩陣的列對應(yīng)的跳轉(zhuǎn)字符用ASCII碼表示,所述共同的字符映射矩陣的每一行對應(yīng)所述至少兩個DFA矩陣中的一個DFA矩陣。
[0182]406、將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,所述私有字符映射矩陣由所述共同的字符映射矩陣中的部分列組成,所述公有字符映射矩陣由所述共同的字符映射矩陣中的另一部分列組成。
[0183]407、將所述公有字符映射矩陣的行進(jìn)行編號,獲得所述公有字符映射矩陣的行對應(yīng)的行編號;其中,所述公有字符映射矩陣中所有相同的行對應(yīng)同一行編號。
[0184]408、記錄所述公有字符映射矩陣的行與所述行編號的對應(yīng)關(guān)系。
[0185]409、將所述公有字符映射矩陣中相同的行進(jìn)行合并,獲得壓縮的DFA公有字符映射矩陣。
[0186]例如,圖10示出的是2001個DFA矩陣對應(yīng)的共同的字符映射矩陣,其包含2001行256列,其中第O至第第2000行分別對應(yīng)第O至第2000個DFA矩陣,第O至第255列分別對應(yīng)第O至第255個跳轉(zhuǎn)字符,矩陣元素是列對應(yīng)的編號。顯然,共同的字符映射矩陣是由2001個DFA矩陣的字符映射表組成,每個字符映射表構(gòu)成一行。該共同的字符映射矩陣矩陣的第32?127列表示自然語言符號,自然語言符號包括:數(shù)字、字母、標(biāo)點(diǎn)等,將第32?127列組成如圖11所示的私有字符映射矩陣,該共同的字符映射矩陣矩陣的第O?第31列及第128?255列表示非自然語言符號,非自然語言符號主要包括控制類語言以及用于保留或傳輸?shù)亩M(jìn)制數(shù)據(jù),將第O?第31列及第128?255列組成如圖12所示的公有字符映射矩陣。在將私有字符映射矩陣和公有字符映射矩陣分別存儲于媒體的不同位置。由于第O?第31列及第128?255列表示非自然語言符號,絕大多數(shù)轉(zhuǎn)換為DFA的正則表達(dá)式都沒有處理非自然語言符號,其構(gòu)成的公有字符映射矩陣存在大量相同的行。因此,可以將公有字符映射矩陣中相同的行可以在連續(xù)的存儲空間進(jìn)行合并壓縮,并記錄所述公有字符映射矩陣的行與所述行編號的對應(yīng)關(guān)系,從而減少公有字符映射矩陣所需的存儲空間。
[0187]如圖13所示,本發(fā)明實(shí)施例還提供一種壓縮DFA矩陣的裝置,包括:
[0188]獲取單元501,用于獲取確定的有限狀態(tài)自動機(jī)DFA矩陣;
[0189]分組單元502,用于將所述獲取單元501獲取到的所述DFA矩陣的行分為若干組;
[0190]核單元503,用于在所述分組單元502將所述DFA矩陣的行分為若干組之后,從分在同一組的行中分別選出每一列上出現(xiàn)次數(shù)最多的元素值,獲得所述組的核,所述核為將選出的元素值按所屬列的順序排成的行;以及獲得所述分在同一組的行中的特別元素值,所述特別元素值為與所述核中對應(yīng)的元素值不同的所述分在同一組的行中的元素值,所述特別元素值所在的列與所述核中對應(yīng)的元素值所在的列相同;
[0191]記錄單元504,用于建立第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述第一對應(yīng)關(guān)系為所述組與所述核的對應(yīng)關(guān)系,所述第二對應(yīng)關(guān)系為所述特別元素值與所述特別元素值所在組、所在行及所在列的對應(yīng)關(guān)系;
[0192]存儲單元505,用于保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第
二對應(yīng)關(guān)系。
[0193]可選的,分組單元502,用于將所述獲取單元501獲取到的所述DFA矩陣的行分為若干組,包括:
[0194]用于基于聚類算法,將所述DFA矩陣的行分為若干組,使得在同一組中,每一列上的相同元素的數(shù)量大于或等于預(yù)設(shè)值。
[0195]可選的,所述分組單元502用于基于聚類算法,將DFA矩陣的行分為若干組,包括:
[0196]用于:根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖;從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值;根據(jù)所述閾值,將所述賦權(quán)無向完全圖劃分為邊權(quán)值大于所述閾值的連通子圖;將屬于同一個連通子圖的DFA矩陣的行分為一組。
[0197]可選的,所述分組單元502還用于:在根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖之后,將所述賦權(quán)無向完全圖加入圖集合;從所述圖集合中選取未劃分的賦權(quán)無向完全圖進(jìn)行劃分;
[0198]所述分組單元502用于從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:用于從選取的賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值。
[0199]可選的,所述分組單元502還用于:在將DFA矩陣的行分為若干組之后,計算第一存儲空間和第二存儲空間;所述第一存儲空間為保存所述若干組所需的存儲空間之和,其中每一組所需的存儲空間包括每一組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;所述第二存儲空間為保存所述DFA矩陣所需的存儲空間,其中保存所述DFA矩陣所需的存儲空間包括由DFA矩陣的所有行組成的組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;當(dāng)所述第一存儲空間小于所述第二存儲空間時,將所述連通子圖標(biāo)記為已劃分的圖,并加入所述圖集合;當(dāng)所述第一存儲空間大于所述第二存儲空間時,將所述連通子圖加入所述圖集合;
[0200]所述存儲單元505用于保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括:用于當(dāng)所述第一存儲空間小于所述第二存儲空間時,保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系。
[0201]可選的,所述分組單元502用于從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:用于從所述賦權(quán)無向完全圖的權(quán)值中選取最小權(quán)值作為閾值。
[0202]可選的,所述賦權(quán)無向完全圖的權(quán)值滿足如下公式:
[0203]w Cri,r」)=C | hamdist Cri,r」)
[0204]其中,w(ri; rj)表示賦權(quán)無向完全圖的權(quán)值集合,A表示DFA矩陣中第i行的元素,rj表示DFA矩陣中第j行的元素,i和j表示不同的行數(shù),C表示DFA矩陣中行所包括的元素的個數(shù),hamdist^, rj)表示海明距離函數(shù)。
[0205]可選的,所述存儲單元505用于保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括:
[0206]用于將每一組的核組成核矩陣,保存所述核矩陣;將每一組的特別元素值組成特殊跳轉(zhuǎn)表,保存所述特殊跳轉(zhuǎn)表;
[0207]所述記錄單元504還用于:記錄每一組的核在核矩陣中的地址,以及記錄每一組的特別元素值在所述特殊跳轉(zhuǎn)表中的地址。
[0208]如圖14所示,所述裝置還包括:
[0209]編號單元506,用于將所述獲取單元501獲取到的DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;其中,所述DFA矩陣中相同的列對應(yīng)同一列編號;
[0210]映射單元507,用于根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的編號,建立所述DFA矩陣的字符映射表,所述字符映射表用于表示所述跳轉(zhuǎn)字符與所述列編號的對應(yīng)關(guān)系;
[0211]合并單元508,用于將所述DFA矩陣中相同的列進(jìn)行合并,獲得合并后的DFA矩陣;
[0212]所述分組單元502用于將DFA矩陣的行分為若干組,包括:用于將合并后的DFA矩陣的行分為若干組。
[0213]可選的,所述獲取單元501用于獲取DFA矩陣,包括:用于獲取至少兩個DFA矩陣;
[0214]所述編號單元506用 于將所述DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;包括:
[0215]用于將所述至少兩個DFA矩陣的列進(jìn)行編號,獲得所述至少兩個DFA矩陣的列編號;其中,所述至少兩個DFA矩陣中所有相同的列對應(yīng)同一列編號;
[0216]所述映射單元507用于根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的列編號,建立所述DFA矩陣的字符映射表,包括:
[0217]用于根據(jù)所述至少兩個DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述至少兩個DFA矩陣的列對應(yīng)的列編號,建立所述至少兩個DFA矩陣的字符映射表;
[0218]所述映射單元507還用于在建立所述至少兩個DFA矩陣的字符映射表之后,將所述至少兩個DFA矩陣的字符映射表合并成所述至少兩個DFA矩陣對應(yīng)的共同的字符映射矩陣,其中,所述共同的字符映射矩陣的列對應(yīng)的跳轉(zhuǎn)字符用ASCII碼表示,所述共同的字符映射矩陣的每一行對應(yīng)所述至少兩個DFA矩陣中的一個DFA矩陣;
[0219]所述映射單元507還用于將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,所述私有字符映射矩陣由所述共同的字符映射矩陣中的部分列組成,所述公有字符映射矩陣由所述共同的字符映射矩陣中的另一部分列組成;
[0220]所述編號單元506還用于將所述公有字符映射矩陣的行進(jìn)行編號,獲得所述公有字符映射矩陣的行對應(yīng)的行編號;其中,所述公有字符映射矩陣中所有相同的行對應(yīng)同一行編號;
[0221]所述記錄單元504還用于記錄所述公有字符映射矩陣的行與所述行編號的對應(yīng)關(guān)系;
[0222]合并單元508還用于將所述公有字符映射矩陣中相同的行進(jìn)行合并,獲得壓縮的DFA公有字符映射矩陣。
[0223]可選的,所述映射單元507用于將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括:
[0224]用于:將所述共同的字符映射矩陣中的與表示自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述私有字符映射矩陣的列;將所述共同的字符映射矩陣中的與表示非自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述公有字符映射矩陣的列。
[0225]可選的,所述映射單元507用于將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括:
[0226]用于:將所述共同的字符映射矩陣中的第32至第127列組成私有字符映射矩陣;將所述共同的字符映射矩陣中的第O至第31列以及第128至第255列組成公有字符映射矩陣。
[0227]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程可以通過計算機(jī)程序來指令相關(guān)的硬件來完成,該程序可存儲于計算機(jī)可讀取存儲介質(zhì)中;該程序在執(zhí)行時,可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory, ROM)或隨機(jī)存儲記憶體(Random Access Memory,RAM)等。
[0228]以上對本發(fā)明實(shí)施例提供的壓縮DFA矩陣的方法及相應(yīng)的裝置進(jìn)行了詳細(xì)介紹,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明實(shí)施例的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會有改變之處,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
【權(quán)利要求】
1.一種DFA矩陣的壓縮方法,其特征在于,包括: 獲取確定的有限狀態(tài)自動機(jī)DFA矩陣; 將DFA矩陣的行分為若干組; 從分在同一組的行中分別選出每一列上出現(xiàn)次數(shù)最多的元素值,獲得所述組的核,所述核為將選出的元素值按所屬列的順序排成的行;以及獲得所述分在同一組的行中的特別元素值,所述特別元素值為與所述核中對應(yīng)的元素值不同的所述分在同一組的行中的元素值,所述特別元素值所在的列與所述核中對應(yīng)的元素值所在的列相同; 建立第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述第一對應(yīng)關(guān)系為所述組與所述核的對應(yīng)關(guān)系,所述第二對應(yīng)關(guān)系為所述特別元素值與所述特別元素值所在組、所在行及所在列的對應(yīng)關(guān)系; 保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系。
2.根據(jù)權(quán)利要求1所述的DFA矩陣的壓縮方法,其特征在于,所述將DFA矩陣的行分為若干組,包括: 基于聚類算法,將DFA矩陣的行分為若干組,使得在同一組中,每一列上的相同元素的數(shù)量大于或等于預(yù)設(shè)值。
3.根據(jù)權(quán)利 要求2所述的DFA矩陣的壓縮方法,其特征在于,所述基于聚類算法,將DFA矩陣的行分為若干組,包括: 根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖; 從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值; 根據(jù)所述閾值,將所述賦權(quán)無向完全圖劃分為邊權(quán)值大于所述閾值的連通子圖; 將屬于同一個連通子圖的DFA矩陣的行分為一組。
4.根據(jù)權(quán)利要求3所述的DFA矩陣的壓縮方法,其特征在于,在根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖之后,所述方法還包括:將所述賦權(quán)無向完全圖加入圖集合;從所述圖集合中選取未劃分的賦權(quán)無向完全圖進(jìn)行劃分; 所述從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:從選取的賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值。
5.根據(jù)權(quán)利要求4所述的DFA矩陣的壓縮方法,其特征在于,在將DFA矩陣的行分為若干組之后,所述方法還包括: 計算第一存儲空間和第二存儲空間;所述第一存儲空間為保存所述若干組所需的存儲空間之和,其中每一組所需的存儲空間包括每一組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;所述第二存儲空間為保存所述DFA矩陣所需的存儲空間,其中保存所述DFA矩陣所需的存儲空間包括由DFA矩陣的所有行組成的組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間; 當(dāng)所述第一存儲空間小于所述第二存儲空間時,將所述連通子圖標(biāo)記為已劃分的圖,并加入所述圖集合; 當(dāng)所述第一存儲空間大于所述第二存儲空間時,將所述連通子圖加入所述圖集合; 所述保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括:當(dāng)所述第一存儲空間小于所述第二存儲空間時,保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系。
6.根據(jù)權(quán)利要求1至5任意一項(xiàng)所述的DFA矩陣的壓縮方法,其特征在于,所述從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:從所述賦權(quán)無向完全圖的權(quán)值中選取最小權(quán)值作為閾值。
7.根據(jù)權(quán)利要求3至6任意一項(xiàng)所述的DFA矩陣的壓縮方法,其特征在于,所述賦權(quán)無向完全圖的權(quán)值滿足如下公式:
w Cri,r」)=C I hamdist Cri,r」) 其中,w(ri,rj)表示賦權(quán)無向完全圖的權(quán)值集合,r,表示DFA矩陣中第i行的元素,r,-表示DFA矩陣中第j行的元素,i和j表示不同的行數(shù),C表示DFA矩陣中行所包括的元素的個數(shù),hamdist Cri, rj)表示海明距離函數(shù)。
8.根據(jù)權(quán)利要求1至7任意一項(xiàng)所述的DFA矩陣的壓縮方法,其特征在于,所述保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括: 將每一組的核組成核矩陣,保存所述核矩陣;將每一組的特別元素值組成特殊跳轉(zhuǎn)表,保存所述特殊跳轉(zhuǎn)表; 所述方法還包括:記錄每一組的核在核矩陣中的地址,以及記錄每一組的特別元素值在所述特殊跳轉(zhuǎn)表中的地址。
9.根據(jù)權(quán)利要求1至8任意一項(xiàng)所述的DFA矩陣的壓縮方法,其特征在于,在獲取DFA矩陣之后,所述方法還包括: 將所述DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;其中,所述DFA矩陣中相同的列對應(yīng)同一列編號; 根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的編號,建立所述DFA矩陣的字符映射表,所述字符映射表用于表示所述跳轉(zhuǎn)字符與所述列編號的對應(yīng)關(guān)系;將所述DFA矩陣中相同的列進(jìn)行合并,獲得合并后的DFA矩陣; 所述將DFA矩陣的行分為若干組,包括:將合并后的DFA矩陣的行分為若干組。
10.根據(jù)權(quán)利要求9所述的DFA矩陣的壓縮方法,其特征在于,所述獲取DFA矩陣,包括: 獲取至少兩個DFA矩陣; 所述將所述DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;包括: 將所述至少兩個DFA矩陣的列進(jìn)行編號,獲得所述至少兩個DFA矩陣的列編號;其中,所述至少兩個DFA矩陣中所有相同的列對應(yīng)同一列編號; 所述根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的列編號,建立所述DFA矩陣的字符映射表,包括: 根據(jù)所述至少兩個DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述至少兩個DFA矩陣的列對應(yīng)的列編號,建立所述至少兩個DFA矩陣的字符映射表; 在建立所述至少兩個DFA矩陣的字符映射表之后,所述方法還包括: 將所述至少兩個DFA矩陣的字符映射表合并成所述至少兩個DFA矩陣對應(yīng)的共同的字符映射矩陣,其中,所述共同的字符映射矩陣的列對應(yīng)的跳轉(zhuǎn)字符用ASCII碼表示,所述共同的字符映射矩陣的每一行對應(yīng)所述至少兩個DFA矩陣中的一個DFA矩陣; 將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,所述私有字符映射矩陣由所述共同的字符映射矩陣中的部分列組成,所述公有字符映射矩陣由所述共同的字符映射矩陣中的另一部分列組成; 將所述公有字符映射矩陣的行進(jìn)行編號,獲得所述公有字符映射矩陣的行對應(yīng)的行編號;其中,所述公有字符映射矩陣中所有相同的行對應(yīng)同一行編號; 記錄所述公有字符映射矩陣的行與所述行編號的對應(yīng)關(guān)系; 將所述公有字符映射矩陣中相同的行進(jìn)行合并,獲得壓縮的DFA公有字符映射矩陣。
11.根據(jù)權(quán)利要求10所述的DFA矩陣的壓縮方法,其特征在于,所述將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括: 將所述共同的字符映射矩陣中的與表示自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述私有字符映射矩陣的列; 將所述共同的字符映射矩陣中的與表示非自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述公有字符映射矩陣的列。
12.根據(jù)權(quán)利要求10所述的DFA矩陣的壓縮方法,其特征在于,所述將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括: 將所述共同的字符映射矩陣中的第32至第127列組成私有字符映射矩陣; 將所述共同的字符映射矩陣中的第O至第31列以及第128至第255列組成公有字符映射矩陣。
13.—種壓縮DFA矩陣的裝置,其特征在于,包括: 獲取單元,用于獲取確定的有限狀態(tài)自動機(jī)DFA矩陣; 分組單元,用于將所述獲取單元獲取到的所述DFA矩陣的行分為若干組; 核單元,用于在所述分組單元將所述DFA矩陣的行分為若干組之后,從分在同一組的行中分別選出每一列上出現(xiàn)次數(shù)最多的元素值,獲得所述組的核,所述核為將選出的元素值按所屬列的順序排成的行;以及獲得所述分在同一組的行中的特別元素值,所述特別元素值為與所述核中對應(yīng)的元素值不同的所述分在同一組的行中的元素值,所述特別元素值所在的列與所述核中對應(yīng)的元素值所在的列相同; 記錄單元,用于在所述核單元獲取所述組的核及所述特別元素值之后,建立第一對應(yīng)關(guān)系和第二對應(yīng)關(guān)系,所述第一對應(yīng)關(guān)系為所述組與所述核的對應(yīng)關(guān)系,所述第二對應(yīng)關(guān)系為所述特別元素值與所述特別元素值所在組、所在行及所在列的對應(yīng)關(guān)系; 存儲單元,用于保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系O
14.根據(jù)權(quán)利要求13所述的壓縮DFA矩陣的裝置,其特征在于,分組單元,用于將所述獲取單元獲取到的所述DFA矩陣的行分為若干組,包括: 用于基于聚類算法,將所述DFA矩陣的行分為若干組,使得在同一組中,每一列上的相同元素的數(shù)量大于或等于預(yù)設(shè)值。
15.根據(jù)權(quán)利要求14所述的壓縮DFA矩陣的裝置,其特征在于,所述分組單元用于基于聚類算法,將DFA矩陣的行分為若干組,包括: 用于:根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖;從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值;根據(jù)所述閾值,將所述賦權(quán)無向完全圖劃分為邊權(quán)值大于所述閾值的連通子圖;將屬于同一個連通子圖的DFA矩陣的行分為一組。
16.根據(jù)權(quán)利要求15所述的壓縮DFA矩陣的裝置,其特征在于,所述分組單元還用于:在根據(jù)DFA矩陣,構(gòu)造賦權(quán)無向完全圖之后,將所述賦權(quán)無向完全圖加入圖集合;從所述圖集合中選取未劃分的賦權(quán)無向完全圖進(jìn)行劃分; 所述分組單元用于從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:用于從選取的賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值。
17.根據(jù)權(quán)利要求16所述的壓縮DFA矩陣的裝置,其特征在于,所述分組單元還用于:在將DFA矩陣的行分為若干組之后,計算第一存儲空間和第二存儲空間;所述第一存儲空間為保存所述若干組所需的存儲空間之和,其中每一組所需的存儲空間包括每一組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;所述第二存儲空間為保存所述DFA矩陣所需的存儲空間,其中保存所述DFA矩陣所需的存儲空間包括由DFA矩陣的所有行組成的組的核、特別元素值、第一對應(yīng)關(guān)系以及第二對應(yīng)關(guān)系所需的存儲空間;當(dāng)所述第一存儲空間小于所述第二存儲空間時,將所述連通子圖標(biāo)記為已劃分的圖,并加入所述圖集合;當(dāng)所述第一存儲空間大于所述第二存儲空間時,將所述連通子圖加入所述圖集合; 所述存儲單元用于保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括:用于當(dāng)所述第一存儲空間小于所述第二存儲空間時,保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系。
18.根據(jù)權(quán)利要求13至17任意一項(xiàng)所述的壓縮DFA矩陣的裝置,其特征在于,所述分組單元用于從所述賦權(quán)無向完全圖的權(quán)值中選取一個權(quán)值作為閾值,包括:用于從所述賦權(quán)無向完全圖的權(quán)值中選取最小權(quán)值作為閾值。
19.根據(jù)權(quán)利要求 15至18任意一項(xiàng)所述的壓縮DFA矩陣的裝置,其特征在于,所述賦權(quán)無向完全圖的權(quán)值滿足如下公式:
w Cri,r」)=C I hamdist Cri,r」) 其中,w(ri,rj)表示賦權(quán)無向完全圖的權(quán)值集合,r,表示DFA矩陣中第i行的元素,r,-表示DFA矩陣中第j行的元素,i和j表示不同的行數(shù),C表示DFA矩陣中行所包括的元素的個數(shù),hamdist Cri, r」)表示海明距離函數(shù)。
20.根據(jù)權(quán)利要求13至19任意一項(xiàng)所述的壓縮DFA矩陣的裝置,其特征在于,所述存儲單元用于保存所述核、所述特別元素值、所述第一對應(yīng)關(guān)系以及所述第二對應(yīng)關(guān)系,包括: 用于將每一組的核組成核矩陣,保存所述核矩陣;將每一組的特別元素值組成特殊跳轉(zhuǎn)表,保存所述特殊跳轉(zhuǎn)表; 所述記錄單元還用于:記錄每一組的核在核矩陣中的地址,以及記錄每一組的特別元素值在所述特殊跳轉(zhuǎn)表中的地址。
21.根據(jù)權(quán)利要求13至20任意一項(xiàng)所述的壓縮DFA矩陣的裝置,其特征在于,所述裝置還包括: 編號單元,用于將所述獲取單元獲取到的DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;其中,所述DFA矩陣中相同的列對應(yīng)同一列編號; 映射單元,用于根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的編號,建立所述DFA矩陣的字符映射表,所述字符映射表用于表示所述跳轉(zhuǎn)字符與所述列編號的對應(yīng)關(guān)系;合并單元,用于將所述DFA矩陣中相同的列進(jìn)行合并,獲得合并后的DFA矩陣; 所述分組單元用于將DFA矩陣的行分為若干組,包括:用于將合并后的DFA矩陣的行分為若干組。
22.根據(jù)權(quán)利要求21所述的壓縮DFA矩陣的裝置,其特征在于,所述獲取單元用于獲取DFA矩陣,包括:用于獲取至少兩個DFA矩陣; 所述編號單元用于將所述DFA矩陣的列進(jìn)行編號,獲得所述DFA矩陣的列編號;包括:用于將所述至少兩個DFA矩陣的列進(jìn)行編號,獲得所述至少兩個DFA矩陣的列編號;其中,所述至少兩個DFA矩陣中所有相同的列對應(yīng)同一列編號; 所述映射單元用于根據(jù)所述DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述DFA矩陣的列對應(yīng)的列編號,建立所述DFA矩陣的字符映射表,包括: 用于根據(jù)所述至少兩個DFA矩陣的列對應(yīng)的跳轉(zhuǎn)字符和所述至少兩個DFA矩陣的列對應(yīng)的列編號,建立所述至少兩個DFA矩陣的字符映射表; 所述映射單元還用于在建立所述至少兩個DFA矩陣的字符映射表之后,將所述至少兩個DFA矩陣的字符映射表合并成所述至少兩個DFA矩陣對應(yīng)的共同的字符映射矩陣,其中,所述共同的字符映射矩陣的列對應(yīng)的跳轉(zhuǎn)字符用ASCII碼表示,所述共同的字符映射矩陣的每一行對應(yīng)所述至 少兩個DFA矩陣中的一個DFA矩陣; 所述映射單元還用于將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,所述私有字符映射矩陣由所述共同的字符映射矩陣中的部分列組成,所述公有字符映射矩陣由所述共同的字符映射矩陣中的另一部分列組成; 所述編號單元還用于將所述公有字符映射矩陣的行進(jìn)行編號,獲得所述公有字符映射矩陣的行對應(yīng)的行編號;其中,所述公有字符映射矩陣中所有相同的行對應(yīng)同一行編號; 所述記錄單元還用于記錄所述公有字符映射矩陣的行與所述行編號的對應(yīng)關(guān)系;合并單元還用于將所述公有字符映射矩陣中相同的行進(jìn)行合并,獲得壓縮的DFA公有字符映射矩陣。
23.根據(jù)權(quán)利要求22所述的壓縮DFA矩陣的裝置,其特征在于,所述映射單元用于將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括: 用于:將所述共同的字符映射矩陣中的與表示自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述私有字符映射矩陣的列;將所述共同的字符映射矩陣中的與表示非自然語言符號的跳轉(zhuǎn)字符對應(yīng)的列作為所述公有字符映射矩陣的列。
24.根據(jù)權(quán)利要求22所述的壓縮DFA矩陣的裝置,其特征在于,所述映射單元用于將所述共同的字符映射矩陣中的列組成私有字符映射矩陣和公有字符映射矩陣,包括: 用于:將所述共同的字符映射矩陣中的第32至第127列組成私有字符映射矩陣;將所述共同的字符映射矩陣中的第O至第31列以及第128至第255列組成公有字符映射矩陣。
【文檔編號】H03M7/30GK103957012SQ201410158262
【公開日】2014年7月30日 申請日期:2014年4月18日 優(yōu)先權(quán)日:2014年4月18日
【發(fā)明者】王宇平, 王雨濛 申請人:華為技術(shù)有限公司