union-find

    3熱度

    3回答

    我來自一個命令性的背景,並試圖實現一個簡單的不相交集(「union-find」)數據結構,以獲得Haskell中創建和修改(持久性)數據結構的一些練習。目標是要有一個簡單的實現,但我也關心效率,我的問題與此有關。 首先,我創建了按職級與工會不相交集森林實施和通過定義一個「點」數據類型開始: data Point = Point { _value :: Int , _parent

    0熱度

    1回答

    其對天真的合併 - 查找使用不相交的集合鏈表表示算法: Find_Set(x)的操作返回一個指向包含元素x的一組代表因爲包含x的節點有一個直接指向x的代表的指針。但在這之前,我們需要在所有不相交的集合中找到包含元素x的特定節點,所以這個搜索不是O( 1)。我不明白Find_set(x)是O(1)(如書中給出的),當我們不知道包含x的節點屬於哪個不相交集時。

    3熱度

    1回答

    在我嘗試滾動自己的優化看起來有些複雜之前,我正在尋找Scala中的union-find或disjoint set數據結構的現有實現。 我的意思是this類的東西 - 其中兩個操作union和find進行了優化。 有人知道任何東西存在嗎?我顯然嘗試了Google搜索。

    1熱度

    1回答

    我一直在研究在coursera上使用類的算法。在最初的講座之一中,正在討論Quick Union Weighted。我得到它所做的,並且使用他們的代碼對它進行了測試,併爲它編寫了一個小測試。 一切都很清楚,但有一點:當您創建兩個對象的聯合時,它會將具有最小樹的對象添加到較大的對象。同時,較大樹的大小將隨着較小樹的大小而增加,該大小用於確定哪棵樹更大。由於數組對於每個索引都以值1開始(每個節點本身基

    0熱度

    1回答

    我必須使用聯合尋找算法來解決旅行商問題。除了我剛剛發現的一個問題外,我完成了很多工作。當它處理每條邊時,它將檢查一個循環,這是通過整個父數組來完成的。問題是,當它到達我需要添加以完成問題的最後一條邊時,由於它在技術上是一個循環,因此它不會添加邊,因此路徑無法完成。我如何區分一個無用的循環和循環來表明我們已經完成了? 這裏是我到目前爲止的代碼 private int[] parent; //pare

    1熱度

    1回答

    我找的不相交集的圖形G數,然後我刪除圖形G的一些頂點,使圖形G',我想找到G'的獨立集合的數量不相交集的數目,沒有像G那樣對G'做同樣的事情嗎?

    2熱度

    1回答

    練習2.2在Warren's Abstract Machine: A Tutorial Reconstruction 詢問f的術語表示(X,G(X,A))和f(B,Y),然後進行統一在這些術語的地址上(分別表示爲a1和a2)。 我已經構造堆表示的條件,並有如下幾點: f(X, g(X, a)): 0 STR 1 1 a/0 2 STR 3 3 g/2 4 REF 4 5

    1熱度

    3回答

    我有一些比較昂貴的結構。 (它們實際上是具有不同分支的樹。)爲它們計算哈希值也很昂貴。 我想爲eq運算符創建一個裝飾器,它將緩存一些結果以加快速度。這有點類似於記憶。 特別是,我想要這樣的事情發生。假設我們有3個對象:A,B和C. 我們比較A和B. eq運算符被調用,返回True,結果被存儲。我們比較B和C. eq運算符像以前一樣被調用。現在我們將A和C進行比較。現在算法應該檢測到A等於B,B等於

    4熱度

    3回答

    我有一個問題(不再與stackoverflow(hehe))當試圖實現UnionFind結構算法與路徑壓縮時找到算法。 我有整數的標準數組,數組可以變得相當大 - >它工作正常,直到60.000.000元素。 我的聯盟功能如下: public void unite(int p, int q) { if(p >= 0 && p < id.length && q >= 0 && q < id

    3熱度

    2回答

    如果我在最後一步(7)中正確使用規則,有人可以與我聯繫嗎? UPDATE: 的括號內的數字是元件的數量(重量()?),每個組參與在本聯盟。大寫字母是集合的名稱。 據我瞭解:我們用作排名元素的數量?這讓人困惑,每個人都在使用不同的術語來表達同樣的東西。 我們有聯盟: U(1,2,A) U(3,4,B) U(A,B,C) U(5 ,6,d) U(7,8,E) U(d,C,F) U(E,F,G)