本文介紹了Gremlin:如何有效地在有向無(wú)環(huán)圖中找到根?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我正在嘗試編寫(xiě)一個(gè)小精靈查詢來(lái)有效地解決匯流河流問(wèn)題(因?yàn)闆](méi)有更好的名稱(chēng),圖論中可能有一個(gè)更好的名稱(chēng)?)。下面是一個(gè)例子:
任務(wù):給定一個(gè)根節(jié)點(diǎn),交付一個(gè)映射,其中包含下游節(jié)點(diǎn)的ID作為鍵,將它們的所有河根ID(即從當(dāng)前節(jié)點(diǎn)再次向上移動(dòng)所有路徑到達(dá)的末端節(jié)點(diǎn))作為值。
例如,在上面的示例圖中,對(duì)于根節(jié)點(diǎn)0,結(jié)果應(yīng)該是:
{
"0": ["0"],
"1": ["0", "4"],
"2": ["0", "5", "8"],
"3": ["0", "4", "5", "8"],
"6": ["0", "4"]
}
我在這里特別擔(dān)心多次行走的路徑。例如,在計(jì)算了";2";的根之后,我想重復(fù)使用該結(jié)果來(lái)計(jì)算其下游節(jié)點(diǎn)";3";的根。
有什么線索可以用于大型有向無(wú)環(huán)圖嗎?
推薦答案
根據(jù)您的圖表,我們可以創(chuàng)建以下圖表。
g.addV('0').as('0').
addV('1').as('1').
addV('2').as('2').
addV('3').as('3').
addV('4').as('4').
addV('5').as('5').
addV('6').as('6').
addV('7').as('7').
addV('8').as('8').
addE('link').from('0').to('1').
addE('link').from('0').to('2').
addE('link').from('1').to('6').
addE('link').from('1').to('3').
addE('link').from('2').to('3').
addE('link').from('4').to('1').
addE('link').from('5').to('7').
addE('link').from('7').to('2').
addE('link').from('8').to('7').iterate()
下面的查詢從‘0’開(kāi)始,查找所有葉節(jié)點(diǎn),然后向后查找所有根。輸出不包括起始節(jié)點(diǎn)(‘0’),但如有必要,可以調(diào)整查詢以包括該節(jié)點(diǎn)。
gremlin> g.V().hasLabel('0').
......1> repeat(out()).emit().
......2> until(__.not(out())).dedup().
......3> group().
......4> by(label()).
......5> by(repeat(__.in('link')).
......6> until(__.not(__.in('link'))).
......7> label().dedup().
......8> fold())
==>[1:[0,4],2:[0,8,5],3:[0,8,4,5],6:[0,4]]
如果排序很重要,則可以更新查詢以對(duì)列表進(jìn)行排序。
更新
添加一個(gè)額外的示例,該示例還將”0″作為關(guān)鍵字包含在結(jié)果中。
gremlin> g.V().hasLabel('0').
......1> emit().repeat(out()).
......2> until(__.not(out())).dedup().
......3> group().
......4> by(label()).
......5> by(coalesce(
......6> repeat(__.in('link')).
......7> until(__.not(__.in('link'))).
......8> label().dedup().
......9> fold()))
==>[0:[],1:[0,4],2:[0,5,8],3:[0,4,5,8],6:[0,4]]
這篇關(guān)于Gremlin:如何有效地在有向無(wú)環(huán)圖中找到根?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,






