• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    有向無(wú)環(huán)圖上k步可達(dá)查詢優(yōu)化算法

    2020-04-09 14:48:56楊安平周軍鋒陳子陽(yáng)
    計(jì)算機(jī)應(yīng)用 2020年2期
    關(guān)鍵詞:方法

    杜 明,楊安平,周軍鋒*,陳子陽(yáng),楊 云

    (1.東華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,上海201620;2.上海立信會(huì)計(jì)金融學(xué)院信息管理學(xué)院,上海201620)

    0 引言

    給定有向無(wú)環(huán)圖(Directed Acyclic Graph,DAG)G,可達(dá)性查詢u?→v用于回答從頂點(diǎn)u出發(fā)是否存在一條路徑可以到達(dá)頂點(diǎn)v。實(shí)際應(yīng)用中,如社交網(wǎng)絡(luò)、通信與傳感器網(wǎng)絡(luò)、生物網(wǎng)絡(luò)、可擴(kuò)展標(biāo)記語(yǔ)言(eXtensible Markup Language,XML)數(shù)據(jù)、資源描述框架(Resource Description Framework,RDF)數(shù)據(jù)等,可達(dá)性查詢可用于檢測(cè)兩點(diǎn)間是否存在特定關(guān)系??蛇_(dá)性查詢處理是圖數(shù)據(jù)管理與分析的基本操作之一,是研究者廣泛關(guān)注的熱點(diǎn)問(wèn)題[1-2]。然而,實(shí)際中除了檢測(cè)兩點(diǎn)間是否存在特定關(guān)系,還需要考慮關(guān)系的強(qiáng)弱程度,如存在信號(hào)衰減的傳感器網(wǎng)絡(luò),用戶更感興趣的是長(zhǎng)度受限的可達(dá)性查詢。傳統(tǒng)的可達(dá)性查詢只能回答兩個(gè)頂點(diǎn)間是否可達(dá),并不能確定在幾步內(nèi)可達(dá)。本文研究k 步可達(dá)查詢的高效處理問(wèn)題。與基本的可達(dá)性查詢相比,k步可達(dá)查詢用于回答從u出發(fā),是否存在長(zhǎng)度在k 步之內(nèi)的路徑到v。傳統(tǒng)的可達(dá)查詢可以看作k=∞時(shí)的k 步可達(dá)查詢[3]。由于k 步可達(dá)性查詢體現(xiàn)著圖中頂點(diǎn)對(duì)其他頂點(diǎn)的影響力,因而相對(duì)可達(dá)性查詢而言,能提供更多的信息。

    現(xiàn)有解決k 步可達(dá)性查詢的方法主要分為兩類(lèi):Label-Only[4]和Label+G[5-7]。Label-Only類(lèi)方法的主要思想是通過(guò)構(gòu)建所有可達(dá)頂點(diǎn)間最短路徑的索引,當(dāng)判斷從頂點(diǎn)u能否在k步內(nèi)到達(dá)頂點(diǎn)v 時(shí),只需通過(guò)標(biāo)簽得到u 和v 之間的最短路徑長(zhǎng)度,然后比較從u 到v 的最短路徑長(zhǎng)度與k 的大小關(guān)系。當(dāng)最短距離大于k 時(shí),說(shuō)明該查詢不滿足k 步可達(dá)性,否則說(shuō)明該查詢滿足k 步可達(dá)性。Label+G 類(lèi)方法的主要思想是快速構(gòu)建部分可達(dá)信息的索引,處理查詢時(shí),若索引可回答查詢,則直接返回結(jié)果;否則需要通過(guò)圖遍歷來(lái)得到最終結(jié)果。相比較而言,Label-Only類(lèi)方法的索引規(guī)模大、索引構(gòu)建時(shí)間長(zhǎng),且當(dāng)查詢不可達(dá)時(shí),處理效率低。而現(xiàn)有的Label+G 類(lèi)方法由于索引記錄的可達(dá)信息少,查詢處理時(shí)需要遍歷的頂點(diǎn)較多,當(dāng)滿足條件的查詢數(shù)量增多時(shí),算法性能顯著下降。

    針對(duì)以上問(wèn)題,本文提出一種求解k 步可達(dá)查詢的高效Label+G算法kRH。其基本思想是通過(guò)快速構(gòu)建索引規(guī)模小、可達(dá)信息覆蓋廣的索引,從而可以在常量時(shí)間回答更多的查詢,同時(shí)降低圖遍歷的代價(jià)。具體來(lái)說(shuō),本文的工作如下:

    1)提出一種基于部分點(diǎn)的雙向最短路徑索引,用于在常量時(shí)間回答大部分k 步可達(dá)查詢,并提出三種啟發(fā)式規(guī)則來(lái)減小索引規(guī)模。

    2)提出基于簡(jiǎn)化圖的正反互逆拓?fù)鋪?lái)提高不可達(dá)查詢的處理效率。

    3)提出遠(yuǎn)距離優(yōu)先的雙向搜索策略,并在此基礎(chǔ)上提出高效的查詢處理策略。

    4)基于多個(gè)真實(shí)的數(shù)據(jù)集進(jìn)行測(cè)試,實(shí)驗(yàn)結(jié)果顯示,本文提出的方法比現(xiàn)有方法更高效。

    1 背景知識(shí)及相關(guān)工作

    1.1 數(shù)據(jù)模型及相關(guān)概念

    本文處理有向無(wú)環(huán)圖(DAG)上的k 步可達(dá)查詢。給定DAG,V 表示頂點(diǎn)的集合,E 表示邊的集合。后續(xù)討論中,用(u,v)∈E 表示從u 到v 的邊,δ(u,v)表示u 與v 的最短路徑,Out(u)表示u 指向的頂點(diǎn)集,In(u)表示指向u 的頂點(diǎn)集。Out*(u)表示u 可達(dá)的頂點(diǎn)集,In*(u)表示可達(dá)u 的頂點(diǎn)集。給定G 中任意兩個(gè)頂點(diǎn)u 和v,若從u 到v 存在一條有向路徑,則說(shuō)明u 可達(dá)v,否則說(shuō)明u 不可達(dá)v。若從u 到v 存在一條長(zhǎng)度不大于k 的路徑,說(shuō)明從u 出發(fā)k 步可達(dá)v,用u →kv 表示;否則u不能在k步可達(dá)v,用u?kv表示。

    對(duì)于一個(gè)DAG 來(lái)說(shuō),它體現(xiàn)頂點(diǎn)之間的偏序關(guān)系,通過(guò)拓?fù)渑判颍瑢㈨旤c(diǎn)的偏序關(guān)系轉(zhuǎn)變?yōu)槿蜿P(guān)系,拓?fù)涮?hào)即為全序關(guān)系的序號(hào)。頂點(diǎn)u、v 的拓?fù)涮?hào)分別為Xu和Xv,若存在Xu>Xv,u不可達(dá)v。

    1.2 相關(guān)工作

    1.2.1 可達(dá)查詢

    針對(duì)圖論中的可達(dá)性查詢,按照索引覆蓋范圍的大小,分為兩大類(lèi):1)構(gòu)建全索引的方式;2)構(gòu)建部分索引的方式。全索引方式的主要思想是通過(guò)記錄任意兩個(gè)頂點(diǎn)之間的可達(dá)信息來(lái)處理可達(dá)查詢?;谠撍枷?,文獻(xiàn)[8]采用傳遞閉包的方式記錄任意兩個(gè)頂點(diǎn)間的可達(dá)信息,該算法雖然能夠在O(1)的時(shí)間復(fù)雜度內(nèi)處理查詢,缺點(diǎn)是空間復(fù)雜度是,實(shí)際中擴(kuò)展性太差,無(wú)法應(yīng)用于大圖。文獻(xiàn)[9]采用壓縮傳遞閉包的方式,通過(guò)向上向下遍歷給圖中每個(gè)頂點(diǎn)v 附加兩個(gè)區(qū)間LIN(v)和LOUT(v)。當(dāng)需要判斷u 與v是否可達(dá)時(shí),僅需要判斷u 和v 之間是否存在交集,若交集不為空,則說(shuō)明u 可達(dá)v;否則,u 不可達(dá)v。部分索引方式的主要思想是通過(guò)記錄部分頂點(diǎn)之間的可達(dá)信息配合遍歷的方式來(lái)處理可達(dá)查詢?;谠撍枷耄珿RIPP算法[10]給所有頂點(diǎn)附加一個(gè)區(qū)間,并通過(guò)區(qū)間包含來(lái)判斷頂點(diǎn)間是否可達(dá),若區(qū)間不包含,則需要通過(guò)遍歷的方法才能判定。Grial 算法[11]在GRIPP 算法的基礎(chǔ)上,采用不同的遍歷方式給圖中所有頂點(diǎn)附加多個(gè)區(qū)間,同樣是采用區(qū)間包含判定是否可達(dá),對(duì)于不能判斷的查詢,需要采用遍歷的方式才能夠判斷。FELINE 算法[12]通過(guò)給圖中每個(gè)頂點(diǎn)附加兩個(gè)整數(shù),代表頂點(diǎn)在圖中拓?fù)渑判虻男蛱?hào),若頂點(diǎn)u 的拓?fù)湫蛱?hào)大于v的拓?fù)湫蛱?hào),則可以判定u不可達(dá)v。

    1.2.2 Label-Only方法

    Label-Only 方法的思想是通過(guò)記錄所有頂點(diǎn)對(duì)之間的最短路徑長(zhǎng)度來(lái)回答k 步可達(dá)查詢。基于該思想,一種簡(jiǎn)單的方法是直接記錄所有頂點(diǎn)對(duì)之間的最短路徑長(zhǎng)度,該方法雖然可以O(shè)(1)時(shí)間回答k步可達(dá)查詢,但空間復(fù)雜度為在實(shí)際應(yīng)用中可擴(kuò)展性太差,無(wú)法處理大圖。針對(duì)該問(wèn)題,文獻(xiàn)[9]提出一種壓縮的最短路徑索引PLL(Pruned Landmark Labeling)。其基本思想是為圖中的每一個(gè)頂點(diǎn)v 建立LIN(v)和LOUT(v)兩個(gè)標(biāo)簽,其中LIN(v)標(biāo)簽用來(lái)記錄頂點(diǎn)v與In*(v)中部分頂點(diǎn)間的最短路徑,LOUT(v)用來(lái)記錄v 與Out*(v)中部分頂點(diǎn)間的最短路徑。則u 和v 之間的最短路徑δ(u,v)的計(jì)算問(wèn)題就轉(zhuǎn)換為求解中間節(jié)點(diǎn)和u、v 最短路徑之和的最小值問(wèn)題。當(dāng)需要回答從u 到v 是否k 步可達(dá)時(shí),只需判斷LIN(v)和LOUT(v)是否存在交集。若不存在交集,則說(shuō)明兩個(gè)頂點(diǎn)不滿足k 步可達(dá);若存在交集,說(shuō)明u 通過(guò)交集中的任意一個(gè)頂點(diǎn)都可到達(dá)v。基于交集結(jié)果,可得到所有交集頂點(diǎn)與u 和v之間的最短路徑之和,則u和v之間的最短路徑δ(u,v)就等于最短路徑之和中的最小值。如果δ(u,v)≤k,說(shuō)明u →kv;否則,說(shuō)明u?kv。

    該方法的問(wèn)題在于兩方面:1)索引規(guī)模大、索引時(shí)間長(zhǎng),原因在于需要記錄完整的最短路徑信息;2)對(duì)不可達(dá)查詢的處理效率較低,原因是LOUT(u)與LIN(v)的交集為空意味著需要訪問(wèn)LOUT(u)與LIN(v)中的所有信息。

    1.2.3 Label+G方法

    由于通過(guò)直接遍歷回答查詢的效率太低,而Label-Only方法的索引時(shí)間長(zhǎng)、索引規(guī)模大,研究者試圖通過(guò)僅記錄部分k 步可達(dá)信息來(lái)在效率方面進(jìn)行平衡。其基本思想是在線性或者近似線性時(shí)間復(fù)雜度內(nèi)記錄部分k 步可達(dá)信息,用于減小遍歷操作的搜索空間,根據(jù)其剪枝能力的不同,分為三種類(lèi)型的方法。

    第一類(lèi)方法是直接使用傳統(tǒng)的可達(dá)查詢處理方法[10-11]來(lái)回答不可達(dá)查詢,對(duì)于可達(dá)查詢,通過(guò)直接遍歷的方法檢測(cè)是否滿足k 步的條件。該類(lèi)方法雖然索引時(shí)間少,索引規(guī)模小,但當(dāng)滿足條件的查詢數(shù)量增多時(shí),效率異常低下。

    第二類(lèi)方法是構(gòu)建可回答部分k 步可達(dá)查詢的索引來(lái)加快查詢處理的速度。文獻(xiàn)[5-7]基于頂點(diǎn)覆蓋技術(shù)構(gòu)建k 步索引。其基本思想是首先求得原圖的一個(gè)頂點(diǎn)覆蓋集合,然后在頂點(diǎn)覆蓋集上構(gòu)建傳遞閉包作為索引,最后根據(jù)該索引來(lái)處理k 步可達(dá)查詢。這種方法的問(wèn)題是索引只能回答固定k值的可達(dá)查詢,擴(kuò)展性較差。

    第三類(lèi)方法[3]采用FELINE 算法[12]作為特定的剪枝條件,來(lái)快速回答不可達(dá)查詢,對(duì)于其他查詢,則提出基于廣度優(yōu)先生成樹(shù)以及廣度層作為剪枝條件來(lái)提高k 步可達(dá)查詢的處理效率。該方法為生成樹(shù)的每個(gè)頂點(diǎn)附加一個(gè)區(qū)間,用于判斷頂點(diǎn)之間的祖先后代關(guān)系。若L(v)?L(u),說(shuō)明v 是u 的后代,則查詢可通過(guò)比較u 和v 之間的層數(shù)差來(lái)判斷;若L(v)?L(u),說(shuō)明v不是u的后代,則需要遞歸判斷u的后代中是否存在頂點(diǎn)p,滿足L(v)?L(p)。該算法的缺點(diǎn)是生成樹(shù)的區(qū)間覆蓋率很低,因此,當(dāng)滿足條件的查詢數(shù)量增多時(shí),查詢效率較低。

    相比較而言,Label-Only方法雖然查詢處理時(shí)無(wú)需遍歷操作,但索引規(guī)模大、索引構(gòu)建時(shí)間長(zhǎng),同時(shí)對(duì)不可達(dá)查詢的處理效率較低;而Label+G 方法雖然索引構(gòu)建時(shí)間短、索引規(guī)模小,但查詢處理時(shí)因需要遍歷操作而顯得效率較低,尤其是當(dāng)滿足條件的查詢?cè)龆鄷r(shí),效率顯著下降。本文針對(duì)該問(wèn)題,提出一種增強(qiáng)的Label+G 方法,在降低索引規(guī)模的前提下,通過(guò)增強(qiáng)不可達(dá)查詢和可達(dá)查詢的剪枝效果來(lái)縮減遍歷操作的搜索空間,提升k步可達(dá)查詢的處理效率。

    2 基于部分點(diǎn)的雙向最短路徑索引

    2.1 雙向最短距離索引的基本思想

    本文提出基于部分出度與入度之和較大的頂點(diǎn)(簡(jiǎn)稱(chēng)hop點(diǎn))建立雙向最短路徑索引來(lái)加速k 步可達(dá)的判斷,這里雙向的意思是不僅記錄a與其可達(dá)點(diǎn)的最短距離,而且記錄a與可達(dá)a 的點(diǎn)的最短距離。具體來(lái)說(shuō),類(lèi)似于2hop 索引[4],本文為每個(gè)點(diǎn)v 設(shè)定兩個(gè)標(biāo)簽LIN(v)和LOUT(v)。和2hop 索引的不同在于,兩個(gè)標(biāo)簽中不僅僅記錄了可達(dá)信息,而且記錄了最短路徑信息。其中前者LIN(v)用于存儲(chǔ)可達(dá)v 及其與v 的最短路徑,后者LOUT(v)存儲(chǔ)v可達(dá)的點(diǎn)及其與v的最短距離。

    圖1 有向無(wú)環(huán)圖G的示例Fig.1 Example of DAG G

    例如,對(duì)圖1 的G,假設(shè)頂點(diǎn)的處理順序是c →a →b →d →e →f →g。當(dāng) 處 理c 時(shí),其 可 達(dá) 點(diǎn) 為c,e,f,g,可達(dá)c 的點(diǎn)為a,b。因此將元組加入到LIN(u()其中u ∈{c,e,f,g})中,這里dis 表示c 到u 的最短路徑長(zhǎng)度。類(lèi)似地,將加入LOUT(v)中(其中v ∈{a,b}),這里dis表示v和c 的最短路徑長(zhǎng)度。表1 是基于圖1 所有頂點(diǎn)構(gòu)建的最短路徑索引。

    表1 基于所有頂點(diǎn)的最短路徑索引Tab.1 Shortest path index based on all points

    基于表1的索引,則給定任意兩點(diǎn)a和b,判斷a是否可在k 步到達(dá)b,則只需比較LOUT(a)和LIN(b):如果二者的交集為空,說(shuō)明a 不可達(dá)b;否則說(shuō)明a 可達(dá)b。如果a 可達(dá)b,將a 通過(guò)交集中每個(gè)點(diǎn)到達(dá)b 的路徑長(zhǎng)度計(jì)算出來(lái),取其最小值即為a 和b 的最短路徑長(zhǎng)度。如果該長(zhǎng)度小于給定的k 值,則說(shuō)明a可以在k步可達(dá)b,否則a不能在k步到達(dá)b。

    2.2 雙向最短距離索引的優(yōu)化

    雖然該索引可回答所有查詢,且無(wú)需在圖上執(zhí)行遍歷操作,但其索引規(guī)模太大,且求解交集的代價(jià)太高。為此,提出僅構(gòu)建部分點(diǎn)的雙向路徑索引來(lái)減小索引規(guī)模。原因在于:1)實(shí)際中的圖存在少量度很大的點(diǎn),相應(yīng)地,其可達(dá)頂點(diǎn)也通常比較多,選擇這樣的點(diǎn)構(gòu)建雙向最短路徑可以顯著增加所維護(hù)的可達(dá)點(diǎn)對(duì)數(shù)量及通過(guò)這種點(diǎn)的最短路徑長(zhǎng)度。2)我們的實(shí)驗(yàn)表明,對(duì)一般圖來(lái)說(shuō),要么32 個(gè)點(diǎn)已經(jīng)維護(hù)了足夠多的可達(dá)信息,再增加頂點(diǎn)后,可達(dá)信息并沒(méi)有明顯增加;要么32 個(gè)點(diǎn)僅維護(hù)少量可達(dá)信息,再增加這種點(diǎn)同樣不會(huì)顯著增加可達(dá)信息維護(hù)量。如圖2 所示,從實(shí)際數(shù)據(jù)上的測(cè)試結(jié)果可以看出:對(duì)于amaze 數(shù)據(jù)集,即使k=1,雙向索引的可達(dá)覆蓋率也可接近100%;而對(duì)cit-Patents 而言,即使k 值增加到32,可達(dá)覆蓋率依然非常??;另外兩個(gè)數(shù)據(jù)集上,當(dāng)k 值增加到16以后,數(shù)據(jù)基本不再發(fā)生變化。

    圖2 k個(gè)hop 點(diǎn)可達(dá)覆蓋率Fig.2 Coverage of reachability for k hop nodes

    基于以上觀察,取32 個(gè)點(diǎn)構(gòu)建雙向最短路徑索引。假設(shè)對(duì)于圖1 所示的DAG G,本文取c 和f 兩個(gè)點(diǎn)構(gòu)建雙向最短路徑索引,如表2 所示。顯然,和表1 的索引相比,表2 的規(guī)模降低了。實(shí)際上,表2還可以進(jìn)一步優(yōu)化。

    表2 基于c和f的最短路徑索引Tab.2 Shortest path index based on c and f

    定理1當(dāng)基于頂點(diǎn)v 構(gòu)建雙向最短路徑索引時(shí),如果向上(向下)遍歷的過(guò)程中遇到了已處理的hop 點(diǎn)u,則無(wú)需從u繼續(xù)向上(向下)遍歷。

    證明 如圖3 所示,假設(shè)x 可達(dá)u,當(dāng)前處理的是hop 點(diǎn)v,hop點(diǎn)u在v之前處理。當(dāng)從v向上遍歷時(shí)遇到了u?;趗得到的標(biāo)簽,假設(shè)求得x 到u 的距離是d1,u 到v的距離是d2,則x通過(guò)u 到v 的距離是d1+d2。顯然,從v 向上遍歷遇到u,所求u 與v 之間的距離仍然是d2,因此即使在u 不停止,所得x 和v的距離仍然是d1+d2,因此,無(wú)需從u繼續(xù)向上遍歷。

    圖3 hop點(diǎn)作用示意圖Fig.3 Schematic diagram of hop nodes intension

    定理2當(dāng)基于頂點(diǎn)v 構(gòu)建雙向最短路徑索引時(shí),如果向上(向下)遍歷的過(guò)程中通過(guò)非hop點(diǎn)遇到了w,且w通過(guò)u到v的距離小于w 通過(guò)非hop 點(diǎn)到v 的距離,則無(wú)需從w 繼續(xù)向上(向下)遍歷。

    證明 如圖3 所示,假設(shè)hop 點(diǎn)u 先處理,目前處理的是hop 點(diǎn)v。假設(shè)從v 向上遍歷,通過(guò)非hop 點(diǎn)到達(dá)w,路徑長(zhǎng)度是d4。如果w 和u的最短距離是d3,且d3+d2≤d4,顯然無(wú)需在LOUT(w)中記錄其和v 的距離d4,因?yàn)閐4不是最短距離。因此,無(wú)需從w開(kāi)始繼續(xù)向上遍歷。

    基于定理1和定理2,在求解雙向最短路徑索引的過(guò)程中可有效減小索引規(guī)模,提高索引構(gòu)建的速度。例如,對(duì)圖1 的G 而言,假設(shè)選擇兩個(gè)hop 點(diǎn)c 和f 來(lái)構(gòu)建雙向最短路徑索引。先處理的是點(diǎn)c,當(dāng)處理第二個(gè)點(diǎn)f時(shí),當(dāng)從其向上遍歷遇到第一個(gè)hop 點(diǎn)c時(shí),可根據(jù)定理1 立即停止遍歷,當(dāng)從非hop 點(diǎn)遍歷到b 時(shí),可根據(jù)定理2 立即停止遍歷。當(dāng)處理完這兩個(gè)點(diǎn)后,所得到的雙向路徑索引如表3所示。

    表3 基于c和f的優(yōu)化后的最短路徑索引Tab.3 Optimized shortest path index based on c and f

    3 基于棧的正反互逆拓?fù)?/h2>

    可達(dá)是k步可達(dá)的必要條件,因此,若查詢不可達(dá),則必定k步不可達(dá)?;诖?,本文使用拓?fù)湫蛱?hào)為基礎(chǔ)的方法來(lái)快速判斷不可達(dá)。其基本思想是:給定兩個(gè)頂點(diǎn)u和v,若u的拓?fù)涮?hào)大于v的拓?fù)涮?hào),則u不可達(dá)v,因此u在k步內(nèi)不可達(dá)v。

    文獻(xiàn)[3]通過(guò)使用互逆的兩個(gè)拓?fù)涮?hào)來(lái)增強(qiáng)不可達(dá)查詢的判斷能力。具體而言,給定第一個(gè)拓?fù)漤樞颍跇?gòu)建逆序拓?fù)鋾r(shí),始終優(yōu)先訪問(wèn)第一個(gè)拓?fù)涮?hào)最大且所有入鄰居均被訪問(wèn)的頂點(diǎn)。以此建立的拓?fù)浞Q(chēng)為第一遍拓?fù)涞哪嫦蛲負(fù)?。雖然實(shí)際中互逆拓?fù)淇煽焖倥袛嗪芏嗖豢蛇_(dá)查詢,但仍然存在兩方面的問(wèn)題。

    首先,在實(shí)際應(yīng)用中,基于正向建立的兩個(gè)互逆拓?fù)涮?hào)仍然存在很多不可達(dá)查詢無(wú)法判斷的問(wèn)題。針對(duì)該問(wèn)題,本文提出構(gòu)建正反互逆拓?fù)鋪?lái)過(guò)濾更多的不可達(dá)查詢。其基本思想是:首先,刪除已處理的hop 點(diǎn)。原因是與hop 點(diǎn)關(guān)聯(lián)的最短路徑均已處理完畢,后續(xù)的最短路徑計(jì)算與其無(wú)關(guān)。刪除hop點(diǎn)之后,數(shù)據(jù)圖得以很大程度上的簡(jiǎn)化。其次,自頂向下、以深度優(yōu)先的方式構(gòu)建正向互逆拓?fù)?。最后,沿著邊的相反方向,以自底向上,以深度?yōu)先的方式構(gòu)建反向互逆拓?fù)洹?/p>

    其次,文獻(xiàn)[12]基于堆求解逆序拓?fù)洌鋾r(shí)間復(fù)雜度為O(|V|log|V|)。本文設(shè)計(jì)了高效算法在線性時(shí)間構(gòu)建正反互逆拓?fù)洹Ec以上工作相比,由于首先刪除了hop 點(diǎn),因而所建立的正反互逆拓?fù)淇梢赃^(guò)濾更多的不可達(dá)查詢。和文獻(xiàn)[12]相比,本文提出的正反互逆拓?fù)渌饕哂芯€性的時(shí)間復(fù)雜度,同時(shí)能過(guò)濾更多的不可達(dá)查詢。和文獻(xiàn)[3]的方法相比,由于我們?cè)谇蠼庹椿ツ嫱負(fù)渲叭コ薶op 點(diǎn),數(shù)據(jù)圖得以很大程度的簡(jiǎn)化,因而效率更高。

    4 索引構(gòu)建

    4.1 基于hop點(diǎn)的最短距離索引構(gòu)建

    4.1.1 算法描述

    給定DAG G,求解hop 點(diǎn)的最短路徑索引總體上分為3步。首先求解hop 點(diǎn),然后基于hop 點(diǎn)執(zhí)行廣度優(yōu)先遍歷(Breadth First Search,BFS)建立LIN索引,最后基于hop 點(diǎn)執(zhí)行反向BFS建立LOUT索引。下面分別予以說(shuō)明。

    (1)根據(jù)(In(v)+1)*(Out(v)+1)從大到小的順序選擇前32個(gè)頂點(diǎn)作為hop點(diǎn)。如算法1第1)行。

    (2)從hop 點(diǎn)v 開(kāi)始執(zhí)行BFS,對(duì)于遍歷到的頂點(diǎn)u,若是通過(guò)標(biāo)簽計(jì)算得到了長(zhǎng)度大于從v 到u 的路徑長(zhǎng)度,則更新LIN(u)并繼續(xù)訪問(wèn)u可達(dá)的點(diǎn);若是通過(guò)標(biāo)簽計(jì)算得到的長(zhǎng)度小于從v 點(diǎn)到u 的路徑長(zhǎng)度,則不更新LIN(u)且不再?gòu)膗 出發(fā)繼續(xù)BFS。如算法1第2)~12)行所示。

    (3)從hop點(diǎn)開(kāi)始執(zhí)行反向BFS,對(duì)于遍歷到的頂點(diǎn)u,若是通過(guò)標(biāo)簽得到的長(zhǎng)度大于從hop點(diǎn)到u的路徑長(zhǎng)度,則更新LOUT(u)并且訪問(wèn)u的父親;若通過(guò)標(biāo)簽得到的長(zhǎng)度小于從hop點(diǎn)到u 的路徑長(zhǎng)度,則不更新LOUT(u)且不訪問(wèn)u 的父親。如算法1第13)行所示。

    算法1 hop(G=(V,E))。

    算法1 用于求解基于hop 頂點(diǎn)的最短路徑,其中QU(v,u,LOUT(v),LIN(u))表示通過(guò)標(biāo)簽求解得到從v 到u 的最短路徑長(zhǎng)度,Dis(v,u)表示基于BFS得到從v到u路徑長(zhǎng)度,初始值為0,Q表示隊(duì)列。算法1中第1)行按照規(guī)則選擇度大的32 個(gè)頂點(diǎn)作為hop 點(diǎn)。第2)、3)行將hop 點(diǎn)依次執(zhí)行入隊(duì)操作。當(dāng)隊(duì)列不空時(shí),執(zhí)行出隊(duì)操作(第5)、6)行)。若通過(guò)標(biāo)簽求得的最短路徑不大于遍歷的路徑長(zhǎng)度,則停止訪問(wèn)其后代(第7)、8)行);否則,更新LIN標(biāo)簽,并將其后代加入到Q 中(第9)~12)行)。將hop點(diǎn)v再入隊(duì)列,通過(guò)執(zhí)行反向BFS構(gòu)建第13)行)。

    注 意,算 法1 中 需 要 在 第7)行 調(diào) 用 函 數(shù)QU(v,u,LOUT(v),LIN(u))求解根據(jù)已處理hop 點(diǎn)得到的路徑長(zhǎng)度。這一操作需要比較LOUT和LIN,即執(zhí)行集合求交集的操作。為了加快集合交集操作的處理,需要先對(duì)集合中的頂點(diǎn)按照編號(hào),或者某種序號(hào)進(jìn)行排序。

    4.1.2 索引優(yōu)化

    若v 和u 之 間 通 過(guò)hop 點(diǎn) 有 路 徑 相 連,則 函 數(shù)QU(v,u,LOUT(v),LIN(u))進(jìn)行集合交集操作的結(jié)果是經(jīng)過(guò)hop 點(diǎn)相連的路徑長(zhǎng)度,無(wú)需知道hop 點(diǎn)是誰(shuí)。因此,采用如下規(guī)則對(duì)算法1進(jìn)行優(yōu)化。

    規(guī)則1 所有頂點(diǎn)的LIN或者LOUT中無(wú)需存儲(chǔ)頂點(diǎn)自身編號(hào),只需存儲(chǔ)代表頂點(diǎn)處理順序的數(shù)字即可。

    根據(jù)規(guī)則1,構(gòu)建索引時(shí),無(wú)需執(zhí)行排序操作,對(duì)第i 個(gè)處理的hop 點(diǎn),直接在相應(yīng)頂點(diǎn)的標(biāo)簽中加入即可,這里的i表示當(dāng)前hop點(diǎn)是第i個(gè)被處理的hop點(diǎn),dis是hop點(diǎn)和當(dāng)前點(diǎn)的最短路徑距離。

    進(jìn)一步,由于只選擇了32個(gè)hop點(diǎn),且實(shí)際中數(shù)據(jù)圖的拓?fù)鋵訑?shù)有限,因此無(wú)需使用兩個(gè)整數(shù)來(lái)表示標(biāo)簽中的元組。利用規(guī)則2來(lái)進(jìn)一步減少索引規(guī)模。

    4.2 正反互逆拓?fù)錁?gòu)建

    求解正反互逆的拓?fù)涮?hào)索引總體上分為4 步:首先刪除32 個(gè)hop 點(diǎn),然后求解正向的拓?fù)涮?hào)X,接著基于X 求其逆向拓?fù)涮?hào)Y,最后在反向圖上求解兩個(gè)拓?fù)涮?hào)索引M和N。

    給定一個(gè)有向無(wú)環(huán)圖G,可以通過(guò)以下步驟得到X:1)將G中入度為0的頂點(diǎn)入棧S。2)對(duì)棧中元素執(zhí)行以下操作:(a)將S的棧頂元素v出棧,并標(biāo)記v的拓?fù)漤樞颍唬╞)刪除v及所有從v 出發(fā)的邊;(c)將v 的孩子中入度為0 的頂點(diǎn)插入S。3)重復(fù)步驟2)直到S為空,相應(yīng)的頂點(diǎn)出棧順序稱(chēng)為X。

    給定X,同樣基于棧可以得到其逆向拓?fù)漤樞験?;静僮鞣椒ㄈ缦拢菏紫人腥攵葹? 的頂點(diǎn)按照它們?cè)赬 中從小到大的順序進(jìn)入棧S。對(duì)棧中元素執(zhí)行以下操作:1)將S的棧頂元素v 出棧,并標(biāo)記v 的逆向拓?fù)涮?hào);2)刪除v 及從v 出發(fā)的邊;3)將v的孩子中入度為0 的頂點(diǎn)按照它們?cè)赬 中從小到大的順序入棧。執(zhí)行上述步驟,直至棧空即可得到第二次拓?fù)漤樞験。

    定理3求解逆向拓?fù)鋾r(shí),棧頂元素和使用堆選擇的拓?fù)涮?hào)最大的元素為相同頂點(diǎn)。

    證明 首先,使用大頂堆時(shí),堆頂元素是當(dāng)前堆中拓?fù)涮?hào)最大的頂點(diǎn)。其次,使用棧時(shí),本文首先將入度為0 的頂點(diǎn)按照第一遍拓?fù)涞捻樞驈男〉酱笕霔?,因此可以保證對(duì)初始入度為0 的頂點(diǎn),棧頂元素的拓?fù)涮?hào)最大。最后,由于棧頂元素的拓?fù)涮?hào)最大,其孩子的拓?fù)涮?hào)必然也大于棧中元素的拓?fù)涮?hào)。每處理一個(gè)棧頂元素,其孩子中可進(jìn)一步拓?fù)涞捻旤c(diǎn)也是按照第一遍拓?fù)涞捻樞驈男〉酱笕霔#@樣可以保證棧頂元素始終具有最大的拓?fù)涮?hào)。因而可以保證每次處理的都是可拓?fù)涞捻旤c(diǎn)中拓?fù)涮?hào)最大的。

    算法2 genTopo(G=(V,E))。

    輸入 G=(V,E);

    輸出 所有頂點(diǎn)v的四個(gè)拓?fù)湫蛱?hào)X,Y,M,N。

    1) 從G中刪除32個(gè)hop點(diǎn)

    2) Construct(G,X)

    3) Construct(G,Y)

    4) 將G的邊反轉(zhuǎn),執(zhí)行第1)~2)行,求解反向互逆拓?fù)?/p>

    第2)、3)行都是調(diào)用的Construct函數(shù),代碼如下所示:

    Function Construct(G=(V,E),H)

    1) 將入度為0的頂點(diǎn)按照特定順序入棧S

    2) topoNum ←0

    3) while S ≠? do

    4) v ←pop(S)

    5) HV←topoNum

    6) topoNum ←topoNum+1

    7) for each u ∈Out(v) do

    8) insize(u)←insize(u)-1

    9) if insize(u)=0 then push u into S

    在得到正向互逆的拓?fù)浜?,將圖的邊反轉(zhuǎn),在反向圖上執(zhí)行上述步驟,從而得到反向圖上的拓?fù)涮?hào)M 和N。最終,這4個(gè)拓?fù)漤樞驑?gòu)成本文提出的正反互逆的拓?fù)涮?hào)索引。

    算法2 用于求解給定的DAG G 的正反互逆拓?fù)湫蛱?hào),其中第2)行調(diào)用函數(shù)Construct 求解第一個(gè)拓?fù)漤樞騒,第3)行求X 的逆向拓?fù)鋂,第4)行求解反向互逆拓?fù)銶 和N。函數(shù)Construct 用于根據(jù)特定順序得到一個(gè)拓?fù)湫蛱?hào),其中S 為棧,Hv表示頂點(diǎn)的拓?fù)湫蛱?hào)。insize(v)表示存儲(chǔ)頂點(diǎn)v 入度的臨時(shí)數(shù)組。第1)行將圖中入度為0 的頂點(diǎn)入棧。從第3)~9)行的迭代中,每循環(huán)一次處理一個(gè)頂點(diǎn)。具體做法是,第4)~5)行元素出棧并設(shè)定其拓?fù)涮?hào),然后在第7)~9)行將其出鄰居的入度減1,若入度為0,則將其入棧。需要注意的是,算法第1)行,對(duì)于第一和第三遍拓?fù)?,特定順序不代表任何含義,只要找到一個(gè)入度為0 的頂點(diǎn)就將其入棧。第二遍和第四遍求的分別是第一、三遍的逆向拓?fù)?,這時(shí),特定順序代表在第一邊拓?fù)浜?,根?jù)第一遍拓?fù)湫蛱?hào)的升序?qū)⑷攵葹? 的頂點(diǎn)入棧,這樣就能保證第一、二遍拓?fù)浠ツ?,第三、四遍拓?fù)浠ツ?。另外,?)行按照存儲(chǔ)順序處理,當(dāng)執(zhí)行第一遍拓?fù)浜?,圖的鄰接表中頂點(diǎn)按照拓?fù)涮?hào)升序排序,且第二遍處理的是基于拓?fù)渑判蚝蟮泥徑颖磉M(jìn)行處理。這么做是為了在保證互逆的基礎(chǔ)上,避免排序操作。

    對(duì)圖1的G 而言,在求解正反拓?fù)涮?hào)之前,首先刪除32個(gè)hop 點(diǎn),得到簡(jiǎn)化的圖,之后執(zhí)行算法2 后,給每個(gè)頂點(diǎn)賦予4個(gè)拓?fù)涮?hào)。

    給定DAG G=(V,E),刪除32個(gè)hop點(diǎn)的操作可在線性時(shí)間內(nèi)完成。由于函數(shù)Construct 在執(zhí)行過(guò)程中始終沒(méi)有執(zhí)行特定的排序操作,在每次執(zhí)行函數(shù)Construct時(shí),每個(gè)頂點(diǎn)v 的處理代價(jià)是,因此函數(shù)Construct 的時(shí)間復(fù)雜度是。算法2 總共調(diào)用了4 次函數(shù)Construct,因此算法2的時(shí)間復(fù)雜度是。

    5 查詢

    算法3 用于判定查詢的k 步可達(dá)性。其中QU(v,u,LOUT(v),LIN(u))表示通過(guò)標(biāo)簽求解得到的最短路徑長(zhǎng)度。算法3的第1)、2)行采用hop點(diǎn)的最短路徑索引判定該查詢是否滿足k步可達(dá)性。具體來(lái)說(shuō):若通過(guò)最短路徑索引求得從u到v的最短路徑不大于k,說(shuō)明該查詢滿足k步可達(dá);否則若最短路徑大于k并且查詢中的頂點(diǎn)存在hop點(diǎn),說(shuō)明該查詢不滿足k 步可達(dá)性(第3)行)。若上述條件均不能判定查詢的k 步可達(dá)性,則在第4)、5)行采用正反互逆的拓?fù)涮?hào)判定查詢的可達(dá)性:若查詢不可達(dá),則說(shuō)明該查詢不滿足k 步可達(dá);否則,在第6)~13)行以遞歸的方式執(zhí)行遍歷操作。

    算法3 kRH (u,v,k,G=(V,E))。

    輸入 G=(V,E);

    輸出 true or false。

    1) if QU(v,u,LOUT(v),LIN(u))≤k

    2) return true

    4) if Xu>Xvor Yu>Yvor Mu<Mvor Nu<Nv

    5) return false

    6) if Out(u) ≤ In(v) then

    7) for each p in Out(u)do

    8) if kRH(p,v,k-1)

    9) return true

    10)else

    11) for each p in In(v) do

    12) if kRH(u,p,k-1)

    13) return true

    基于如下兩個(gè)啟發(fā)式來(lái)加速遍歷的過(guò)程。

    規(guī)則3 給定k 步可達(dá)查詢的兩個(gè)端點(diǎn)u 和v。若u 的出度大于v 的入度,則從v 出發(fā)向上遍歷找u;否則從u 出發(fā)向下遍歷找v。

    規(guī)則4 當(dāng)從v 出發(fā)遍歷時(shí),優(yōu)先選擇與其拓?fù)鋵酉嗖畲蟮捻旤c(diǎn)w進(jìn)行遍歷。

    規(guī)則4 中拓?fù)鋵酉嗖钶^大,說(shuō)明v 通過(guò)w 可能更快到達(dá)目標(biāo)點(diǎn)。

    6 實(shí)驗(yàn)與結(jié)果分析

    6.1 實(shí)驗(yàn)環(huán)境

    根據(jù)相關(guān)工作分析可知,在Label-Only 類(lèi)算法中,PLL 查詢效率最高;在Label+G 類(lèi)算法中,根據(jù)文獻(xiàn)[3],BFSI-B(Breadth First Search Index-Bilateral)算法比k-reach[5]更快,是Label+G類(lèi)算法中查詢效率最高的算法。因此,本文實(shí)驗(yàn)中用于比較的算法有BFSI-B[3]和PLL[9]。對(duì)于Label+G中第一類(lèi)方法而言,例如GRAIL,因其并非專(zhuān)門(mén)處理k步可達(dá)查詢,本文不再進(jìn)行比較。所有算法都采用C++實(shí)現(xiàn),并使用GCC7.3.0進(jìn)行編譯。所有算法使用相同的數(shù)據(jù)集和查詢集,并在相同的平臺(tái)上運(yùn)行得到實(shí)驗(yàn)數(shù)據(jù)。機(jī)器配置是4 GB RAM 的Intel Core i5-3230 CPU(8 核,2.60 GHz)和Ubuntu18.04LTS。以索引規(guī)模、索引構(gòu)建時(shí)間、查詢時(shí)間作為評(píng)價(jià)指標(biāo)來(lái)比較三種算法的性能。本文方法中的hop點(diǎn)個(gè)數(shù)是32。

    6.2 實(shí)驗(yàn)數(shù)據(jù)集

    實(shí)驗(yàn)數(shù)據(jù)集由21 個(gè)真實(shí)的數(shù)據(jù)集組成,這些數(shù)據(jù)集都廣泛地出現(xiàn)在圖論的可達(dá)性查詢研究[14-16]中,它們的統(tǒng)計(jì)信息如表4 所示。其中arxiv、citeseer、pubmed 來(lái)自引文獻(xiàn)[14];cit系列的數(shù)據(jù)集來(lái)自文獻(xiàn)[6],其非葉子頂點(diǎn)的平均出度為10到30;uniprot100m、uniprot150m 來(lái)自Uniprot 數(shù)據(jù)庫(kù)的注釋聯(lián)合 圖[15],皆 是UniProt 的 完 整 資 源 描 述 框 架(Resource Description Framework,RDF)的子集;soc-LJ(soc-LiveJournall)是來(lái)自社會(huì)網(wǎng)絡(luò)的有向無(wú)環(huán)圖;wikiTalk是來(lái)自維基百科的有向無(wú)環(huán)圖;web-Google 是來(lái)自Google 網(wǎng)頁(yè)的有向無(wú)環(huán)圖;dbpedia 為知識(shí)圖;web-uk 是文獻(xiàn)[16]收集的網(wǎng)絡(luò)有向無(wú)環(huán)圖。由表4 可知,除了前5 個(gè)數(shù)據(jù)集的規(guī)模較小之外,其余數(shù)據(jù)集規(guī)模較大;|V |表示給定有向無(wú)環(huán)圖的頂點(diǎn)數(shù)量,|E |為邊的數(shù)量,|d |表示頂點(diǎn)的平均度。對(duì)于每個(gè)數(shù)據(jù)集,本文使用隨機(jī)生成的100 萬(wàn)個(gè)查詢進(jìn)行測(cè)試,算法的運(yùn)行時(shí)間為處理100萬(wàn)個(gè)查詢的總時(shí)間。

    6.3 索引大小及時(shí)間

    表5 和表6 分別給出了不同方法的索引大小和索引構(gòu)建時(shí)間。從索引大小來(lái)看,如表5 所示,可以看出:1)在所有數(shù)據(jù)集上,本文方法構(gòu)建的索引規(guī)模最小。2)對(duì)于規(guī)模較小的圖而言,三種方法的索引規(guī)模相差不大。3)當(dāng)圖是稠密圖時(shí),PLL 算法建立的索引規(guī)模最大。原因在于,PLL 要構(gòu)建所有點(diǎn)的雙向索引,而B(niǎo)FSI-B 的索引規(guī)模與圖的頂點(diǎn)個(gè)數(shù)成正比,每個(gè)頂點(diǎn)對(duì)應(yīng)8個(gè)整數(shù)。本文方法kRH為每個(gè)頂點(diǎn)設(shè)定4個(gè)拓?fù)涮?hào)。雖然建立的是32 個(gè)hop 點(diǎn)的索引,但由于使用了提前終止條件以及每個(gè)hop 點(diǎn)關(guān)聯(lián)的頂點(diǎn)有限,平均到每個(gè)點(diǎn),hop標(biāo)簽不會(huì)超過(guò)4個(gè)數(shù)字,因此索引規(guī)模比BFSI-B小。

    表4 實(shí)驗(yàn)數(shù)據(jù)集統(tǒng)計(jì)信息Tab.4 Statistics of experimental datasets

    表5 不同數(shù)據(jù)集上的索引大小 單位:MBTab.5 Index size on different datasets unit:MB

    在索引時(shí)間方面,如表6 所示。相比PLL,kRH 算法的索引構(gòu)建時(shí)間更短,尤其當(dāng)圖的規(guī)模大且稠密時(shí)更加明顯;相比BFSI-B,二者索引時(shí)間相差不大。

    表6 不同數(shù)據(jù)集上的索引時(shí)間 單位:msTab.6 Index time on different datasets unit:ms

    6.4 查詢時(shí)間

    表7 展示了三種算法當(dāng)k=3 時(shí)的查詢處理時(shí)間。由表7可知,三種方法相比,本文算法所需時(shí)間最短。原因有兩方面:一方面,和PLL 相比,本文算法可以在常量時(shí)間處理不可達(dá)查詢;另一方面,和BFSI-B相比,本文算法基于4個(gè)拓?fù)涮?hào),可在常量時(shí)間檢測(cè)更多的不可達(dá)查詢。由于PLL不能常量時(shí)間回答查詢,因此在表8 中和BFSI-B 比較了常量時(shí)間內(nèi)可判定的查詢個(gè)數(shù),可以看出本文算法可在常量時(shí)間內(nèi)判定更多的查詢,因而可以獲得比BFSI-B更高的查詢響應(yīng)速度。

    表7 k=3時(shí)不同數(shù)據(jù)集上的查詢時(shí)間 單位:msTab.7 Query time on different datasets when k=3 unit:ms

    6.5 不同k值的查詢處理性能

    圖4 分別展示了三種算法在不同特征的數(shù)據(jù)集上處理100 萬(wàn)個(gè)查詢時(shí)隨k 值變化的情況。可以看出,本文方法和PLL 對(duì)k 值的變化不敏感,而B(niǎo)FSI-B 的性能受k 值影響較大,隨著k 值的增加,其所需的查詢處理時(shí)間增長(zhǎng)較多。對(duì)于稀疏數(shù)據(jù)集來(lái)說(shuō),k 值的變化對(duì)于BFSI-B 和kRH 算法的查詢時(shí)間影響不大;而對(duì)于稠密數(shù)據(jù)集(go_uniprot)來(lái)說(shuō),BFSI-B 和kRH 算法的查詢時(shí)間隨著k 的增大而增加,但是BFSI-B 的增加幅度更大。這是因?yàn)閗RH算法比BFSI-B覆蓋程度更高。

    圖4 不同數(shù)據(jù)集上三種算法的查詢時(shí)間對(duì)比Fig.4 Query time comparison of three algorithms on different datasets

    表8 k=3時(shí)常量時(shí)間內(nèi)可判定的查詢數(shù)量Tab.8 Query answers can be determined in constant time when k=3

    7 結(jié)語(yǔ)

    針對(duì)已有k 步可達(dá)查詢方法存在的索引規(guī)模大、查詢響應(yīng)速度慢的問(wèn)題,本文提出通過(guò)構(gòu)建大度頂點(diǎn)的雙向最短路徑來(lái)提高可達(dá)查詢的覆蓋率,同時(shí)提出基于簡(jiǎn)化圖的正反互逆拓?fù)鋪?lái)提高常量時(shí)間內(nèi)不可達(dá)查詢的處理效率。本文還提出了一系列優(yōu)化方法來(lái)減小索引規(guī)模、提高查詢處理的效率?;谡鎸?shí)數(shù)據(jù)集的實(shí)驗(yàn)結(jié)果表明,本文算法具有較小的索引規(guī)模和更快的查詢響應(yīng)速度,同時(shí)具有較好的擴(kuò)展性。最好情況下,在cit-Patents數(shù)據(jù)集上,與PLL算法相比,本文算法的索引規(guī)模和索引構(gòu)建時(shí)間僅為PLL 算法3%,查詢時(shí)間僅為PLL 算法的20%;和BFSI-B 算法相比,本文算法的索引僅為BFSI-B算法索引規(guī)模、查詢時(shí)間的一半。

    猜你喜歡
    方法
    中醫(yī)特有的急救方法
    中老年保健(2021年9期)2021-08-24 03:52:04
    高中數(shù)學(xué)教學(xué)改革的方法
    化學(xué)反應(yīng)多變幻 “虛擬”方法幫大忙
    變快的方法
    兒童繪本(2020年5期)2020-04-07 17:46:30
    學(xué)習(xí)方法
    可能是方法不對(duì)
    用對(duì)方法才能瘦
    Coco薇(2016年2期)2016-03-22 02:42:52
    最有效的簡(jiǎn)單方法
    山東青年(2016年1期)2016-02-28 14:25:23
    四大方法 教你不再“坐以待病”!
    Coco薇(2015年1期)2015-08-13 02:47:34
    賺錢(qián)方法
    亚洲国产精品sss在线观看| 午夜激情福利司机影院| 国产单亲对白刺激| 可以在线观看毛片的网站| 欧美激情久久久久久爽电影| 无遮挡黄片免费观看| 国产精品,欧美在线| 偷拍熟女少妇极品色| 高清毛片免费观看视频网站| 亚洲av电影不卡..在线观看| 亚洲av五月六月丁香网| 少妇人妻一区二区三区视频| 日本爱情动作片www.在线观看 | 美女 人体艺术 gogo| 十八禁国产超污无遮挡网站| av.在线天堂| 国产免费av片在线观看野外av| 我要搜黄色片| 久99久视频精品免费| 99久久成人亚洲精品观看| 级片在线观看| 变态另类成人亚洲欧美熟女| 91av网一区二区| 乱人视频在线观看| 亚洲人与动物交配视频| 少妇的逼水好多| 三级国产精品欧美在线观看| 91麻豆精品激情在线观看国产| 成人午夜高清在线视频| 国产久久久一区二区三区| 日韩欧美在线乱码| av天堂在线播放| 成人特级av手机在线观看| 欧美色视频一区免费| 99久久成人亚洲精品观看| 国产黄片美女视频| 亚洲精品成人久久久久久| 深爱激情五月婷婷| 国产亚洲欧美98| 中文字幕高清在线视频| 12—13女人毛片做爰片一| 免费不卡的大黄色大毛片视频在线观看 | 欧美三级亚洲精品| 精品乱码久久久久久99久播| 99久久精品国产国产毛片| 别揉我奶头 嗯啊视频| 尾随美女入室| 国产乱人视频| 色综合站精品国产| 欧美中文日本在线观看视频| 日韩精品中文字幕看吧| 亚洲成人久久爱视频| 精品一区二区三区av网在线观看| 亚洲人成网站在线播放欧美日韩| 亚洲成人久久性| 男女下面进入的视频免费午夜| 久久精品综合一区二区三区| 97热精品久久久久久| 狂野欧美白嫩少妇大欣赏| 天堂影院成人在线观看| 久久久久久久久久成人| 欧美日韩综合久久久久久 | 国产精品免费一区二区三区在线| 日韩欧美免费精品| 午夜福利视频1000在线观看| 在线免费观看不下载黄p国产 | 国产精品无大码| 国产91精品成人一区二区三区| 一区二区三区免费毛片| 99精品久久久久人妻精品| 免费看光身美女| 欧美绝顶高潮抽搐喷水| 亚洲性久久影院| 1000部很黄的大片| 91麻豆精品激情在线观看国产| 日本免费a在线| 毛片女人毛片| 精品午夜福利视频在线观看一区| 国产成人a区在线观看| 99久久精品一区二区三区| 日日摸夜夜添夜夜添小说| 亚洲午夜理论影院| av福利片在线观看| 国产精品综合久久久久久久免费| av在线观看视频网站免费| 亚洲美女视频黄频| 成人特级av手机在线观看| 69av精品久久久久久| 99在线视频只有这里精品首页| 最新在线观看一区二区三区| 久久精品国产鲁丝片午夜精品 | 亚洲精品一区av在线观看| 日韩欧美精品v在线| 免费不卡的大黄色大毛片视频在线观看 | 伦精品一区二区三区| 亚洲中文字幕一区二区三区有码在线看| 精品国产三级普通话版| 99九九线精品视频在线观看视频| 亚洲最大成人手机在线| 大又大粗又爽又黄少妇毛片口| 精品一区二区三区人妻视频| 91久久精品国产一区二区三区| 非洲黑人性xxxx精品又粗又长| 欧美高清成人免费视频www| av天堂在线播放| 少妇裸体淫交视频免费看高清| 成人二区视频| 亚洲人成网站在线播放欧美日韩| 麻豆国产97在线/欧美| 午夜激情福利司机影院| 伦理电影大哥的女人| 丰满的人妻完整版| 国产精品一区www在线观看 | 男女视频在线观看网站免费| 久久久久久久亚洲中文字幕| 人人妻,人人澡人人爽秒播| 最近视频中文字幕2019在线8| x7x7x7水蜜桃| 一个人看的www免费观看视频| 日本 av在线| 成人无遮挡网站| 色av中文字幕| 亚洲精华国产精华液的使用体验 | 小说图片视频综合网站| 亚洲真实伦在线观看| 五月玫瑰六月丁香| 亚洲五月天丁香| 99热这里只有是精品在线观看| 日日摸夜夜添夜夜添小说| 我的老师免费观看完整版| 亚洲美女视频黄频| 观看美女的网站| 久久国内精品自在自线图片| 精品久久久久久成人av| 啦啦啦韩国在线观看视频| 国内精品一区二区在线观看| 精品人妻偷拍中文字幕| 久久久久久伊人网av| 国内毛片毛片毛片毛片毛片| 男人和女人高潮做爰伦理| 欧美极品一区二区三区四区| 亚洲av中文字字幕乱码综合| 黄色日韩在线| 国产午夜精品久久久久久一区二区三区 | 真人做人爱边吃奶动态| 九九在线视频观看精品| 色哟哟·www| 啦啦啦啦在线视频资源| 亚洲专区国产一区二区| 久久久久久国产a免费观看| 欧美色欧美亚洲另类二区| 国产探花极品一区二区| 国产精品久久久久久精品电影| 亚洲精华国产精华精| 国产 一区 欧美 日韩| 午夜福利高清视频| 观看美女的网站| 久久久久久久久久久丰满 | 色精品久久人妻99蜜桃| 精品久久久久久久人妻蜜臀av| 亚洲自拍偷在线| 久久天躁狠狠躁夜夜2o2o| 淫妇啪啪啪对白视频| 又粗又爽又猛毛片免费看| 免费观看人在逋| 亚洲国产精品久久男人天堂| 麻豆久久精品国产亚洲av| 欧美一区二区国产精品久久精品| 欧美高清性xxxxhd video| 亚洲第一区二区三区不卡| 亚洲内射少妇av| 国产日本99.免费观看| 亚洲欧美日韩东京热| www.色视频.com| 日本一二三区视频观看| 一个人看视频在线观看www免费| 国产蜜桃级精品一区二区三区| 国产亚洲av嫩草精品影院| 在线国产一区二区在线| 日本色播在线视频| 毛片女人毛片| 欧美+日韩+精品| www.色视频.com| 午夜精品在线福利| 欧美日韩国产亚洲二区| 亚洲自偷自拍三级| 在线看三级毛片| 少妇高潮的动态图| 亚洲人成网站高清观看| 日本免费一区二区三区高清不卡| 亚洲av美国av| 高清毛片免费观看视频网站| 在线看三级毛片| 黄色欧美视频在线观看| 久久香蕉精品热| 男人舔女人下体高潮全视频| 免费看美女性在线毛片视频| 成人av在线播放网站| 天堂网av新在线| 国产一区二区三区视频了| 亚洲综合色惰| 99久久无色码亚洲精品果冻| 亚洲精品456在线播放app | 国产精品三级大全| 91在线精品国自产拍蜜月| 亚洲五月天丁香| xxxwww97欧美| 特大巨黑吊av在线直播| av专区在线播放| 嫩草影视91久久| 琪琪午夜伦伦电影理论片6080| 熟女人妻精品中文字幕| av福利片在线观看| 一级毛片久久久久久久久女| 真实男女啪啪啪动态图| 久久精品国产自在天天线| 麻豆成人午夜福利视频| 黄色日韩在线| 最近中文字幕高清免费大全6 | av天堂在线播放| 日本 欧美在线| 99久久成人亚洲精品观看| 999久久久精品免费观看国产| 乱人视频在线观看| 免费人成在线观看视频色| 欧美日韩精品成人综合77777| 免费观看的影片在线观看| 中文资源天堂在线| 国产成年人精品一区二区| 国产亚洲欧美98| 欧美区成人在线视频| 亚洲性夜色夜夜综合| 国内久久婷婷六月综合欲色啪| 亚洲 国产 在线| 一个人观看的视频www高清免费观看| 国产精品电影一区二区三区| 久久婷婷人人爽人人干人人爱| 无人区码免费观看不卡| 日本-黄色视频高清免费观看| 日本免费a在线| 亚洲欧美日韩高清在线视频| 国产蜜桃级精品一区二区三区| 99热6这里只有精品| 九九在线视频观看精品| 91久久精品国产一区二区成人| 天堂av国产一区二区熟女人妻| 少妇丰满av| 非洲黑人性xxxx精品又粗又长| 欧美日韩综合久久久久久 | 国产激情偷乱视频一区二区| 99久久中文字幕三级久久日本| 国产精华一区二区三区| 九九爱精品视频在线观看| 成人永久免费在线观看视频| 久久热精品热| 97超视频在线观看视频| 久久国内精品自在自线图片| 国内精品久久久久精免费| 成人av一区二区三区在线看| 国产成人福利小说| 日韩 亚洲 欧美在线| 看黄色毛片网站| 国产午夜精品久久久久久一区二区三区 | 又黄又爽又免费观看的视频| 国内揄拍国产精品人妻在线| 亚洲精品久久国产高清桃花| 老女人水多毛片| 亚洲第一区二区三区不卡| 久久人人爽人人爽人人片va| 精品无人区乱码1区二区| 国产免费男女视频| 久久久精品欧美日韩精品| 日本一本二区三区精品| 婷婷六月久久综合丁香| 亚洲avbb在线观看| 91av网一区二区| 热99re8久久精品国产| 久久香蕉精品热| 成人午夜高清在线视频| 老司机深夜福利视频在线观看| 国产一区二区亚洲精品在线观看| 精品国内亚洲2022精品成人| 91麻豆精品激情在线观看国产| 婷婷丁香在线五月| 成人三级黄色视频| 国产麻豆成人av免费视频| 亚洲精品一卡2卡三卡4卡5卡| 国内毛片毛片毛片毛片毛片| 亚洲国产日韩欧美精品在线观看| 丰满乱子伦码专区| 99热这里只有是精品50| 国产私拍福利视频在线观看| 久久久久久久久久久丰满 | 一级黄片播放器| 亚洲一区二区三区色噜噜| 久久午夜福利片| 欧美精品啪啪一区二区三区| 亚洲最大成人av| 免费人成在线观看视频色| 亚洲av.av天堂| 成人亚洲精品av一区二区| 午夜免费成人在线视频| 非洲黑人性xxxx精品又粗又长| 国产精品一区二区性色av| 成人无遮挡网站| 国产毛片a区久久久久| 欧美性感艳星| 国产精品人妻久久久久久| 国产亚洲91精品色在线| 成人综合一区亚洲| 欧美精品国产亚洲| 真实男女啪啪啪动态图| 精品乱码久久久久久99久播| 最近最新中文字幕大全电影3| 国产主播在线观看一区二区| 国产精品久久电影中文字幕| 色噜噜av男人的天堂激情| 夜夜夜夜夜久久久久| 国产精品亚洲一级av第二区| 精品久久国产蜜桃| 99热这里只有是精品在线观看| 国产精品一区二区三区四区免费观看 | 看免费成人av毛片| 狠狠狠狠99中文字幕| 尾随美女入室| 日韩欧美免费精品| 久久精品国产亚洲av涩爱 | 波多野结衣高清作品| 亚洲图色成人| 欧美bdsm另类| 亚洲国产精品久久男人天堂| 久久久成人免费电影| 老司机福利观看| 日韩一本色道免费dvd| 91麻豆av在线| 精品久久久噜噜| 在线观看一区二区三区| 日本欧美国产在线视频| 国产成人a区在线观看| 高清日韩中文字幕在线| 男女那种视频在线观看| 日本五十路高清| 非洲黑人性xxxx精品又粗又长| 亚洲专区中文字幕在线| 性色avwww在线观看| 国语自产精品视频在线第100页| 亚洲av熟女| 赤兔流量卡办理| 女生性感内裤真人,穿戴方法视频| 一进一出抽搐动态| 国产一区二区三区视频了| 一本久久中文字幕| 久久香蕉精品热| 麻豆国产97在线/欧美| 联通29元200g的流量卡| 哪里可以看免费的av片| 国产综合懂色| 亚洲av成人av| 日韩一区二区视频免费看| 国产精品久久久久久精品电影| 亚洲不卡免费看| 一进一出抽搐gif免费好疼| 麻豆国产av国片精品| 三级国产精品欧美在线观看| 99riav亚洲国产免费| .国产精品久久| 乱人视频在线观看| 一个人看视频在线观看www免费| 少妇裸体淫交视频免费看高清| 欧美最黄视频在线播放免费| 久久久久久大精品| 在线国产一区二区在线| 亚洲内射少妇av| 国产欧美日韩精品一区二区| 国产精品人妻久久久影院| 亚洲男人的天堂狠狠| 男人舔女人下体高潮全视频| 国产单亲对白刺激| 亚洲成人中文字幕在线播放| 婷婷丁香在线五月| 日韩欧美精品v在线| 成年女人毛片免费观看观看9| 久久人人精品亚洲av| 国产精品美女特级片免费视频播放器| 欧美又色又爽又黄视频| 99精品久久久久人妻精品| 22中文网久久字幕| 热99re8久久精品国产| 永久网站在线| 狂野欧美白嫩少妇大欣赏| 欧美+亚洲+日韩+国产| 一夜夜www| 国产精品一区二区三区四区免费观看 | 悠悠久久av| 九色成人免费人妻av| 国产v大片淫在线免费观看| 99久久九九国产精品国产免费| 亚州av有码| 在线看三级毛片| 久久香蕉精品热| 色综合站精品国产| 久久精品国产鲁丝片午夜精品 | 欧美xxxx黑人xx丫x性爽| 高清在线国产一区| 国产精品无大码| 美女cb高潮喷水在线观看| 免费一级毛片在线播放高清视频| 最新中文字幕久久久久| 午夜免费激情av| 老司机深夜福利视频在线观看| 久久久久久久久大av| 最后的刺客免费高清国语| 亚洲欧美日韩东京热| a级毛片免费高清观看在线播放| 欧美成人免费av一区二区三区| 1000部很黄的大片| 久久国内精品自在自线图片| 男女啪啪激烈高潮av片| 亚洲欧美激情综合另类| 亚洲真实伦在线观看| 国产精品久久久久久久久免| 嫩草影视91久久| 色视频www国产| 亚洲成人中文字幕在线播放| 国产亚洲欧美98| 黄片wwwwww| 欧美国产日韩亚洲一区| 亚洲欧美日韩无卡精品| 国内久久婷婷六月综合欲色啪| 精品乱码久久久久久99久播| 观看免费一级毛片| 欧美一区二区国产精品久久精品| 色5月婷婷丁香| 久久久精品欧美日韩精品| 久久精品国产亚洲av涩爱 | 日韩中文字幕欧美一区二区| 亚洲精华国产精华精| 午夜福利在线观看免费完整高清在 | www日本黄色视频网| 91麻豆av在线| 一a级毛片在线观看| 国产又黄又爽又无遮挡在线| 精品国产三级普通话版| 国产高清激情床上av| 99国产精品一区二区蜜桃av| 成人美女网站在线观看视频| 国产不卡一卡二| 麻豆成人午夜福利视频| 黄色日韩在线| 长腿黑丝高跟| 欧美高清性xxxxhd video| 亚洲第一区二区三区不卡| 色播亚洲综合网| 男女那种视频在线观看| 婷婷色综合大香蕉| 日本欧美国产在线视频| 国产黄片美女视频| 69人妻影院| 亚洲在线自拍视频| 亚洲自拍偷在线| 99久久精品国产国产毛片| 亚洲精品一卡2卡三卡4卡5卡| 成人特级av手机在线观看| 日韩大尺度精品在线看网址| 国产黄片美女视频| 国产精品精品国产色婷婷| 亚洲人成伊人成综合网2020| 小说图片视频综合网站| 午夜爱爱视频在线播放| 日本黄大片高清| 国产日本99.免费观看| 在线观看一区二区三区| 人妻久久中文字幕网| 国产精品国产三级国产av玫瑰| 日日夜夜操网爽| 色综合亚洲欧美另类图片| 欧美一级a爱片免费观看看| 九九热线精品视视频播放| 少妇的逼水好多| 亚洲欧美日韩卡通动漫| 国产亚洲精品久久久com| 亚洲av中文av极速乱 | 欧美一区二区精品小视频在线| 久久久国产成人精品二区| 亚洲精品日韩av片在线观看| 中文字幕人妻熟人妻熟丝袜美| 国产成人福利小说| 免费人成在线观看视频色| 免费观看人在逋| 国产亚洲精品久久久久久毛片| 97热精品久久久久久| 精品人妻偷拍中文字幕| 午夜福利成人在线免费观看| 亚洲真实伦在线观看| 别揉我奶头 嗯啊视频| 亚洲内射少妇av| 色综合婷婷激情| 夜夜爽天天搞| 在线观看av片永久免费下载| 真人一进一出gif抽搐免费| 村上凉子中文字幕在线| 国产又黄又爽又无遮挡在线| 婷婷色综合大香蕉| 日韩大尺度精品在线看网址| 国产黄色小视频在线观看| 中文亚洲av片在线观看爽| 亚洲欧美清纯卡通| 人人妻,人人澡人人爽秒播| 日韩 亚洲 欧美在线| 一a级毛片在线观看| 啦啦啦观看免费观看视频高清| 少妇裸体淫交视频免费看高清| 日韩,欧美,国产一区二区三区 | 亚洲精华国产精华液的使用体验 | 一进一出好大好爽视频| 十八禁国产超污无遮挡网站| 免费看美女性在线毛片视频| 久久香蕉精品热| 真人一进一出gif抽搐免费| 精品人妻视频免费看| 天堂影院成人在线观看| 国产精品一区二区三区四区久久| 国产探花极品一区二区| 久久久色成人| 此物有八面人人有两片| 日本在线视频免费播放| 露出奶头的视频| 国产在线男女| 久久午夜福利片| 亚洲av中文av极速乱 | 欧美潮喷喷水| 亚洲熟妇熟女久久| 亚洲av成人精品一区久久| 精品国产三级普通话版| 欧洲精品卡2卡3卡4卡5卡区| 国语自产精品视频在线第100页| 搡老妇女老女人老熟妇| 在线播放国产精品三级| 精品乱码久久久久久99久播| 欧美+日韩+精品| 禁无遮挡网站| 97碰自拍视频| 天堂影院成人在线观看| 国产精品女同一区二区软件 | 免费观看人在逋| 不卡一级毛片| 99精品久久久久人妻精品| 在线观看一区二区三区| 精品久久久久久久人妻蜜臀av| 欧美一区二区亚洲| 欧美日韩黄片免| 精品午夜福利视频在线观看一区| 在线观看一区二区三区| 小蜜桃在线观看免费完整版高清| 成人无遮挡网站| 日本五十路高清| 久久草成人影院| 国产精品久久久久久精品电影| 看片在线看免费视频| 欧美性猛交╳xxx乱大交人| 中文亚洲av片在线观看爽| 欧美3d第一页| 日本色播在线视频| 日韩欧美国产在线观看| 观看美女的网站| 免费在线观看影片大全网站| 亚洲成a人片在线一区二区| 免费电影在线观看免费观看| 欧美+日韩+精品| 69人妻影院| 在线观看av片永久免费下载| av黄色大香蕉| 88av欧美| 18+在线观看网站| 美女cb高潮喷水在线观看| 搡老岳熟女国产| 国产综合懂色| 亚洲七黄色美女视频| 在线观看av片永久免费下载| 直男gayav资源| 有码 亚洲区| av福利片在线观看| 最新在线观看一区二区三区| 97人妻精品一区二区三区麻豆| 中文字幕久久专区| 久久亚洲真实| 婷婷精品国产亚洲av| 男人和女人高潮做爰伦理| 午夜a级毛片| 欧美一级a爱片免费观看看| 亚洲国产精品成人综合色| 久久精品人妻少妇| 欧美成人免费av一区二区三区| 国国产精品蜜臀av免费| 国产熟女欧美一区二区| 少妇人妻精品综合一区二区 | 两性午夜刺激爽爽歪歪视频在线观看| 亚洲av一区综合| 22中文网久久字幕| 中文字幕人妻熟人妻熟丝袜美| 成年女人永久免费观看视频| 成年版毛片免费区| 99久久精品国产国产毛片| 亚洲第一区二区三区不卡| aaaaa片日本免费| 久久99热这里只有精品18| 国产久久久一区二区三区| 天堂动漫精品| 亚洲欧美日韩高清在线视频| 国产精品女同一区二区软件 | 久久精品影院6| 亚洲,欧美,日韩| 欧美激情在线99| 国产爱豆传媒在线观看| 99久国产av精品|