当前位置: 首页 > article >正文

LeetCode Kruskal 算法题解

LeetCode Kruskal 算法题解题目描述Kruskal 算法是一种用于构建最小生成树的贪心算法。最小生成树是连通图中所有边的权值之和最小的生成树。示例对于以下加权图A --(2)-- B --(4)-- C | | | (1) (3) (1) | | | D --(5)-- E --(2)-- F最小生成树的边包括A-D (1), A-B (2), B-E (3), E-F (2), F-C (1)总权值为 123219。解题思路方法Kruskal 算法思路Kruskal 算法的核心思想是按照边的权值从小到大排序然后依次选择边如果这条边连接的两个顶点不在同一个连通分量中则将其加入最小生成树。具体步骤将所有边按照权值从小到大排序。初始化一个并查集用于跟踪顶点的连通性。依次遍历排序后的边对于每条边如果边的两个顶点不在同一个连通分量中将这条边加入最小生成树并合并这两个顶点的连通分量。重复步骤 3直到最小生成树包含 V-1 条边其中 V 是顶点数。复杂度分析时间复杂度O(E log E)其中 E 是边数。排序边的时间复杂度为 O(E log E)并查集的操作时间接近常数。空间复杂度O(E V)需要存储边和并查集的信息。代码实现方法Kruskal 算法# 并查集类 class UnionFind: def __init__(self, size): self.parent list(range(size)) self.rank [0] * size def find(self, x): if self.parent[x] ! x: self.parent[x] self.find(self.parent[x]) # 路径压缩 return self.parent[x] def union(self, x, y): x_root self.find(x) y_root self.find(y) if x_root y_root: return False # 已经在同一个集合中 # 按秩合并 if self.rank[x_root] self.rank[y_root]: self.parent[x_root] y_root else: self.parent[y_root] x_root if self.rank[x_root] self.rank[y_root]: self.rank[x_root] 1 return True # Kruskal 算法 def kruskal(edges, num_vertices): # 按照边的权值从小到大排序 edges.sort(keylambda x: x[2]) uf UnionFind(num_vertices) min_spanning_tree [] total_weight 0 for edge in edges: u, v, weight edge if uf.union(u, v): min_spanning_tree.append(edge) total_weight weight # 最小生成树包含 V-1 条边 if len(min_spanning_tree) num_vertices - 1: break return min_spanning_tree, total_weight # 测试 def test_kruskal(): # 构建图的边列表顶点用0-5表示A0, B1, C2, D3, E4, F5 edges [ (0, 1, 2), # A-B (2) (0, 3, 1), # A-D (1) (1, 2, 4), # B-C (4) (1, 4, 3), # B-E (3) (2, 5, 1), # C-F (1) (3, 4, 5), # D-E (5) (4, 5, 2), # E-F (2) ] num_vertices 6 # 测试 Kruskal 算法 min_spanning_tree, total_weight kruskal(edges, num_vertices) print(Minimum Spanning Tree edges:) for u, v, weight in min_spanning_tree: print(f{chr(65u)} - {chr(65v)}: {weight}) print(fTotal weight: {total_weight}) # 输出 # Minimum Spanning Tree edges: # A - D: 1 # C - F: 1 # A - B: 2 # E - F: 2 # B - E: 3 # Total weight: 9 if __name__ __main__: test_kruskal()测试用例测试用例最小生成树输入A --(2)-- B --(4)-- C | | | (1) (3) (1) | | | D --(5)-- E --(2)-- F输出Minimum Spanning Tree edges: A - D: 1 C - F: 1 A - B: 2 E - F: 2 B - E: 3 Total weight: 9总结Kruskal 算法是一种重要的图论算法它可以用于构建最小生成树。通过贪心策略和并查集Kruskal 算法可以高效地找到权值之和最小的生成树。Kruskal 算法的核心思想是按照边的权值从小到大排序然后依次选择边如果这条边连接的两个顶点不在同一个连通分量中则将其加入最小生成树。掌握 Kruskal 算法的原理和实现对于理解和解决图论相关问题非常重要。

相关文章:

LeetCode Kruskal 算法题解

LeetCode Kruskal 算法题解 题目描述 Kruskal 算法是一种用于构建最小生成树的贪心算法。最小生成树是连通图中所有边的权值之和最小的生成树。 示例: 对于以下加权图:A --(2)-- B --(4)-- C| | |(1) (3) (1)| | …...

