erlang 數據結構-- 有向圖

今天是有向圖

1. 涉及到圖的有兩個module, digraph.erl 和 digraph_utils.erl

digraph.erl: 對邊, 節點,路徑等的操作
digraph_utils: 關於 遍歷, 環和樹的測試, 和找鄰居
具體的函數,等用到的時候慢慢更新吧。

2. 應用時踩的坑

之前在寫好友系統(單向好友)的時候,決定採用一種新的想法。因爲單向好友,關注等,就像是有向圖, 又有向圖本身的實現不能滿足策劃的想法, 所以就根據有向圖的寫法, 自己寫了一份。 當然,這樣做後來打臉, 主要是要把所有的好友關係都放到內存中, 內存確實消耗大呀。。。

3. 有向圖的實現

用了三個ets來記錄,
ets_vertices: 記錄點的信息
ets_edges: 記錄邊的信息
ets_neighbours: 記錄邊和點的信息。 當加入一個邊的時候, 除了向ets edges 加入邊信息之外, 還向ets neighbours 插入 [{{out, V1}, E}, {{in, V2}, E}]

4. note: 在多個ets同時操作的時候需要注意順序問題,比如 siyao Erlang 程序引發共享內存 bug 的一個例子

先這樣, 以後有新想法,再更新

發佈了47 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章