」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 不相交集圖學習

不相交集圖學習

發佈於2024-09-01
瀏覽:792

Disjoint Set Graph Learning

不相交集合是 Kruskal 最小生成樹中使用的資料結構。
這種資料結構允許我們建立兩個或多個節點的並集。
它讓我們確定兩個節點是否屬於 not 圖的同一組成部分。
時間複雜度為 O(4alpha)(如果我們使用路徑壓縮,否則它將是對數),這是已證明的恆定時間複雜度。

更多資訊請參閱

class Main{
    int parent[]  = new int[100000];
    int rank[] = new int[100000];
    void makeSet(){
        for(int i=1;i6->4->3 , here 3 is the parent of this union, so in order to get the parent of 7 which is 3 we can path compress it. like 7->3,6->3,4->3 etc.
    }
    void union(int u, int v){
        u = findParent(u);
        v = findParent(v);
        if(rank[u]  rank[v]) parent[v] = u;
        else parent[u] =v; // or parent[v] = u;
        // here u and v had the same rank
        //and now v became parent of u hence its rank will increase
        rank[v]  ;
    }

    public static void main(String args[]) throws Exception{
        Main m = new Main();
        //if we where given no of nodes as n
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        while(n>0){
            int u = n--;
            int v = n--;
            m.union(u,v);// this will create union of n nodes
        }
        // if 2 and 3 belong to the same component or not find out
        if(findParent(2)! = findParent(3)) System.out.println("Different component");
        else System.out.println("Same component");
    }
}
版本聲明 本文轉載於:https://dev.to/prashantrmishra/disjoint-set-graph-learning-1f4n?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何調整圖像大小以適合瀏覽器視窗而不變形?
    如何調整圖像大小以適合瀏覽器視窗而不變形?
    調整圖片大小以適應瀏覽器視窗而不失真調整圖片大小以適應瀏覽器視窗是一項看似簡單的解決方案的常見任務。然而,遵守特定要求(例如保留比例和避免裁剪)可能會帶來挑戰。 沒有滾動條和 Javascript 的解決方案(僅限 CSS)<html> <head> <style&...
    程式設計 發佈於2024-11-06
  • 物件導向 - Java 中的方法
    物件導向 - Java 中的方法
    在Java中的物件導向程式設計中,方法在定義類別和物件的行為中起著至關重要的作用。它們允許您執行操作、操縱資料以及與其他物件互動。它們允許您執行操作、操縱資料以及與其他物件互動。在本文中,我們將探討 Java 中的方法、它們的特性以及如何有效地使用它們。 什麼是方法? 方法是類別中...
    程式設計 發佈於2024-11-06
  • 如何使用 MAMP 修復 Mac 上 Laravel 遷移中的「沒有這樣的檔案或目錄」錯誤?
    如何使用 MAMP 修復 Mac 上 Laravel 遷移中的「沒有這樣的檔案或目錄」錯誤?
    解決Mac 上Laravel 遷移中的「沒有這樣的文件或目錄」錯誤簡介: ]當嘗試在Mac 上的Laravel 專案中執行「php artisan migrate」指令時,使用者經常會遇到找不到檔案或目錄的錯誤。這個令人沮喪的問題可能會阻礙遷移過程並阻止開發人員在專案中取得進展。在本文中,我們將深入...
    程式設計 發佈於2024-11-06
  • SOLID 原則使用一些有趣的類比與車輛範例
    SOLID 原則使用一些有趣的類比與車輛範例
    SOLID 是電腦程式設計中五個良好原則(規則)的縮寫。 SOLID 允許程式設計師編寫更易於理解和稍後更改的程式碼。 SOLID 通常與使用物件導向設計的系統一起使用。 讓我們使用車輛範例來解釋 SOLID 原理。想像一下,我們正在設計一個系統來管理不同類型的車輛,例如汽車和...
    程式設計 發佈於2024-11-06
  • 如何從另一個非同步函數中的非同步函數返回解析值?
    如何從另一個非同步函數中的非同步函數返回解析值?
    如何從非同步函數傳回一個值? 在提供的程式碼中,init()方法傳回一個Promise,但getPostById() 方法嘗試直接存取 Promise 傳回的值。為了解決這個問題,需要修改 init() 方法,使其在 Promise 解析後傳回 getPostById() 的值。 更新後的程式碼如下...
    程式設計 發佈於2024-11-06
  • 了解如何使用 React 建立多人國際象棋遊戲
    了解如何使用 React 建立多人國際象棋遊戲
    Hello and welcome! ?? Today I bring a tutorial to guide you through building a multiplayer chess game using SuperViz. Multiplayer games require real-t...
    程式設計 發佈於2024-11-06
  • 如何使用 JavaScript 正規表示式驗證 DD/MM/YYYY 格式的日期?
    如何使用 JavaScript 正規表示式驗證 DD/MM/YYYY 格式的日期?
    使用JavaScript 正規表示式驗證DD/MM/YYYY 格式的日期驗證日期是程式設計中的常見任務,並且能夠確保日期採用特定格式至關重要。在 JavaScript 中,正規表示式提供了執行此類驗證的強大工具。 考慮用於驗證YYYY-MM-DD 格式日期的正規表示式模式:/^\d{4}[\/\-]...
    程式設計 發佈於2024-11-06
  • JavaScript 中的節流與去抖:初學者指南
    JavaScript 中的節流與去抖:初學者指南
    使用 JavaScript 時,過多的事件觸發器可能會降低應用程式的速度。例如,使用者調整瀏覽器視窗大小或在搜尋列中輸入內容可能會導致事件在短時間內重複觸發,進而影響應用程式效能。 這就是節流和去抖可以發揮作用的地方。它們可以幫助您管理在處理過於頻繁觸發的事件時呼叫函數的頻率。 ...
    程式設計 發佈於2024-11-06
  • 在 Go 中匯入私人 Bitbucket 儲存庫時如何解決 403 Forbidden 錯誤?
    在 Go 中匯入私人 Bitbucket 儲存庫時如何解決 403 Forbidden 錯誤?
    Go 從私有Bitbucket 儲存庫匯入問題排查(403 禁止)使用go get 指令從Bitbucket.org 匯入私人儲存庫可能會遇到403 Forbidden 錯誤。若要解決此問題,請依照下列步驟操作:1.建立 SSH 連線:確保您已設定 SSH 金鑰並且能夠使用 SSH 連線至 Bitb...
    程式設計 發佈於2024-11-06
  • Singleton 和原型 Spring Bean 範圍:詳細探索
    Singleton 和原型 Spring Bean 範圍:詳細探索
    当我第一次开始使用 Spring 时,最让我感兴趣的概念之一是 bean 范围的想法。 Spring 提供了各种 bean 作用域,用于确定在 Spring 容器内创建的 bean 的生命周期。最常用的两个范围是 Singleton 和 Prototype。了解这些范围对于设计高效且有效的 Spri...
    程式設計 發佈於2024-11-06
  • 如何有效平滑雜訊資料曲線?
    如何有效平滑雜訊資料曲線?
    優化平滑雜訊曲線考慮近似的資料集:import numpy as np x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) np.random.random(100) * 0.2這包括 20% 的變化。 UnivariateSpline 和移動平均線等方...
    程式設計 發佈於2024-11-06
  • 如何在 MySQL 中為有序序列值重新編號主索引?
    如何在 MySQL 中為有序序列值重新編號主索引?
    為有序序列值重新編號主索引如果您的MySQL 表的主索引(id) 以不一致的順序出現(例如,1、 31, 35, 100),您可能會想要將它們重新排列成連續的系列(1, 2, 3, 4)。 要實現此目的,您可以採用以下方法而不建立臨時表:SET @i = 0; UPDATE table_name S...
    程式設計 發佈於2024-11-06
  • 增強的物​​件文字
    增強的物​​件文字
    ES6引進了3種編寫物件字面量的方法 第一種方法: - ES6 Enhanced object literal syntax can take an external object like salary object and make it a property of the developer...
    程式設計 發佈於2024-11-06
  • 將 Tailwind 配置為設計系統
    將 Tailwind 配置為設計系統
    对于设计系统来说,一致性和理解性就是一切。一个好的设计系统通过实现它的代码的配置来确保实现的一致性。它需要是: 易于理解,无需放弃良好设计所需的细微差别; 可扩展和可维护,且不影响一致性。 使用我的 React 和 Tailwind 的默认堆栈,我将向您展示如何设置自己的版式、颜色和间距默认值,而不...
    程式設計 發佈於2024-11-06
  • 如何根據條件替換 Pandas DataFrame 列中的特定值?
    如何根據條件替換 Pandas DataFrame 列中的特定值?
    Pandas DataFrame:基於條件的目標值取代在Pandas中,通常需要根據某些條件修改DataFrame中的特定值。雖然常見的方法是使用 loc 來選擇行,但了解如何精確定位特定列進行值修改至關重要。 考慮以下 DataFrame,我們希望在其中替換“第一季”中的值超過 1990 且整數為...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3