數據結構|并查集

Hello !朋友們,這是我在學習過程中梳理的筆記,以作以后復習回顧,有時略有潦草,一些話是我用自己的話描述的,可能不夠準確,還是感謝大家的閱讀!

目錄

一、并查集Quickfind

二、兩種算法

1)QuickFind[快查找]

思想:

代碼框架:

2)QuickUnion[快合并]

思想:

基于size的算法優化:元素少的樹,嫁接到元素多的樹

基于rank的算法改進:矮的樹,嫁接到高的樹

路徑壓縮:所有元素都指向根結點

代碼實現步驟:

代碼框架:


一、并查集Quickfind

并查集是一種用于處理不相交集合合并查詢問題的數據結構。以下是其相關概念:

  • 基本操作
    • 合并(Union):將兩個不相交的集合合并為一個集合。
    • 查找(Find):確定一個元素屬于哪個集合,通常返回該集合的代表元素。
  • 實現原理
    • 并查集通常使用樹結構來實現,每個集合對應一棵樹。樹中的節點代表集合中的元素,根節點作為集合的代表元素。
    • 用一個數組來存儲每個元素的父節點信息,通過不斷查找父節點,最終找到根節點,從而確定元素所屬的集合。
  • 路徑壓縮優化:在查找操作中,為了提高效率,可以采用路徑壓縮的優化方法。即在查找元素的根節點時,將路徑上的所有節點直接連接到根節點,這樣下次查找時就可以更快地找到根節點。
  • 應用場景
    • 連通性問題:判斷圖中兩個節點是否連通,例如在網絡拓撲中,判斷兩個設備是否通過網絡連接。
    • 最小生成樹:在構建最小生成樹的過程中,用于判斷兩個頂點是否在同一個連通分量中,避免形成環。
    • 集合劃分:將一組元素劃分為不同的不相交集合,例如將一群人按照不同的興趣愛好劃分成不同的小組。

二、兩種算法

并查集有兩種算法,一種是快查找(QuickFind),另一種是快合并(QuickUnion),兩種都要實現查找和和合并,只不過使用的不同的方法。

1)QuickFind[快查找]

查找效率:O(1)? ? 合并效率:O(N)

思想:

查找:查找兩個數是否在一組,借用索引,看兩個數的ID是否相等

合并:合并兩個組,將第二個組里所有的值的組號改為第一個組的組號

代碼框架:

2)QuickUnion[快合并]

查找效率:O(logN)? ? 合并效率:O(logN)

思想:

查找:查看兩個數是否在一組,看兩個數根ID是不是同一個,相等則是同一個,不等則不是同一組。

合并:不是合并a,b,而是a的根節點和b的根結點進行合并合并a合并到b,b合并到a都不一定是最好的,所以需要優化算法】(掌握一個就可以)

  • 基于size的算法優化元素少的樹,嫁接到元素多的樹
  • (目前我是這樣理解的,不知道有沒有錯)
  • 基于rank的算法改進矮的樹,嫁接到高的樹
  • 路徑壓縮所有元素都指向根結點
  • 使路徑上的所有結點都指向根結點,從而降低樹的高度

代碼實現步驟:

1、申請空間:根據需要給每個部分都申請出空間

2、初始化:給每個部分賦上初始的值

找索引

找根ID

3、查找:判斷兩個元素是否在一個集合,返回0,1)判斷兩個元素的根結點是否相同,則需要找到該借點,然后沿著起父節點找到根結點,最后比較根ID的值。

4、合并:

5、釋放空間:

代碼框架:

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80953.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【GPU 微架構技術】Pending Request Table(PRT)技術詳解

