
本發明涉及計算機技術領域,尤其涉及一種多跳鄰居節點的獲取方法和裝置。
背景技術:
一個社交網絡是一個連接獨立個體和組織的網絡。現在有很多的社交網絡,例如Facebook,Twitter,論文引用網絡,Skype通信網絡,博客網絡和人人網等等呈現出了一片繁榮的景象。在社交網絡中一個頂點代表一個對象,例如:一個論文,一個傳感器,一個人等等都可以作為一個頂點,邊代表頂點與頂點之間的關系,關系可以有合作論文的關系、朋友關系、師生關系、論文的引用關系等等。
多跳鄰居在大圖上的應用非常廣泛,例如社區發現、廣告推薦或朋友推薦、鏈接預測,查找朋友的朋友等等。在大圖上,獲得指定頂點的多跳鄰居的常用方法是進行廣度優先搜索(英文全稱:Breadth First Search,英文簡稱:BFS),該方法可以從指定頂點開始沿著其出邊向其鄰接頂點進行信息傳送,鄰接頂點再將該信息繼續向自己的鄰居傳送,直到達到其所需要的鄰居節點為止。
在分布式圖的處理框架中,采用的BFS方法經過多次迭代以獲得所需要的多跳鄰居的信息,而在每次迭代過程中都要在網絡中發送消息,隨著搜索過程的加深,消息量不斷加大,網絡通信代價非常大。因此現有的BFS方法進行多跳鄰居的計算會產生大量的網絡通信代價,特別是一些稠密圖或冪律圖,大量的信息傳輸會導致網絡阻塞,這都會降低在大圖中查詢多跳鄰居節點的計算效率。
技術實現要素:
本發明實施例提供了一種多跳鄰居節點的獲取方法和裝置,用于提升在 大圖中查詢多跳鄰居節點的計算效率。
為解決上述技術問題,本發明實施例提供以下技術方案:
第一方面,本發明實施例提供一種多跳鄰居節點的獲取方法,包括:
獲取拓撲網絡中每個節點的0跳鄰居,得到全節點0跳鄰居集合,所述全節點0跳鄰居集合包括:每個起始節點和對應的目的節點構成的節點對,其中,所述起始節點指的是所述拓撲網絡中的任意一個節點,所述目的節點指的是在所述拓撲網絡中與所述起始節點存在連邊關系的節點;
當第一節點作為指定節點時,通過如下的迭代計算過程計算所述第一節點的k+1跳鄰居集合,所述k為大于等于0且小于預置的跳數閾值kmax的自然數,所述迭代計算過程包括如下的步驟a和步驟b,其中,
步驟a、獲取所述第一節點的k跳鄰居集合,所述第一節點的k跳鄰居集合包括:k跳起始節點和k跳目的節點構成的節點對;
步驟b、將所述第一節點的k跳鄰居集合中k跳目的節點,和所述全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合,其中,所述兩個節點對分別來自所述第一節點的k跳鄰居集合、所述全節點0跳鄰居集合;
在計算出所述第一節點的k+1跳鄰居集合之后,當所述第一節點的k+1跳鄰居集合中的跳數k+1等于所述kmax時,將所述第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出。
結合第一方面,在第一方面的第一種可能的實現方式中,所述方法還包括:
當所述第一節點的k+1跳鄰居集合中的跳數k+1小于所述kmax時,按照所述步驟a和步驟b的迭代計算方式計算所述第一節點的k+2跳鄰居集合;
在計算出所述第一節點的k+2跳鄰居集合之后,當所述第一節點的k+2跳鄰居集合中的跳數k+2等于所述kmax時,將所述第一節點的k+2跳鄰居集合以及對應的k+1跳路徑輸出。
結合第一方面,在第一方面的第二種可能的實現方式中,所述步驟a執行之后,所述迭代計算過程還包括:步驟a+1,其中,
步驟a+1,對所述第一節點的k跳鄰居集合中的節點對進行反轉,得到所 述第一節點的反轉指定節點k跳鄰居集合,所述第一節點的反轉指定節點k跳鄰居集合包括:反轉后的k跳起始節點和反轉后的k跳目的節點構成的節點對,所述反轉后的k跳起始節點為所述第一節點的k跳鄰居集合中的k跳目的節點,所述反轉后的k跳目的節點為所述第一節點的k跳鄰居集合中的k跳起始節點;
所述步驟b,具體為:步驟b’,其中,
步驟b’、將所述第一節點的反轉指定節點k跳鄰居集合中反轉后的k跳起始節點,和所述全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合。
結合第一方面,在第一方面的第三種可能的實現方式中,所述步驟b,包括:步驟b”和步驟b”’,其中,
步驟b”、從所述全節點0跳鄰居集合中篩選出所有起始節點與所述第一節點的k跳鄰居集合中k跳目的節點相同的節點對,篩選節點對完成之后得到所述第一節點的篩選指定節點k跳鄰居集合;
步驟b”’、將所述第一節點的k跳鄰居集合中k跳目的節點,和所述第一節點的篩選指定節點k跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合。
結合第一方面的第三種可能的實現方式,在第一方面的第四種可能的實現方式中,所述步驟b,還包括:步驟b””,其中,
步驟b””、判斷所述k+1是否等于1,或判斷所述第一節點的k跳鄰居集合中包括的節點對個數是否滿足預置的節點對條件;
若所述k+1等于1,則執行步驟b”和步驟b”’;
若所述第一節點的k跳鄰居集合中包括的節點對個數滿足所述節點對條件,則執行步驟b”和步驟b”’。
結合第一方面,在第一方面的第五種可能的實現方式中,若所述第一節點存在至少兩個的指定節點k+1跳鄰居集合時,所述迭代計算過程是并行的計算所述第一節點的各個指定節點k+1跳鄰居集合。
第二方面,本發明實施例還提供一種多跳鄰居節點的獲取裝置,包括:獲取模塊、迭代計算模塊和輸出模塊,其中,
所述獲取模塊,用于獲取拓撲網絡中每個節點的0跳鄰居,得到全節點0跳鄰居集合,所述全節點0跳鄰居集合包括:每個起始節點和對應的目的節點構成的節點對,其中,所述起始節點指的是所述拓撲網絡中的任意一個節點,所述目的節點指的是在所述拓撲網絡中與所述起始節點存在連邊關系的節點;
所述迭代計算模塊,用于當第一節點作為指定節點時,通過如下的迭代計算過程計算所述第一節點的k+1跳鄰居集合,所述k為大于等于0且小于預置的跳數閾值kmax的自然數,所述迭代計算過程包括如下的步驟a和步驟b,其中,
步驟a、獲取所述第一節點的k跳鄰居集合,所述第一節點的k跳鄰居集合包括:k跳起始節點和k跳目的節點構成的節點對;
步驟b、將所述第一節點的k跳鄰居集合中k跳目的節點,和所述全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合,其中,所述兩個節點對分別來自所述第一節點的k跳鄰居集合、所述全節點0跳鄰居集合;
所述輸出模塊,用于在計算出所述第一節點的k+1跳鄰居集合之后,當所述第一節點的k+1跳鄰居集合中的跳數k+1等于所述kmax時,將所述第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出。
結合第二方面,在第二方面的第一種可能的實現方式中,所述迭代計算模塊,還用于當所述第一節點的k+1跳鄰居集合中的跳數k+1小于所述kmax時,按照所述步驟a和步驟b的迭代計算方式計算所述第一節點的k+2跳鄰居集合;
所述輸出模塊,還用于在計算出所述第一節點的k+2跳鄰居集合之后,當所述第一節點的k+2跳鄰居集合中的跳數k+2等于所述kmax時,將所述第一節點的k+2跳鄰居集合以及對應的k+1跳路徑輸出。
結合第二方面,在第二方面的第二種可能的實現方式中,所述迭代計算模塊,還用于所述步驟a執行之后,執行所述迭代計算過程還包括的步驟a+1,其中,
步驟a+1,對所述第一節點的k跳鄰居集合中的節點對進行反轉,得到所 述第一節點的反轉指定節點k跳鄰居集合,所述第一節點的反轉指定節點k跳鄰居集合包括:反轉后的k跳起始節點和反轉后的k跳目的節點構成的節點對,所述反轉后的k跳起始節點為所述第一節點的k跳鄰居集合中的k跳目的節點,所述反轉后的k跳目的節點為所述第一節點的k跳鄰居集合中的k跳起始節點;
所述迭代計算模塊,具體用于執行步驟b’,其中,
步驟b’、將所述第一節點的反轉指定節點k跳鄰居集合中反轉后的k跳起始節點,和所述全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合。
結合第二方面,在第二方面的第三種可能的實現方式中,所述迭代計算模塊,具體用于執行步驟b”和步驟b”’,其中,
步驟b”、從所述全節點0跳鄰居集合中篩選出所有起始節點與所述第一節點的k跳鄰居集合中k跳目的節點相同的節點對,篩選節點對完成之后得到所述第一節點的篩選指定節點k跳鄰居集合;
步驟b”’、將所述第一節點的k跳鄰居集合中k跳目的節點,和所述第一節點的篩選指定節點k跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合。
結合第二方面的第三種可能的實現方式,在第二方面的第四種可能的實現方式中,所述迭代計算模塊,具體用于執行步驟b””,其中,
步驟b””、判斷所述k+1是否等于1,或判斷所述第一節點的k跳鄰居集合中包括的節點對個數是否滿足預置的節點對條件;
若所述k+1等于1,則執行步驟b”和步驟b”’;
若所述第一節點的k跳鄰居集合中包括的節點對個數滿足所述節點對條件,則執行步驟b”和步驟b”’。
結合第二方面,在第二方面的第五種可能的實現方式中,若所述第一節點存在至少兩個的指定節點k+1跳鄰居集合時,所述迭代計算模塊,具體用于并行的計算所述第一節點的各個指定節點k+1跳鄰居集合。
從以上技術方案可以看出,本發明實施例具有以下優點:
在本發明實施例中,首先根據拓撲網絡中所有節點之間的連邊關系得到 全節點0跳鄰居集合,當第一節點作為指定節點時,從第一節點的k跳鄰居集合通過本發明實施例中的迭代計算過程可以計算出第一節點的k+1跳鄰居集合,由于全節點0跳鄰居集合中記錄有所有節點作為起始節點時對應的目的節點,步驟b中第一節點的k跳鄰居集合和全節點0跳鄰居集合中滿足k跳目的節點和全節點0跳鄰居集合中起始節點相同時的兩個節點對連接為一個節點對,第一節點的k+1跳鄰居集合相對于第一節點的k跳鄰居集合增加了具有連邊關系的節點,當跳數k+1等于預置的kmax時,將第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出,從第一節點的kmax跳鄰居集合可以獲取到第一節點的多跳鄰居節點。本發明實施例中通過節點對之間的連接操作可以完成多跳鄰居節點的計算,而不需要在拓撲網絡中發送消息,從而可以提升在大圖中查詢多跳鄰居節點的計算效率。
附圖說明
為了更清楚地說明本發明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域的技術人員來講,還可以根據這些附圖獲得其他的附圖。
圖1為本發明實施例提供的一種多跳鄰居節點的獲取方法的流程方框示意圖;
圖2為本發明實施例提供的另一種多跳鄰居節點的獲取方法的流程方框示意圖;
圖3為本發明實施例提供的節點對的連接過程的一種應用場景示意圖;
圖4為本發明實施例提供的全節點0跳鄰居集合的過濾過程示意圖;
圖5為本發明實施例提供的一種多跳鄰居節點的獲取裝置的組成結構示意圖;
圖6為本發明實施例提供的另一種多跳鄰居節點的獲取裝置的組成結構示意圖。
具體實施方式
本發明實施例提供了一種多跳鄰居節點的獲取方法和裝置,用于提升在大圖中查詢多跳鄰居節點的計算效率。
為使得本發明的發明目的、特征、優點能夠更加的明顯和易懂,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,下面所描述的實施例僅僅是本發明一部分實施例,而非全部實施例。基于本發明中的實施例,本領域的技術人員所獲得的所有其他實施例,都屬于本發明保護的范圍。
本發明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的術語在適當情況下可以互換,這僅僅是描述本發明的實施例中對相同屬性的對象在描述時所采用的區分方式。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,以便包含一系列單元的過程、方法、系統、產品或設備不必限于那些單元,而是可包括沒有清楚地列出的或對于這些過程、方法、產品或設備固有的其它單元。
以下分別進行詳細說明。
本發明多跳鄰居節點的獲取方法的一個實施例,可應用于大圖中對指定節點的多跳鄰居節點的確定中,請參閱圖1所示,本發明一個實施例提供的多跳鄰居節點的獲取方法,可以包括如下步驟:
101、獲取拓撲網絡中每個節點的0跳鄰居,得到全節點0跳鄰居集合。
其中,全節點0跳鄰居集合包括:每個起始節點和對應的目的節點構成的節點對,起始節點指的是拓撲網絡中的任意一個節點,目的節點指的是在拓撲網絡中與起始節點存在連邊關系的節點。
在本發明實施例中,拓撲網絡可以是包括很多的節點(本發明實施例中節點也可以稱為頂點)和連邊,該拓撲網絡可以是一個大圖,在大圖中節點個數和節點之間的連邊都很多,本發明實施例中提供的多跳鄰居節點的獲取方法中可以根據拓撲網絡中的節點和節點之間的連邊關系構造出節點對,例如,拓撲網絡中的一個節點作為起始節點,與該起始節點之間存在連邊關系的節點作為該起始節點對應的目的節點,一個起始節點和一個目的節點可以 構成一個節點對,該節點對可以表示為(起始節點,對應的目的節點)。若一個起始節點存在多個目的節點,則該起始節點可以多個目的節點構成多個節點對,拓撲網絡中的所有節點都作為起始節點時分別可以構造出該從該起始節點對應的節點對,當以所有的節點都作為起始節點構造出節點對之后,可以得到本發明實施例中所述的全節點0跳鄰居集合,其中0跳指的是具有連接關系的起始節點和目的節點之間的跳數。舉例說明如下,全節點0跳鄰居集合中包括:節點對1和節點2,節點對1為(節點1,節點2),節點對2為(節點2,節點3),則節點1和節點2為0跳鄰居,節點2和節點3為0跳鄰居節點。
需要說明的是,在本發明實施例中,全節點0跳鄰居集合中記錄有所有節點作為起始節點時對應的目的節點,在后續實施例中每一輪的迭代計算中都需要從全節點0跳鄰居集合中來獲取存在連邊關系的起始節點和目的節點。另外本發明實施例中,只需要從拓撲網絡中提取到全節點0跳鄰居集合即可,而不需要每次迭代過程中都在拓撲網絡中發送消息,因此本發明實施例提供的方法可以適用于查詢大圖的多跳鄰居節點,不會造成網絡的阻塞。
102、當第一節點作為指定節點時,通過如下的迭代計算過程計算第一節點的k+1跳鄰居集合,k為大于等于0且小于預置的跳數閾值kmax的自然數,迭代計算過程包括如下的步驟a和步驟b。其中,
步驟a、獲取第一節點的k跳鄰居集合,第一節點的k跳鄰居集合包括:k跳起始節點和k跳目的節點構成的節點對;
步驟b、將第一節點的k跳鄰居集合中k跳目的節點,和全節點0跳鄰居集合中起始節點相同的兩個節點對連接(英文名稱:join)為一個節點對,完成節點對的連接后得到第一節點的k+1跳鄰居集合,其中,兩個節點對分別來自第一節點的k跳鄰居集合、全節點0跳鄰居集合。
在步驟102中用戶可以指定拓撲網絡中的任何一個節點進行多跳鄰居節點的查詢,本發明實施例中將用戶從拓撲網絡中選擇的指定頂點定義為第一節點,步驟102和步驟103中以計算第一節點的多跳鄰居節點進行說明,進一步的,在步驟102中可以包括步驟a和步驟b,具體以迭代計算過程中從第一節點的k跳鄰居集合到第一節點的k+1跳鄰居集合的迭代進行詳細說明。 其中,k可以指的是從0到kmax之間的任何一個值(k可以取0,1,2,…,kmax-1中的任何一個值),另外在每一輪的迭代計算過程中輸入值均來自上一輪的迭代計算結果,即每一輪的迭代計算結果都可以作為下一輪的輸入值。
需要說明的是,在初始的第一輪迭代計算中,k的取值為0,此時第一節點的0跳鄰居集合指的是從全節點0跳鄰居集合中篩選出的以第一節點為起始節點的所有節點對,即在全節點0跳鄰居集合中選擇出起始節點為第一節點的節點對,這些節點對構成了第一節點的0跳鄰居集合。得到第一節點的0跳鄰居集合之后,通過執行本發明實施例中描述的步驟a和步驟b可以得到第一節點的1跳鄰居集合,然后以第一節點的1跳鄰居集合作為輸入值來繼續執行步驟a和步驟b,則可以得到第一節點的2跳鄰居集合,以此類型。需要說明的是,在每完成一輪的迭代計算之后,都需要判斷是否滿足跳數k+1等于kmax的條件,若滿足該條件,則需要執行步驟103,否則更新k的取值繼續執行步驟a和步驟b,接下來對本發明實施例中一輪的迭代計算過程進行詳細說明。
在步驟a中,獲取第一節點的k跳鄰居集合,第一節點的k跳鄰居集合包括:k跳起始節點和k跳目的節點構成的節點對。由前述描述可知,第一節點的k跳鄰居集合可以通過上一輪的迭代計算結果來獲取到,在第一節點的k跳鄰居集合中記錄有從0跳到k跳的所有鄰居節點。其中,第一節點的k跳鄰居集合中包括有k跳起始節點和k跳目的節點構成的節點對,該節點對中k跳起始節點表示的是在第k跳的迭代計算過程中具有連邊關系的起始節點,該節點對中k跳目的節點表示的是在第k跳的迭代計算過程中需要繼續擴展連邊關系的節點。舉例說明如下,全節點0跳鄰居集合中包括:節點對1和節點2,節點對1為(節點1,節點2),節點對2為(節點2,節點3),則節點1和節點2為0跳鄰居,節點2和節點3為0跳鄰居節點。節點1和節點3之間為1跳鄰居節點,并且節點1和節點3通過節點2成為1跳鄰居節點,為了能夠表示節點1和節點3之間的連接節點都有哪些,可以將節點2寫入到節點對中,將1跳鄰居節點對表示為(節點2,(節點1,節點3))。
在第k跳的迭代計算過程中,步驟a執行之后就執行步驟b,判斷第一節點的k跳鄰居集合中k跳目的節點,和全節點0跳鄰居集合中的哪些起始節 點相同,從全節點0跳鄰居集合中查找到起始節點為第一節點的k跳鄰居集合中的k跳目的節點的節點對,將第一節點的k跳鄰居集合中k跳目的節點,和全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到第一節點的k+1跳鄰居集合,其中,兩個節點對分別來自第一節點的k跳鄰居集合、全節點0跳鄰居集合。本發明實施例中將兩個節點對連接為一個節點對,是將兩個節點對中的所有節點表示在同一個連接后形成的節點對中。舉例說明如下,第一節點的k跳鄰居集合的節點對為(節點x,節點y),則k跳起始節點為節點x,k跳目的節點為節點y,全節點0跳鄰居集合的節點對未(節點y,節點z),則全節點0跳鄰居集合中的起始節點為節點y,全節點0跳鄰居集合的目的節點為節點z,則由于兩個節點對中均有節點y,則兩個節點可以連接為一個節點對,連接后的節點對可以表示為(節點y,(節點x,節點z))。
需要說明的是,在本發明實施例中,可以連接為一個節點對的兩個節點對分別來自第一節點的k跳鄰居集合、全節點0跳鄰居集合,并且兩個節點對中,第一節點的k跳鄰居集合的節點對的k跳目的節點和全節點0跳鄰居集合的節點對的起始節點相同。
在本發明的一些實施例中,步驟a執行之后,本發明實施例中步驟102所述的迭代計算過程還可以包括:步驟a+1,其中,
步驟a+1,對第一節點的k跳鄰居集合中的節點對進行反轉,得到第一節點的反轉指定節點k跳鄰居集合,第一節點的反轉指定節點k跳鄰居集合包括:反轉后的k跳起始節點和反轉后的k跳目的節點構成的節點對,反轉后的k跳起始節點為第一節點的k跳鄰居集合中的k跳目的節點,反轉后的k跳目的節點為第一節點的k跳鄰居集合中的k跳起始節點。
具體的,在步驟a中獲取到第一節點的k跳鄰居集合之后,第一節點的k跳鄰居集合包括:k跳起始節點和k跳目的節點構成的節點對,則對第一節點的k跳鄰居集合進行反轉指的是對第一節點的k跳鄰居集合中的起始節點和目的節點進行對調,則第一節點的反轉指定節點k跳鄰居集合包括:反轉后的k跳起始節點和反轉后的k跳目的節點構成的節點對。通過步驟a+1的反轉步驟,可以使得第一節點的k跳鄰居集合中的起始節點和目的節點進行對 調,方便于后續步驟的兩個節點對的連接操作。
在本發明實施例的迭代計算過程中執行步驟a+1的情況下,上述的步驟b,具體為:步驟b’,其中,
步驟b’、將第一節點的反轉指定節點k跳鄰居集合中反轉后的k跳起始節點,和全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到第一節點的k+1跳鄰居集合。
通過前述步驟a和步驟a+1的描述可知,可以獲取到第一節點的反轉指定節點k跳鄰居集合,則可以從第一節點的反轉指定節點k跳鄰居集合和全節點0跳鄰居集合中選擇兩個集合采用相同起始節點的兩個節點對,從而便于步驟b’中兩個節點對的連接操作,其中,步驟b’中的連接操作的方式與前述步驟b中所述的連接操作相類似,此處不再贅述。
在本發明的一些實施例中,前述的步驟b,具體包括:步驟b”和步驟b”’,其中,
步驟b”、從全節點0跳鄰居集合中篩選出所有起始節點與第一節點的k跳鄰居集合中k跳目的節點相同的節點對,篩選節點對完成之后得到第一節點的篩選指定節點k跳鄰居集合;
步驟b”’、將第一節點的k跳鄰居集合中k跳目的節點,和第一節點的篩選指定節點k跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到第一節點的k+1跳鄰居集合。
其中,步驟b的一種可實現方式是通過步驟b”和步驟b”’來完成。步驟b”中首先對全節點0跳鄰居集合進行篩選,從而可以得到第一節點的篩選指定節點k跳鄰居集合,通過步驟b”的篩選操作,可以節省后續步驟中的連接操作的數據量,從而可以有效提高節點對的連接效率。在步驟b”中,篩選出全節點0跳鄰居集合中以第一節點的k跳鄰居集合中k跳目的節點作為起始節點的節點對,全節點0跳鄰居集合中起始節點不是上述k跳目的節點的節點對與本次的迭代計算過程無關,因此可以在根據第一節點的k跳鄰居集合對全節點0跳鄰居集合進行過濾,減少步驟b”’中的連接操作的計算量。
進一步的,在本發明的一些實施例中,在執行步驟b”和步驟b”’之前,步驟b還可以包括:步驟b””,其中,
步驟b””、判斷k+1是否等于1,或判斷第一節點的k跳鄰居集合中包括的節點對個數是否滿足預置的節點對條件;
若k+1等于1,則執行步驟b”和步驟b”’;
若第一節點的k跳鄰居集合中包括的節點對個數滿足節點對條件,則執行步驟b”和步驟b”’。
例如,若k=0,則說明步驟b”和步驟b”’中是0跳的迭代計算,此時可以執行步驟b”和步驟b”’,通過根據第一節點的k跳鄰居集合對全節點0跳鄰居集合進行過濾,減少步驟b”’中的連接操作的計算量。例如,還可以根據第一節點的k跳鄰居集合中包括的節點對個數來判斷是否執行步驟b”和步驟b”’,具體的,可以設置節點對條件,例如節點對條件為小于節點對個數閾值,或者小于全節點0跳鄰居集合包括的節點對個數的某個比例值,當設置完成節點對條件設置后,可以先判斷第一節點的k跳鄰居集合中包括的節點對個數是否滿足預置的節點對條件,在條件滿足時執行步驟b”和步驟b”’。
需要說明的是,在本發明實施例中,為了保證迭代計算過程的計算效率,可以采用并行的計算方式,若第一節點存在至少兩個的指定節點k+1跳鄰居集合時,迭代計算過程是并行的計算第一節點的各個指定節點k+1跳鄰居集合。其中,當本發明實施例中拓撲網絡的規模很大時,可以對該拓撲網絡中劃分為多個塊圖,在每一個塊圖中都可以執行步驟a和步驟b,則在每一個塊圖中都可以得到第一節點的一個指定節點k+1跳鄰居集合,則第一節點存在至少兩個的指定節點k+1跳鄰居集合,在這種情況下,可以對每個指定節點k+1跳鄰居集合并行的執行迭代計算過程,從而可以進一步的提高多跳鄰居節點的獲取效率。
103、在計算出第一節點的k+1跳鄰居集合之后,當第一節點的k+1跳鄰居集合中的跳數k+1等于kmax時,將第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出。
在本發明實施例中,步驟102中的包括的步驟a和步驟b只描述了第k跳的迭代計算過程,則隨著k取值的依次遞增,可以計算出多輪的迭代計算過程,在每完成一輪的迭代計算之后,都需要判斷是否滿足跳數k+1等于kmax的條件,若滿足該條件,則需要執行步驟103,否則更新k的取值繼續執行步 驟a和步驟b。在通過步驟a和步驟b的迭代計算之后,當第一節點的k+1跳鄰居集合中的跳數k+1等于kmax時,將第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出。其中,k+1跳鄰居集合對應的k+1跳路徑,指的是在k+1跳鄰居集合中的節點對包括的所有節點的之間的連接關系路徑,舉例說明,若節點對可以示為(節點y,(節點x,節點z)),則可以輸出的2跳路徑為:節點x->2節點y->節點z。在第一節點的k+1跳鄰居集合中包含了第一節點的多跳鄰居節點,用戶可以通過第一節點的k+1跳鄰居集合確定出第一節點的多跳鄰居節點。
由前述內容對本發明實施例的描述可知,本發明實施例中,步驟a和步驟b中通過迭代計算實現節點對的連接,從而可以將第一節點的多跳鄰居節點增加到連接后的節點對中,在達到跳數閾值時可以輸出第一節點的多跳鄰居節點,本發明實施例中,只需要從拓撲網絡中提取到全節點0跳鄰居集合進行后續的迭代計算過程,而不需要每次迭代過程中都在拓撲網絡中發送消息,因此本發明實施例提供的方法可以適用于查詢大圖的多跳鄰居節點,不會造成網絡的阻塞。
在本發明的一些實施例中,本發明實施例提供的多跳鄰居節點的獲取方法,還可以包括如下步驟:
當第一節點的k+1跳鄰居集合中的跳數k+1小于kmax時,按照步驟a和步驟b的迭代計算方式計算第一節點的k+2跳鄰居集合;
在計算出第一節點的k+2跳鄰居集合之后,當第一節點的k+2跳鄰居集合中的跳數k+2等于kmax時,將第一節點的k+2跳鄰居集合以及對應的k+1跳路徑輸出。
其中,步驟103中描述了k+1等于kmax的情況下輸出第一節點的k+1跳鄰居集合,而當跳數k+1小于kmax時,還可以上述的步驟,即需要再次執行步驟a和步驟b,將步驟a和步驟b的輸入條件更新為第一節點的k+1跳鄰居集合,則步驟a和步驟b執行完成之后可以輸出第一節點的k+2跳鄰居集合。
需要說明的是,在本發明的一些實施例中,若k+2還小于kmax時,仍需要再次執行步驟a和步驟b,直至跳數達到kmax時,將第一節點的kmax跳鄰居集合以及對應的k+1跳路徑輸出。
通過前述對本發明實施例的舉例說明可知,首先根據拓撲網絡中所有節點之間的連邊關系得到全節點0跳鄰居集合,當第一節點作為指定節點時,從第一節點的k跳鄰居集合通過本發明實施例中的迭代計算過程可以計算出第一節點的k+1跳鄰居集合,由于全節點0跳鄰居集合中記錄有所有節點作為起始節點時對應的目的節點,步驟b中第一節點的k跳鄰居集合和全節點0跳鄰居集合中滿足k跳目的節點和全節點0跳鄰居集合中起始節點相同時的兩個節點對連接為一個節點對,第一節點的k+1跳鄰居集合相對于第一節點的k跳鄰居集合增加了具有連邊關系的節點,當跳數k+1等于預置的kmax時,將第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出,從第一節點的kmax跳鄰居集合可以獲取到第一節點的多跳鄰居節點。本發明實施例中通過節點對之間的連接操作可以完成多跳鄰居節點的計算,而不需要在拓撲網絡中發送消息,從而可以提升在大圖中查詢多跳鄰居節點的計算效率。
為便于更好的理解和實施本發明實施例的上述方案,下面舉例相應的應用場景來進行具體說明。
請參閱如圖2所示,本發明實施例提供的另一種多跳鄰居節點的獲取方法的流程方框示意圖。本發明實施例通過Join操作完成節點對的連接,并盡量減少Join操作的數據量來實現在大圖中高效的查詢多跳鄰居節點。
圖2中給出了本發明實施例的一種應用場景示意圖,首先計算并存儲每個節點的0-跳(英文名稱:hop)鄰居節點,得到全節點0跳鄰居集合。并將其表示為鍵值對的存儲。從起始節點到k-hop鄰居節點路徑的計算通過一系列的鍵值關聯實現。如圖3所示,為本發明實施例提供的節點對的連接過程的一種應用場景示意圖。例如,要獲得1->2->3這樣一條路徑,是通過(1,2)鍵值交替為(2,1),(2,1)關聯(2,3)得到(2,(1,3)),最后可拼裝出多跳鄰居節點為1->2->3。接下來進行詳細舉例說明,圖2主要包括如下步驟:
S1、根據原始的拓撲網絡圖的邊構造,將其映射為key-value對集合,即只要存在一條邊,則形成該邊的兩個節點就構造為一個key-value節點對,圖3中的key-value對,例如(id1,id2),所有key-value對的集合構成了全節點0跳鄰居節點集合P,P包括:(id1,id2)節點對、(id1,id3)節點對、(id1,id4)節點對、(id2,id5)節點對、(id3,id6)節點對、(id4,id7)節點對、(id5,id8) 節點對。
S2、從集合P中篩選出key為指定節點的key-value對集合,如圖3中的P1,以id1為第一節點為例,P1包括:(id1,id2)節點對、(id1,id3)節點對、(id1,id4)節點對。
S3、將P1進行key和value的反轉,獲得集合P1',集合P1'為集合P的反轉,集合P1'包括:(id2,id1)節點對、(id3,id1)節點對、(id4,id1)節點對。
S4、從集合P中篩選出所有key不等于指定節點的key-value對的集合,如圖3中的集合P2,集合P2包括:(id2,id5)節點對、(id3,id6)節點對、(id4,id7)節點對、(id5,id8)節點對。
S5、將P1'和P2進行連接操作,獲得1跳鄰居節點集合,如圖3中的N2,其中,可連接的條件為P1'.key=P2.key,其中,N2包括:(id2,(id1,id5))節點對、(id3,(id1,id6))節點對、(id4,(id1,id7))節點對。
S6、如果跳數已經達到跳數閾值,則將N2轉換輸出節點id1的多跳鄰居節點,反之進行S7。
S7、令P1=N2,迭代執行步驟S3-S6。
例如,如圖3中,迭代執行步驟S3-S6時,集合N2反轉,得到集合N2',集合N2'包括:(id5,(id1,id1))節點對、(id6,(id1,id3))節點對、(id7,(id1,id4))節點對。接下來對集合N2'和集合P2進行合并,可以得到集合N3,該集合N3包括:(id5,((id1,id2),id8))。若此時跳數已經達到跳數閾值,則可以將N3轉換為1->2->5->8,輸出該路徑作為節點id1的多跳鄰居節點。
接下來對本發明另一實施例進行舉例說明,請參閱如圖4所示,為本發明實施例提供的全節點0跳鄰居集合的過濾過程示意圖。其中,可以對步驟S4進一步的精確過濾,而且隨著跳數增大,上述實施例中的P1增大到一定程度后,不再執行過濾操作,改為直接使用前述實施例中的P作為P2進行后續的計算。如圖4所示,精確過濾的具體步驟如下:
S4-1、如果是第1跳,或者前一輪迭代計算出的N2包括的節點對個數小于設定的閾值或N2包括的節點對個數與P包括的節點對個數小于設定的20%比例,則執行步驟S4-1-1直至S4-1-2,否則執行S4-2-1。
S4-1-1、計算出P1的目的節點的集合,即value的集合Pd;
S4-1-2、從集合P中篩選出所有起始節點存在于Pd的key-value節點對的集合P2。
S4-2-1、直接使用P作為P2,進行后續計算。
通過前述對本發明的舉例說明可知,由于本發明實施例中通過S1步驟將源拓撲網絡圖的邊映射為了全節點的0跳鄰居集合,并通過0跳鄰居節點的連接操作來獲得多跳鄰居節點,本發明實施例中不需要進行消息傳遞,減少了網絡通信量。由于本發明實施例中可以對連接的key-value節點對根據上一跳鄰居集合進行精確過濾,減少連接操作的數據量,可以有效的提高連接效率。
需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明并不受所描述的動作順序的限制,因為依據本發明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例,所涉及的動作和模塊并不一定是本發明所必須的。
為便于更好的實施本發明實施例的上述方案,下面還提供用于實施上述方案的相關裝置。
請參閱圖5所示,本發明實施例提供的一種多跳鄰居節點的獲取裝置500,可以包括:獲取模塊501、迭代計算模塊502和輸出模塊503,其中,
所述獲取模塊501,用于獲取拓撲網絡中每個節點的0跳鄰居,得到全節點0跳鄰居集合,所述全節點0跳鄰居集合包括:每個起始節點和對應的目的節點構成的節點對,其中,所述起始節點指的是所述拓撲網絡中的任意一個節點,所述目的節點指的是在所述拓撲網絡中與所述起始節點存在連邊關系的節點;
所述迭代計算模塊502,用于當第一節點作為指定節點時,通過如下的迭代計算過程計算所述第一節點的k+1跳鄰居集合,所述k為大于等于0且小于預置的跳數閾值kmax的自然數,所述迭代計算過程包括如下的步驟a和步驟b,其中,
步驟a、獲取所述第一節點的k跳鄰居集合,所述第一節點的k跳鄰居集合包括:k跳起始節點和k跳目的節點構成的節點對;
步驟b、將所述第一節點的k跳鄰居集合中k跳目的節點,和所述全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合,其中,所述兩個節點對分別來自所述第一節點的k跳鄰居集合、所述全節點0跳鄰居集合;
所述輸出模塊503,用于在計算出所述第一節點的k+1跳鄰居集合之后,當所述第一節點的k+1跳鄰居集合中的跳數k+1等于所述kmax時,將所述第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出。
在本發明的一些實施例中,所述迭代計算模塊502,還用于當所述第一節點的k+1跳鄰居集合中的跳數k+1小于所述kmax時,按照所述步驟a和步驟b的迭代計算方式計算所述第一節點的k+2跳鄰居集合;
所述輸出模塊503,還用于在計算出所述第一節點的k+2跳鄰居集合之后,當所述第一節點的k+2跳鄰居集合中的跳數k+2等于所述kmax時,將所述第一節點的k+2跳鄰居集合以及對應的k+1跳路徑輸出。
在本發明的一些實施例中,所述迭代計算模塊502,還用于所述步驟a執行之后,執行所述迭代計算過程還包括的步驟a+1,其中,
步驟a+1,對所述第一節點的k跳鄰居集合中的節點對進行反轉,得到所述第一節點的反轉指定節點k跳鄰居集合,所述第一節點的反轉指定節點k跳鄰居集合包括:反轉后的k跳起始節點和反轉后的k跳目的節點構成的節點對,所述反轉后的k跳起始節點為所述第一節點的k跳鄰居集合中的k跳目的節點,所述反轉后的k跳目的節點為所述第一節點的k跳鄰居集合中的k跳起始節點;
所述迭代計算模塊502,具體用于執行步驟b’,其中,
步驟b’、將所述第一節點的反轉指定節點k跳鄰居集合中反轉后的k跳起始節點,和所述全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合。
在本發明的一些實施例中,所述迭代計算模塊502,具體用于執行步驟b”和步驟b”’,其中,
步驟b”、從所述全節點0跳鄰居集合中篩選出所有起始節點與所述第一節點的k跳鄰居集合中k跳目的節點相同的節點對,篩選節點對完成之后得 到所述第一節點的篩選指定節點k跳鄰居集合;
步驟b”’、將所述第一節點的k跳鄰居集合中k跳目的節點,和所述第一節點的篩選指定節點k跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合。
在本發明的一些實施例中,所述迭代計算模塊502,具體用于執行步驟b””,其中,
步驟b””、判斷所述k+1是否等于1,或判斷所述第一節點的k跳鄰居集合中包括的節點對個數是否滿足預置的節點對條件;
若所述k+1等于1,則執行步驟b”和步驟b”’;
若所述第一節點的k跳鄰居集合中包括的節點對個數滿足所述節點對條件,則執行步驟b”和步驟b”’。
在本發明的一些實施例中,若所述第一節點存在至少兩個的指定節點k+1跳鄰居集合時,所述迭代計算模塊502,具體用于并行的計算所述第一節點的各個指定節點k+1跳鄰居集合。
通過前述對本發明實施例的舉例說明可知,首先根據拓撲網絡中所有節點之間的連邊關系得到全節點0跳鄰居集合,當第一節點作為指定節點時,從第一節點的k跳鄰居集合通過本發明實施例中的迭代計算過程可以計算出第一節點的k+1跳鄰居集合,由于全節點0跳鄰居集合中記錄有所有節點作為起始節點時對應的目的節點,步驟b中第一節點的k跳鄰居集合和全節點0跳鄰居集合中滿足k跳目的節點和全節點0跳鄰居集合中起始節點相同時的兩個節點對連接為一個節點對,第一節點的k+1跳鄰居集合相對于第一節點的k跳鄰居集合增加了具有連邊關系的節點,當跳數k+1等于預置的kmax時,將第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出,從第一節點的kmax跳鄰居集合可以獲取到第一節點的多跳鄰居節點。本發明實施例中通過節點對之間的連接操作可以完成多跳鄰居節點的計算,而不需要在拓撲網絡中發送消息,從而可以提升在大圖中查詢多跳鄰居節點的計算效率。
需要說明的是,上述裝置各模塊/單元之間的信息交互、執行過程等內容,由于與本發明方法實施例基于同一構思,其帶來的技術效果與本發明方法實施例相同,具體內容可參見本發明前述所示的方法實施例中的敘述,此處不 再贅述。
本發明實施例還提供一種計算機存儲介質,其中,該計算機存儲介質存儲有程序,該程序執行包括上述方法實施例中記載的部分或全部步驟。
接下來介紹本發明實施例提供的另一種多跳鄰居節點的獲取裝置,請參閱圖6所示,多跳鄰居節點的獲取裝置600包括:
輸入裝置601、輸出裝置602、處理器603和存儲器604(其中多跳鄰居節點的獲取裝置600中的處理器603的數量可以一個或多個,圖6中以一個處理器為例)。在本發明的一些實施例中,輸入裝置601、輸出裝置602、處理器603和存儲器604可通過總線或其它方式連接,其中,圖6中以通過總線連接為例。
其中,處理器603,用于執行前述實施例中的多跳連接節點的獲取方法。具體的,處理器603,用于執行如下步驟:
獲取拓撲網絡中每個節點的0跳鄰居,得到全節點0跳鄰居集合,所述全節點0跳鄰居集合包括:每個起始節點和對應的目的節點構成的節點對,其中,所述起始節點指的是所述拓撲網絡中的任意一個節點,所述目的節點指的是在所述拓撲網絡中與所述起始節點存在連邊關系的節點;
當第一節點作為指定節點時,通過如下的迭代計算過程計算所述第一節點的k+1跳鄰居集合,所述k為大于等于0且小于預置的跳數閾值kmax的自然數,所述迭代計算過程包括如下的步驟a和步驟b,其中,
步驟a、獲取所述第一節點的k跳鄰居集合,所述第一節點的k跳鄰居集合包括:k跳起始節點和k跳目的節點構成的節點對;
步驟b、將所述第一節點的k跳鄰居集合中k跳目的節點,和所述全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合,其中,所述兩個節點對分別來自所述第一節點的k跳鄰居集合、所述全節點0跳鄰居集合;
在計算出所述第一節點的k+1跳鄰居集合之后,當所述第一節點的k+1跳鄰居集合中的跳數k+1等于所述kmax時,將所述第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出。
在本發明的一些實施例中,處理器603,還用于執行如下步驟:
當所述第一節點的k+1跳鄰居集合中的跳數k+1小于所述kmax時,按照所述步驟a和步驟b的迭代計算方式計算所述第一節點的k+2跳鄰居集合;
在計算出所述第一節點的k+2跳鄰居集合之后,當所述第一節點的k+2跳鄰居集合中的跳數k+2等于所述kmax時,將所述第一節點的k+2跳鄰居集合以及對應的k+1跳路徑輸出。
在本發明的一些實施例中,處理器603,還用于執行所述步驟a執行之后,所述迭代計算過程還包括:步驟a+1,其中,
步驟a+1,對所述第一節點的k跳鄰居集合中的節點對進行反轉,得到所述第一節點的反轉指定節點k跳鄰居集合,所述第一節點的反轉指定節點k跳鄰居集合包括:反轉后的k跳起始節點和反轉后的k跳目的節點構成的節點對,所述反轉后的k跳起始節點為所述第一節點的k跳鄰居集合中的k跳目的節點,所述反轉后的k跳目的節點為所述第一節點的k跳鄰居集合中的k跳起始節點;
所述步驟b,具體為:步驟b’,其中,
步驟b’、將所述第一節點的反轉指定節點k跳鄰居集合中反轉后的k跳起始節點,和所述全節點0跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合。
在本發明的一些實施例中,處理器603,具體用于執行如下步驟:步驟b”和步驟b”’,其中,
步驟b”、從所述全節點0跳鄰居集合中篩選出所有起始節點與所述第一節點的k跳鄰居集合中k跳目的節點相同的節點對,篩選節點對完成之后得到所述第一節點的篩選指定節點k跳鄰居集合;
步驟b”’、將所述第一節點的k跳鄰居集合中k跳目的節點,和所述第一節點的篩選指定節點k跳鄰居集合中起始節點相同的兩個節點對連接為一個節點對,完成節點對的連接后得到所述第一節點的k+1跳鄰居集合。
進一步的,在本發明的一些實施例中,處理器603,還用于執行如下步驟:步驟b””,其中,
步驟b””、判斷所述k+1是否等于1,或判斷所述第一節點的k跳鄰居集合中包括的節點對個數是否滿足預置的節點對條件;
若所述k+1等于1,則執行步驟b”和步驟b”’;
若所述第一節點的k跳鄰居集合中包括的節點對個數滿足所述節點對條件,則執行步驟b”和步驟b”’。
在本發明的一些實施例中,若所述第一節點存在至少兩個的指定節點k+1跳鄰居集合時,處理器603,具體用于執行的所述迭代計算過程是并行的計算所述第一節點的各個指定節點k+1跳鄰居集合。
通過前述對本發明實施例的舉例說明可知,首先根據拓撲網絡中所有節點之間的連邊關系得到全節點0跳鄰居集合,當第一節點作為指定節點時,從第一節點的k跳鄰居集合通過本發明實施例中的迭代計算過程可以計算出第一節點的k+1跳鄰居集合,由于全節點0跳鄰居集合中記錄有所有節點作為起始節點時對應的目的節點,步驟b中第一節點的k跳鄰居集合和全節點0跳鄰居集合中滿足k跳目的節點和全節點0跳鄰居集合中起始節點相同時的兩個節點對連接為一個節點對,第一節點的k+1跳鄰居集合相對于第一節點的k跳鄰居集合增加了具有連邊關系的節點,當跳數k+1等于預置的kmax時,將第一節點的k+1跳鄰居集合以及對應的k+1跳路徑輸出,從第一節點的kmax跳鄰居集合可以獲取到第一節點的多跳鄰居節點。本發明實施例中通過節點對之間的連接操作可以完成多跳鄰居節點的計算,而不需要在拓撲網絡中發送消息,從而可以提升在大圖中查詢多跳鄰居節點的計算效率。
另外需說明的是,以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部模塊來實現本實施例方案的目的。另外,本發明提供的裝置實施例附圖中,模塊之間的連接關系表示它們之間具有通信連接,具體可以實現為一條或多條通信總線或信號線。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解并實施。
通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到本發明可借助軟件加必需的通用硬件的方式來實現,當然也可以通過專用硬件包括專用集成電路、專用CPU、專用存儲器、專用元器件等來實現。一般情 況下,凡由計算機程序完成的功能都可以很容易地用相應的硬件來實現,而且,用來實現同一功能的具體硬件結構也可以是多種多樣的,例如模擬電路、數字電路或專用電路等。但是,對本發明而言更多情況下軟件程序實現是更佳的實施方式。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在可讀取的存儲介質中,如計算機的軟盤、U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述的方法。
綜上所述,以上實施例僅用以說明本發明的技術方案,而非對其限制;盡管參照上述實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對上述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發明各實施例技術方案的精神和范圍。