最小生成树:kruskal算法的R语言实现

article/2025/9/29 17:46:27

以如下图为例
在这里插入图片描述

library(hash)#需要用到hash包
Nodes<-c("A","B","C","D","E","F","G")
#创建存放顶点的向量
edges<- data.frame(start=character(),end=character(),length=numeric(),stringsAsFactors = F)
edges[1,]<-c("A", "B", 4)
edges[10,]<-c("A", "G", 28)
edges[6,]<-c("A", "C", 15)
edges[3,]<-c("A", "E", 7)
edges[4,]<-c("B", "C", 9)
edges[2,]<-c("C", "E", 5)
edges[9,]<-c("C", "D", 25)
edges[12,]<-c("D", "E", 32)
edges[5,]<-c("D", "G", 12)
edges[7,]<-c("D", "F", 16)
edges[11,]<-c("E","G",30)
edges[8,]<-c("F","G",20)
#创建一个edges数据框存放边
edges[,3]<-as.numeric(edges[,3])
ori_trees<-hash()
#创建空哈希,顶点为键——值
for (i in Nodes){.set(ori_trees, keys = i, values = i)
}
#将顶点存入哈希中
find_nodes<-function(x){if(ori_trees[[x]]!=x){#双亲节点和当前节点不一致,说明这条边添加了minmum spanning treeori_trees[[x]]<-find_nodes(ori_trees[[x]])#找到双亲节点未变化的点return(ori_trees[[x]])}else{return(x)}
}minimum_spanning_tree<-data.frame(start=character(),end=character(),leng=numeric(),stringsAsFactors = F)
#定义最小生成树
n<-length(Nodes)-1
#定义循环次数,n为需要添加的边数=顶点数-1
s<-0
for(i in 1:dim(edges)[1]){if(s==n){break}if(find_nodes(edges[i,1])!=find_nodes(edges[i,2])){#双亲节点不一致ori_trees[[find_nodes(edges[i,2])]]<-find_nodes(edges[i,1])#改变该顶点的双亲节点minimum_spanning_tree<-rbind(minimum_spanning_tree,edges[i,])#将符合条件的边s<-s+1}}

http://chatgpt.dhexx.cn/article/ubVifFFg.shtml

相关文章

【转】R树

R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。举个R树在现实领域中能够解决的例子吧&#xff1a;查找20英里以内所有的餐厅。如果没有R树你会怎么解决&#xff1f;一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中&#xff0c;…

R语言实现决策树

R语言实现决策树 提示&#xff1a;本文使用R语言实现决策树&#xff0c;并对决策树结构图进行美化 文章目录 R语言实现决策树数据介绍一、相关R包的下载二、实现过程1.数据读取2.训练集与验证集划分3.构建决策树并绘制图形4.测试模型 总结 数据介绍 group就是分类结果&#x…

决策树与R语言(RPART)

关于决策树理论方面的介绍&#xff0c;李航的《统计机器学习》第五章有很好的讲解。 传统的ID3和C4.5一般用于分类问题&#xff0c;其中ID3使用信息增益进行特征选择&#xff0c;即递归的选择分类能力最强的特征对数据进行分割&#xff0c;C4.5唯一不同的是使用信息增益比进行…

经典查找算法 --- R树

R树&#xff1a;处理空间存储问题 -->是引用别人的文章 相信经过上面第一节的介绍&#xff0c;你已经对B树或者B树有所了解。这种树可以非常好的处理一维空间存储的问题。B树是一棵平衡树&#xff0c;它是把一维直线分为若干段线段&#xff0c;当我们查找满足某个要求的点的…

R语言︱决策树族——随机森林算法

每每以为攀得众山小&#xff0c;可、每每又切实来到起点&#xff0c;大牛们&#xff0c;缓缓脚步来俺笔记葩分享一下吧&#xff0c;please~ ——————————————————————————— 笔者寄语&#xff1a;有一篇《有监督学习选择深度学习还是随机森林或支持向…

R语言:画树图

原始数据长这样&#xff1a; “iyear”表示年份&#xff1b;“nkill”表示死亡人数&#xff1b;“region”表示地区&#xff1b;“总计”表示某年份死亡总人数&#xff1b;nkii里的缺失数据自动按“0”运算。 数据存储在名为“ljs”的csv格式里。 应提前下载好treemap包&#…

图解R树的内部结构及操作

本文是在https://blog.csdn.net/baimafujinji/article/details/89810217基础上增加了自己的理解和解释形成的。 R树的基本情况 R树&#xff08;R-tree&#xff09;是一种将&#xff22;树&#xff08;B树和B树统称B树&#xff09;扩展到多维情况下得到的数据结构&#xff0c;…

R树

先搞明白R树搜索、插入、删除过程。 R树是平衡树&#xff0c;可以理解为B树在N维空间上的扩展。 R树一定要满足一下要求&#xff1a; 1&#xff0e;根节点若非叶子节点&#xff0c;则至少有两个子节点&#xff1b; 2&#xff0e;每个非根叶节点和非叶节点包含的实体个数均介…

R tree

R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。举个R树在现实领域中能够解决的例子吧&#xff1a;查找20英里以内所有的餐厅。如果没有R树你会怎么解决&#xff1f;一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中&#xff0c;…

R树空间索引

R树在数据库等领域做出的功绩是非常显著的。它很好的解决了在高维空间搜索等问题。举个R树在现实领域中能够解决的例子吧&#xff1a;查找20英里以内所有的餐厅。如果没有R树你会怎么解决&#xff1f;一般情况下我们会把餐厅的坐标(x,y)分为两个字段存放在数据库中&#xff0c;…

搜索树之R树

产生背景 地理空间数据涉及各种海量且复杂的数据&#xff0c;找到合适的索引对空间数据的处理至关重要。 传统的B树索引针对字符、数字等一维属性数据的主关键字而设计&#xff0c;不适用于具有多维性的地理空间数据。 在GIS和CAD系统对空间索引需求的推动下&#xff0c;为满足…

R-Tree

R-Tree ​ R-Tree是一颗用来存储高维数据的平衡树&#xff0c;它把B树的思想扩展到了多维空间&#xff0c;采用了B树分割空间思想&#xff0c;并在添加、删除操作时采用合并、分解节点的方法&#xff0c;保证树的平衡性。 数据结构 ​ 每个R树的叶子节点包含了多个指向不同数…

R-tree总结

R-tree R-tree是用来做空间数据存储的树状数据结构。R-tree是B-tree向多维空间发展的另一种形式&#xff0c;并且R树也是平衡树。 R树的核心思想是聚合距离相近的节点并在树结构的上一层将其表示为这些节点的最小外接矩形&#xff0c;这个最小外接矩形就成为上一层的一个节点…

从B树、B+树、B*树谈到R 树

从B 树、B 树、B* 树谈到R 树 作者&#xff1a;July、weedge、Frankie。编程艺术室出品。 说明&#xff1a;本文从B树开始谈起&#xff0c;然后论述B树、B*树&#xff0c;最后谈到R 树。其中B树、B树及B*树部分由weedge完成&#xff0c;R 树部分由Frankie完成&#xff0c;全文…

R树简介

B树与R树 计算机磁盘的文件管理常使用B树和B树。B树和B树能良好地处理一维空间存储的问题。实际上&#xff0c;B树是一棵平衡树&#xff0c;它是把一维直线分为若干段线段&#xff0c;当我们查找满足某个要求的点的时候&#xff0c;只要去查找它所属的线段即可。这种思想其实是…

高级数据结构之R树(R-tree)

R树(R-tree)是一种将B树扩展到多维情况下得到的数据结构,它最初由Antonin Guttman于1984年提出。B树的结点中会存储一个键的集合,这些键把线分成片段,沿着那条线的点仅属于一个片段。因此,B树使得我们可以很容易地找到点。如果把沿线各处的点表示成B树结点,我们就能…

什么是R树?

什么是R树&#xff1f; R树是用来做空间数据存储的树状数据结构。例如给地理位置&#xff0c;矩形和多边形这类多维数据建立索引。R树是由Antonin Guttman于1984年提出的。 人们随后发现它在理论和应用方面都非常实用。 在现实生活中&#xff0c;R树可以用来存储地图上的空间信…

图解R树的原理及相关操作

B 树的搜索本质上是一维区间的划分过程&#xff0c;每次搜索节点所找到的子节点其实就是一个子区间。R 树是把 B 树的思想扩展到了多维空间&#xff0c; 采用了 B 树分割空间的思想&#xff0c;是一棵用来存储高维数据的平衡树。 ​ 对于一棵 R 树&#xff0c;叶子节点所在层…

算法设计与分析-习题-动态规划法求解多段图的最短路径问题(动态规划法)

问题描述 用动态规划法求解如图所示多段图中从顶点0到9的最短路径。 问题求解 图中顶点编号已经按照多段图的分段顺序编号&#xff0c;用动态规划法求解该多段图的过程如下&#xff1a; 最后&#xff0c;得到最短的路径为0、2、6、7、9&#xff0c;费用是97。

【动态规划法】求解0/1背包问题

问题描述 有5个物品&#xff0c;其重量分别是{2, 2, 6, 5, 4}&#xff0c;价值分别为{6, 3, 5, 4, 6}&#xff0c;背包的容量为10&#xff0c;计算背包所能装入物品的最大价值。 求解思路 在0/1背包问题中&#xff0c;物品i或者被装入背包&#xff0c;或者不被装入背包&#xf…