PRT(Pending Request Table)是 GPU 中用于管理 未完成內存請求(outstanding memory requests)的一種硬件結構,旨在高效處理大規模并行線程的內存訪問需求。與傳統的 MSHR(Miss Status Handling Registers&a…

遠程訪問你的家庭NAS服務器:OpenMediaVault內網穿透配置教程

文章目錄 前言1. OMV安裝Cpolar工具2. 配置OMV遠程訪問地址3. 遠程訪問OMV管理界面4. 固定遠程訪問地址 前言 在這個數據爆炸的時代,無論是管理家人的照片和視頻,還是企業老板處理財務報表和技術文檔,高效的數據管理和便捷的文件共享已經變得…

微服務架構下的熔斷與降級:原理、實踐與主流框架深度解析

微服務架構下的熔斷與降級:原理、實踐與主流框架深度解析 在現代分布式系統中,熔斷 (Circuit Breaker) 和 降級 (Degrade) 是保障系統彈性與高可用性的核心機制。本文將系統解析兩者的原理、區別與協同方式,并結合主流框架 (Resilience4j、S…

docker-vllm運行大模型

vllm鏡像下載,國內代理源 vllm/vllm-openai - Docker Image - 毫秒鏡像https://1ms.run/r/vllm/vllm-openai 執行下載docker pull docker.1ms.run/vllm/vllm-openai 查看本地鏡像 查看鏡像 查看鏡像 docker images導出鏡像 docker save -o E:\docker\ollama.tar …

基于tabula對pdf中多個excel進行識別并轉換成word中的優化(四)

對上一節進行優化: 1、識別多個excel 2、將表格中的nan替換成空字符串 一、示例中的pdf內容 二、完整代碼參考: import tabula import numpy as np from docx import Document from docx.oxml.ns import qn from docx.oxml import OxmlElementdef get_t…

【10分鐘讀論文】Power Transmission Line Inspections電力視覺水文

標題Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems 2024 評分一顆星 論文《Power Transmission Line Inspections: Methods, Challenges, Current Status and Usage of Unmanned Aerial Systems》的核心內…

linux安裝ragflow

先安裝docker,操作步驟參考文章: Linux安裝Docker docker安裝完畢,下載ragflow源碼: https://github.com/infiniflow/ragflow 下載完成,進入docker文件夾中,修改.env文件,因為默認安裝的是sli…

學習記錄:DAY20

技術探索之旅:YAML配置,依賴注入、控制反轉與Java注解 前言 最近有點懶了,太松懈可不行。為了讓自己保持學習的動力,我決定將最近的學習內容整理成博客,目標是讓未來的自己也能輕松理解。我會盡量以整體記錄的方式呈…

MCP:人工智能時代的HTTP?探索AI通信新標準

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

首版次誤區有哪些?與軟件測試報告又有什么聯系?

在軟件開發與測試領域,"首版次"這一概念關乎軟件的版本控制與管理,是確保產品質量和發布節奏的重要環節。首版次,通常是指軟件產品第一個對外發布或內部驗收的版本號,標志著一次完整開發周期的結束和下一階段工作的開始…

Laravel+API 接口

LaravelAPI 接口 網課連接:BIlibili. 中文文檔. 1.RestFul Api編碼風格 一、API設計 修改hosts,C:\Windows\System32\drivers\etc\hosts,增加127.0.0.1 api.lv8.com # Laravel 框架 用這個域名來測試(推薦規范) 在…

MIT6.S081-lab7前置

MIT6.S081-lab7前置 這部分包含了設備中斷和鎖的內容 設備中斷 之前系統調用的時候提過 usertrap ,而我們的設備中斷,比如計時器中斷也會在這里執行,我們可以看看具體的邏輯: void usertrap(void) {int which_dev 0;if((r_sst…

Linux 下編譯BusyBox

一、linux下編譯 1.拉取busybox源碼 git clone https://github.com/mirror/busybox.git 內容如下 2.配置make,建議在linux下單獨開一個終端執行 進入busybox源碼目錄,使用如下命令 make menuconfig 3.報錯 解決辦法: 安裝ncurses sud…

Element:Cheack多選勾選效果邏輯判斷

效果展示 取消子級勾選&#xff0c;父級的勾選效果 代碼合集 &#xff08;1&#xff09;組件代碼 fromlist.cheackType 類型&#xff0c;permissio表示是權限. fromlist:[{id:1,children:[{...}]},...]傳遞的數據大致結構 <!-- 操作權限 --><template v-if"…

【3DMax腳本MaxScript開發:創建高效模型虛擬體綁定和材質管理系統,從3DMax到Unreal和Unity引擎_系列第一篇】

3ds Max 腳本開發 3ds Max 腳本開發&#xff1a;創建高效模型虛擬體綁定和材質管理系統3ds Max 插件制作背景&#xff1a;設計思路一、場景節點收集與過濾廢話不多說&#xff0c;直接上完整代碼&#xff1a;界面定義與基礎設置界面控件創建狀態變量核心邏輯函數過濾選項改變事件…

【Linux學習筆記】進程替換和自定義shell

【Linux學習筆記】進程替換和自定義shell &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;Linux學習筆記 文章目錄 【Linux學習筆記】進程替換和自定義shell前言一.進程程序替換1.1 替換原理1.2 替換函數1.2.1函數解釋1.2.2命名理解 二.自主…

【辦公類-89-03】20250429AI寫的研討記錄,清除格式,統一格式,名字替換。部分加粗,添加頁眉

背景需求: 檢查自即,需要AI一下院內的五次科研培訓記錄。 本次用了豆包 豆包寫的不錯,也是“水字數”的高手 把每次培訓內容貼到WORD里 把AI資料貼到WORD里,發現問題: 1、字體、段落什么都是不統一的,需要統一改成宋體小四,1.5倍行距 2、十個研討人也要改成真人。就找…

unity Orbbec Femto Bolt接入unity流程記錄 AzureKinectExamples 插件 使用記錄

奧比中光的深度相機Orbbec Femto Bolt是Microsoft的Azure Kinect DK的升級版&#xff0c;根據官網的文檔配置環境遇到了一些問題&#xff0c;記錄一下。 注意&#xff1a; 官網文檔鏈接&#xff1a;Femto Bolt文檔 1、首先連接相機到電腦USB3.0&#xff0c;接通電源&#xf…

聊天室系統:多任務版TCP服務端程序開發詳細代碼解釋

1. 需求 目前我們開發的TCP服務端程序只能服務于一個客戶端&#xff0c;如何開發一個多任務版的TCP服務端程序能夠服務于多個客戶端呢? 完成多任務&#xff0c;可以使用線程&#xff0c;比進程更加節省內存資源。 2. 具體實現步驟 編寫一個TCP服務端程序&#xff0c;循環等…

Python3:裝飾器、生成器與迭代器

Python3&#xff1a;裝飾器、生成器與迭代器 一、&#x1f3ad; 裝飾器&#xff1a;給函數穿上"魔法外衣"裝飾器基本概念為裝飾器添加參數傳遞功能帶參數的裝飾器functools.wraps&#xff1a;保留原函數的元信息實用裝飾器示例1. 計時器裝飾器2. 緩存裝飾器(Memoizat…