基于dPanel与OpenClaw的AI智能体:从开发到生产部署全流程指南

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目——OpenClaw,它是一个基于Node.js的AI智能体(Agent)框架。简单来说,你可以把它理解为一个“大脑”,它能够连接各种AI模型(比如OpenAI的GPT&#xf…...

SMOTE算法解析与Python实战:解决不平衡分类问题

## 1. 不平衡分类问题的现实挑战在真实世界的数据分析中,我们经常会遇到类别分布极不均衡的数据集。比如信用卡欺诈检测中正常交易占99.9%,医疗诊断中健康样本远多于患病样本。这类情况下,如果直接用传统分类算法,模型会倾向于预测…...

OpenAEON:构建大模型操作系统,统一AI资源调度与编排

1. 项目概述:从“大模型”到“大模型操作系统”的跃迁最近在AI圈子里,OpenAEON这个名字开始被频繁提及。乍一看,它像是一个新的开源大模型项目,但当你真正深入进去,会发现它的野心远不止于此。OpenAEON的核心定位&…...

CLUE框架:基于隐藏状态分析的LLM生成内容验证方法

1. 项目概述CLUE(Clustering and Experience-based Verification)是一种创新的无参数验证框架,专门用于评估大型语言模型(LLM)生成内容的正确性。与传统的基于文本或置信度的方法不同,CLUE直接分析模型内部…...

FanControl终极配置指南:3步实现Windows风扇精准温控

FanControl终极配置指南:3步实现Windows风扇精准温控 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...

OpenClaw Dashboard:构建AI Agent工作流的实时监控与控制中心

1. 项目概述:为AI Agent工作流打造的“飞行驾驶舱”如果你正在使用OpenClaw来构建和运行AI Agent工作流,那么你很可能和我一样,经历过一段“盲人摸象”的时期。Agent在后台默默执行任务,你只能通过零散的日志文件、命令行输出或者…...

如何快速配置Parsec虚拟显示驱动:实现多显示器扩展的完整指南

如何快速配置Parsec虚拟显示驱动:实现多显示器扩展的完整指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 你是否曾经因为显示器数量不足而限制了工作效率&#xf…...

告别“跟风学“!AI系统班7大模块,带你从0到1成为全栈开发者

本文指出,AI时代的红利不属于盲目跟风学习者。文章分析了学习者常遇到的四大问题:缺乏规划、理论与实践脱节、学用结合困难、缺少反馈指导。为解决这些问题,作者推荐了一套系统化的AI学习路线,包含7大模块:必备基础、核…...

RWKV-7 (1.5B World)轻量级优势落地:为IoT设备与嵌入式AI提供可能

RWKV-7 (1.5B World)轻量级优势落地:为IoT设备与嵌入式AI提供可能 1. 项目概述 RWKV-7 (1.5B World)是一款专为资源受限环境设计的轻量级大语言模型。相比传统大模型动辄数十GB的显存需求,1.5B参数的紧凑设计使其能够在入门级GPU甚至部分高性能嵌入式设…...

魔兽争霸III终极优化指南:一键解锁高帧率与完美宽屏体验

魔兽争霸III终极优化指南:一键解锁高帧率与完美宽屏体验 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper是一款专为《魔兽争…...

拼接最大数:你以为是贪心?其实是在“做选择的人生模拟”

🔥 拼接最大数:你以为是贪心?其实是在“做选择的人生模拟” 一、引子:很多人写对了代码,却没搞懂本质 这道题(Create Maximum Number),不少人第一次写的时候都会觉得: “这不就是贪心吗?每次选最大的数字就完了。” 然后一提交—— 要么WA(错误答案),要么超时…...

Android系统开发工程师(SW)偏SDK方向职位解析与面试指南

一、职位概述 1.1 工作职责总览 Android系统开发工程师偏SDK方向,是Android开发领域的关键角色,承担着丰富且重要的职责。 首要任务便是负责Android终端或平板系统的开发及维护工作。这意味着需要对Android系统的架构有深入的理解,能够确保系统的稳定运行,及时修复出现的…...

安卓驱动 嵌入式系统软件工程师——蓝牙方向

一、职位信息概述 1.1 岗位职责总览 安卓驱动 & 嵌入式系统软件工程师(蓝牙方向),承担着诸多关键职责,是连接硬件与上层应用的重要桥梁。 在开发方面,需负责嵌入式Linux、Android平台的底层BSP开发、移植与调试工作。要完成Linux内核驱动的编写,确保蓝牙相关硬件设…...

Bidili Generator优化技巧:如何平衡生成速度与图片质量

Bidili Generator优化技巧:如何平衡生成速度与图片质量 你是否遇到过这样的困扰:使用Bidili Generator生成图片时,要么等待时间太长,要么图片质量不尽如人意?作为一款基于SDXL 1.0架构的图片生成工具,Bidi…...

保姆级教程:用mxbai-embed-large-v1快速搭建文本检索系统,零基础也能上手

保姆级教程:用mxbai-embed-large-v1快速搭建文本检索系统,零基础也能上手 1. 项目简介与核心价值 mxbai-embed-large-v1是一款强大的文本嵌入模型,能够将文本转换为高维向量表示。它在MTEB基准测试中表现优异,超越了包括OpenAI在…...

Notepad++ 开发者福音:集成Hypnos-i1-8B插件实现代码注释与逻辑解释

Notepad 开发者福音:集成Hypnos-i1-8B插件实现代码注释与逻辑解释 1. 引言:代码理解的痛点与解决方案 作为一名开发者,你是否经常面对这样的困境:接手一个遗留项目,面对满屏没有注释的复杂代码;或者自己几…...

QMCDecode终极指南:3步轻松解密QQ音乐加密格式

QMCDecode终极指南:3步轻松解密QQ音乐加密格式 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转换结果…...

Windows Cleaner终极指南:免费快速解决C盘爆红的系统清理神器

Windows Cleaner终极指南:免费快速解决C盘爆红的系统清理神器 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Windows系统设…...

baidupankey如何实现95%的提取码自动获取率?深度解析技术架构与实战应用

baidupankey如何实现95%的提取码自动获取率?深度解析技术架构与实战应用 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 在数字资源共享日益频繁的今天,百度网盘作为国内主流的云存储平台,其…...

Nemotron-CC-Math数据集:提升LLM数学推理能力的关键

1. 项目背景与核心价值NVIDIA最新发布的Nemotron-CC-Math数据集正在改变大语言模型(LLM)数学能力训练的格局。这个专门针对数学领域优化的预训练语料库,解决了当前通用语料库在数学推理任务上的三大痛点:数据质量参差不齐、专业符…...

【Qt】常用控件(十八)QVBoxLayout,QHBoxLayout的属性和使用,布局管理器之间的嵌套

小编个人主页详情<—请点击 小编个人gitee代码仓库<—请点击 Qt系列专栏<—请点击 倘若命中无此运&#xff0c;孤身亦可登昆仑&#xff0c;送给屏幕面前的读者朋友们和小编自己! 目录 前言一、QVBoxLayoutQVBoxLayout的属性使用QVBoxLayout管理多个控件代码实现图形化…...

Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill多语言支持实测

Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill多语言支持实测 1. 模型简介与背景 Qwen3-4B-Thinking-2507-Gemini-2.5-Flash-Distill是一个基于vLLM框架部署的文本生成模型&#xff0c;通过Chainlit前端提供交互式体验。该模型在约5440万个由Gemini 2.5 Flash生成的token…...

ARMv8内存管理与TCR_EL2寄存器详解

1. ARMv8内存管理基础与TCR_EL2寄存器概览在ARMv8架构中&#xff0c;内存管理单元(MMU)通过多级页表转换机制实现虚拟地址到物理地址的映射。作为EL2(Hypervisor)级别的关键控制寄存器&#xff0c;TCR_EL2(Translation Control Register for EL2)掌管着地址转换的核心参数配置。…...

百度网盘解析工具:免费突破限速的终极指南

百度网盘解析工具&#xff1a;免费突破限速的终极指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾为百度网盘的下载速度而烦恼&#xff1f;非会员下载大文件时&am…...

这种口译项目不论按小时计费还是按分钟计费,口译员都被按地板摩擦,满打满算干一天收入还赶不上摆地摊卖凉粉。接这种项目的就不要自称译员了,这对不起你本科➕研究生几大年的时间,甚至大几十万出国留学,太尴尬了

这种口译项目不论按小时计费还是按分钟计费&#xff0c;口译员都被按地板摩擦&#xff0c;满打满算干一天收入还赶不上摆地摊卖凉粉。接这种项目的就不要自称译员了&#xff0c;这对不起你本科➕研究生几大年的时间&#xff0c;甚至大几十万出国留学&#xff0c;太尴尬了。你得…...

3分钟解锁百度网盘资源:baidupankey如何让提取码查询变得如此简单?

3分钟解锁百度网盘资源&#xff1a;baidupankey如何让提取码查询变得如此简单&#xff1f; 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾在深夜急需下载学习资料&#xff0c;却被一个简单的提取码卡住半小时&#x…...

如何彻底告别Dell G15散热烦恼?免费开源散热控制中心完全指南

如何彻底告别Dell G15散热烦恼&#xff1f;免费开源散热控制中心完全指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为Dell G15笔记本散热问题而烦恼…...

基于规则引擎与推荐算法的智能周度菜单生成器设计与实现

1. 项目概述&#xff1a;从“今天吃什么”到一周菜单的自动化生成“今天吃什么&#xff1f;”这个问题&#xff0c;大概是每个需要自己动手解决三餐的人&#xff0c;每天都要面对的灵魂拷问。无论是独居的上班族&#xff0c;还是需要为全家掌勺的家庭主厨&#xff0c;在忙碌的生…...

Windows Cleaner:快速解决C盘空间不足的终极指南

Windows Cleaner&#xff1a;快速解决C盘空间不足的终极指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为Windows系统C盘空间不足而烦恼吗&#xff1f;W…...