• 大小: 8KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: Matlab
  • 标签: Kruskul  

资源简介

通过MATLAB实现了最小生成树算法中的Kruskal算法,而且可以通过设置阈值进行聚类(包含数据集哟)

资源截图

代码片段和文件信息

clear all;
%===============================================
%导入数据集并初始化中间变量
% pointdata = load(‘mydataset.txt‘)‘;
pointdata=load(‘rings1.txt‘);
pointdata(:length(pointdata(1:)))=[];
distarr=pdist(pointdata ‘euclidean‘);
save=squareform(distarr);%得到图的距离(权值)矩阵
len=length(save(:1));
edge=[];%记录连接的边

%cc存储了连通分支,初始状态设每个点为连通分支
cc=cell(1len);
for i=1:len
    cc{i}=i;
end

%=================================================
%生成最小生成树,并按照阈值分割最小生成树,得到几个连通分支
threshold=0.6;%设置阈值
ccSize=size(cc);
while ccSize(2)>1
    %得到最小的权值的边
    minpx=Inf;
    for i=1:1:len
        for j=i+1:1:len
            if save(ij)                dot=[ij];
                minpx=save(ij);
            end
        end
    end
    %判断阈值
    if minpx>threshold
        break;
    end
    %======================================
    %核心算法步骤:
    %判断上面得到的边上的两点是否在不同的连通分支上;
    %若在不同的连通分支,则将这两个连通分支合并为一个连通分支,即把边加入edge矩阵中;
    %若在同一连通分支则退出循环,继续下一步,即忽略这条边
    %======================================
    ccSize=size(cc);
    flag1=0;
    flag2=0;
    for i=1:ccSize(2)
        if ismember(dot(1)cc{i}) 
            flag1=1; 
            m=i;
        end
        if ismember(dot(2)cc{i}) 
            flag2=1;
            n=i;
        end
        if flag1&&flag2
            a=min(mn);
            b=max(mn);
            %判断是否在同一连通分支
            if m==n
                break;
            else
                %合并连通分支,并记录边的过程
                cc{ccSize(2)+1}=[cc{m}cc{n}];
                cc(:a)=[];
                cc(:b-1)=[];
                edge=[edge;dot(1)dot(2)];
            end
            break;
        end
    end
    %使读过的最小的边失效,不在被读取
    save(dot(1)dot(2))=Inf;
    save(dot(2)dot(1))=Inf;
end
%==================================================
%作最小生成树的图
for i=1:length(edge(:1))
   plot([pointdata(edge(i1)1)pointdata(edge(i2)1)][pointdata(edge(i1)2)pointdata(edge(i2)2)]‘-go‘);
   hold on;
end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2227  2017-12-21 22:43  Kruskul.m
     文件          40  2017-12-11 14:36  myTestDataset.txt
     文件        7525  2014-06-16 15:44  rings.txt
     文件        7525  2017-12-05 16:31  ringsDisorder.txt

评论

共有 条评论

相关资源