簡體   English   中英

功能圖

[英]Functional Graphs

我一直在嘗試制作功能圖。 我正在制作的圖形沒有循環,因此它有點像一棵樹,其中某些節點可以有多個父節點。

問題是在更新時。 用樹的通常方法是遍歷到要更新的節點,此方法的每個步驟都創建一個新節點,該節點將更改為指向新的子節點,直到到達要修改的實際節點為止,然后才是實際數據改變了。

當某些節點有多個父節點時,采用這種方法會導致中斷,因為您最終基本上會“拆分”該節點。 在兩個父節點之間共享的節點變為兩個節點,每個節點都有一個父節點,一個節點(您遍歷的到達該節點的路徑)具有新值,另一個父節點保留有舊值的孩子。

因此,我改為嘗試將父節點存儲在每個節點內,即節點知道其父節點是誰。

這可行,但是有問題。 如果更新節點,則必須更新其父節點。 但是,對於其每個父節點,我不僅需要更新其父節點,還需要更新其子節點,因為它們的子節點存儲了其父節點,並且該父節點現在已更改。

因此,要更新一個節點值,我必須更新圖中的每個節點。

我的另一個想法是,不是在每個節點中存儲父節點,而是在每個節點中存儲到父節點的“路徑”。 這樣,我不必更新父級的子級,因為父級的“路徑”沒有更改(即使節點本身也已更改)。

但是也許有更好的方法來構建功能圖? 有任何想法嗎? 我不介意它是否不能處理帶有循環的圖形。 我正在用Haskell進行編碼,但是非編程語言的描述也可以。

因此,要更新節點值,我必須更新整個圖中的每個節點。

可悲的是,您必須接受這一事實。 這基本上就是為什么您不能實現有效的功能圖的原因。 所有允許在不遍歷整個圖形的情況下進行更新的解決方案都基於表和索引的模型作為參考。 想法如下:將所有節點存儲在索引表和邊緣中,而不是直接引用存儲索引的節點。 有一些變體,它們具有不同的好處,但是基本上就是整個想法。

但是,對以上內容進行更深入的思考,無非就是對內存指針實際作用的模擬。 因此,基本上,您最終會重新實現低級的東西,同時又會大大降低性能。 因此,說實話,我建議考慮對可變圖進行分割,這樣不會共享任何這些問題。

我一直在研究graph-db項目一段時間,該項目尚未發布。 但是,我發布了一些代碼。 我認為這種可變的圖形實現可能對您有用,可以將其作為想法的來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM