文/劉慧娟
任何一個企業(yè)的組成或者結(jié)構(gòu)都可以看成一個大的數(shù)據(jù)圖,那么這個問題就可以定義為:給定有向無環(huán)圖G,關(guān)鍵字的集合覆蓋問題主要回答找到k關(guān)鍵字,使k個關(guān)鍵字能夠覆蓋給定的屬性集合,并且這k個關(guān)鍵字的影響力最大,這是多種數(shù)據(jù)管理應(yīng)用中的核心操作之一,如XML和RDF數(shù)據(jù)庫以及社交網(wǎng)絡(luò)和生物信息網(wǎng)絡(luò)等,是研究者廣泛關(guān)注的熱點問題。如日常生活中普遍存在的工程設(shè)計問題,在電網(wǎng)企業(yè)中人員調(diào)動、通信網(wǎng)絡(luò)安全、資源分配、電路設(shè)計、信息通信管理、運輸車輛路徑安排等領(lǐng)域有廣泛的應(yīng)用,多年來吸引了眾多計算機科學(xué)家、運籌學(xué)研究人員的研究興趣。對這一問題,相繼有很多學(xué)者利用不同的思想提出了很多不同的算法?,F(xiàn)有求解關(guān)鍵字覆蓋集合的方法主要分為四類,基于分數(shù)的貪心算法、基于鴿子洞的貪心算法、基于劃分的算法、基于劃分的優(yōu)質(zhì)算法。
本文用G=(V,E)表示有向無環(huán)圖,其中V表示G中的頂點集合,E表示G中有向邊的集合,|V|表示G中頂點的個數(shù),|E|表示G中邊的個數(shù)。若(u,v)∈E,則說明G中有一條從u到v的邊,反之不存在。w(u,v)是從節(jié)點u到節(jié)點v概率,取值范圍是(0,1]。
在社交網(wǎng)絡(luò)G中,節(jié)點v的屬性集合用A(v)表示,如果屬性ai∈A(v),那么節(jié)點v覆蓋屬性ai,否則就認為節(jié)點v沒有覆蓋屬性ai。節(jié)點集合覆蓋屬性集合A={a1, a2,…, am}當且僅當任意的屬性ai∈A,至少有一個節(jié)點v(v∈V′)覆蓋屬性ai。用V(A)表示節(jié)點集合,在集合中的每一個節(jié)點都能覆蓋屬性集A。集合屬性的劃分是基于覆蓋組的概念進行劃分的,設(shè)一個屬性集合Q和Q的一種局部劃分P={A1, A2, …, Am}令ri=|Ai|(i∈[1,m])是屬性Ai集合中元素的個數(shù)。集合R={r1, r2, …, rm}是P的覆蓋組。
本節(jié)首先介紹索引結(jié)構(gòu),在每次查詢覆蓋特定屬性m的節(jié)點時,直接查找屬性m的倒排表即可,減少了時間代價來減少需要訪問的頂點數(shù)量,簡稱PICS-IN,然后介紹基于閾值的高效的剪枝策略,并將其應(yīng)用于PICS-IN算法來提升系統(tǒng)性能。
本文方法所使用的集合劃分策略是根據(jù)覆蓋組的方法進行劃分組合,覆蓋組,當判斷節(jié)點u的屬性是否能覆蓋屬性某一屬性m時,PICS-IN的基本思想是:首先根據(jù)圖1中節(jié)點集合中包含的所有不重復(fù)的屬性集合,建立屬性集合的倒排索引,選擇符合條件的節(jié)點集合。
給定一個屬性集合Q,一個正整數(shù)k,一個社交網(wǎng)絡(luò)G=(V, E, w, A)。圖中的每個節(jié)點都有屬性標簽,每個節(jié)點的屬性標簽的個數(shù)不同,其中也有的節(jié)點的屬性個數(shù)為0,圖1中,節(jié)點1到節(jié)點23之間每個節(jié)點的屬性標簽個數(shù)不一定相同,同一個屬性a可能會出現(xiàn)在多個節(jié)點中,例如節(jié)點1的屬性標簽集合是{a, b, c, d},節(jié)點2的屬性集合是{a, b, c, e},重復(fù)的屬性是{a, b, c}三個。建立的索引結(jié)構(gòu)是關(guān)于節(jié)點的不重復(fù)的屬性集合A(V)和節(jié)點的索引,屬于離線索引。建立離線索引需要三步,首先遍歷節(jié)點集合V,然后對于每個節(jié)點v,遍歷節(jié)點v的屬性集合中任意的屬性a,最后把節(jié)點v放到屬性a的倒排表中,當遍歷完節(jié)點集合中的節(jié)點,以及節(jié)點集合中每個節(jié)點的屬性集合,那么就建立了屬性的倒排表。圖1中,節(jié)點集合為V={1, 2, 3, 4, …,23},節(jié)點集合V中所有節(jié)點的不重復(fù)的屬性是{a, b, c, d, e, f},把包含屬性集合中任一屬性的節(jié)點存放到屬性的倒排表中,遍歷節(jié)點集合V,訪問1號節(jié)點時,1號節(jié)點的屬性集合是{a, b, c, d},那么就把1號節(jié)點分別添加到屬性a,b,c,d的倒排表中,建立的索引結(jié)構(gòu)如圖2所示,那么建立的倒排索引中,屬性a的倒排表中是包含屬性a的節(jié)點,其他屬性也一樣。由圖1得到的屬性索引結(jié)構(gòu)如上的表1所示。
定理1(新生成組合的判斷條件)給定一個鏈表集合L1,L2,…,Lm,一個組合集合C,鏈表Li在第d層元組用表示,如果新生成的組合至少滿足以下條件之一,則直接把這個組合進行刪除,不再和集合C中其他的組合結(jié)合在一起產(chǎn)生新的組合,條件如下:
首先在已經(jīng)構(gòu)建的倒排索引中,找到前k個能夠覆蓋給定的屬性集合Q中的屬性,并且有最大影響力的節(jié)點;其次,對于屬性集合Q每一個覆蓋組R,從已經(jīng)選擇的節(jié)點集合中取前k-|R|個節(jié)點作為自由集的解,并在已經(jīng)劃分的覆蓋組中除去已經(jīng)被自由集中的節(jié)點覆蓋的屬性;最后,根據(jù)PICS+算法中構(gòu)建在線索引鏈表的方法,構(gòu)建索引鏈表,即把覆蓋相同屬性個數(shù)的節(jié)點放在同一鏈表中,并把節(jié)點組合成元組的形式,如圖2所示,構(gòu)建的在線的索引鏈表如表2所示。然后把鏈表中不同列的元組進行組合,利用取上界的Upperbound算法求出能夠覆蓋這些屬性并且影響力最大的節(jié)點,最后得到的這些節(jié)點就是受約束集Sp,最后返回的k個節(jié)點就是由自由集中的節(jié)點和受約束集中節(jié)點組成的并集。
通過實驗對比現(xiàn)有的幾種算法和本文提出的PICS-IN算法的索引大小、創(chuàng)建索引的時間、查詢節(jié)點的時間以及實驗中需要訪問的頂點數(shù)量,通過幾種性能的對比,驗證了本文提出算法的結(jié)果的準確性和時間的高效性。最后對PICS-IN算法在取不同k值時,不同|Q|值時的查詢處理性能進行了實驗對比,進一步驗證了本文提出的PICS-IN算法的擴展性。
表1:屬性的索引結(jié)構(gòu)
表2:覆蓋組的鏈表
集合覆蓋方法對企業(yè)物資的調(diào)度、電路的設(shè)計等起到了良好的推動作用,并通過數(shù)據(jù)分析,可以得出最優(yōu)的、最合理的解,也就是實際問題的解決辦法,集合覆蓋技術(shù)的研究將將大大的減少人工核算的人員和資源的浪費,為電網(wǎng)的發(fā)展提供更加合理化、數(shù)據(jù)化的理論支撐,更加準確、有效的推進企業(yè)規(guī)劃中的資源配置和部署。
圖1:有向無環(huán)圖G及頂點屬性標簽圖
圖2:有向圖G及節(jié)點的屬性標簽圖