matlab-贪婪算法寻找最小覆盖

文章目录


一、最小结点集是什么

最小覆盖集 (也称为最小点覆盖集)是图论中的一个重要概念,指的是一个节点子集,使得图中的每一条边都与这个子集中的至少一个节点关联。简单来说,最小覆盖集是一个节点集合,它能够"覆盖"或"触及"到图中的每一条边。

二、贪婪算法实现查找最小结点集

代码

matlab 复制代码
function S = greedyVertexCover(A)  
    % greedyVertexCover: 使用贪心算法找到一个图的顶点覆盖集  
    % A: 图的邻接矩阵,其中A(i,j)=1表示顶点i和顶点j之间有边相连,A(i,j)=0表示没有边  
    % S: 找到的顶点覆盖集  
  
    % 获取图的顶点数  
    n = size(A, 1);  
      
    % 初始化顶点覆盖集S为空  
    S = [];  
      
    % 初始化所有边都未覆盖  
    edgesToCover = A;  
      
    % 当还有未覆盖的边时  
    while ~all(edgesToCover(:) == 0) % 检查是否所有边都已被覆盖  
        % 找到一个未覆盖边数最多的顶点(贪心选择)  
        maxEdges = 0;  
        v = 0;  
          
        % 遍历所有顶点  
        for i = 1:n  
            % 如果顶点i还未在S中且至少有一个相邻边未覆盖  
            if ~any(S == i) && any(edgesToCover(i, :))  
                % 计算顶点i覆盖的未覆盖边数  
                numCovered = sum(edgesToCover(i, :));  
                % 如果顶点i覆盖的未覆盖边数多于当前最多的,则更新  
                if numCovered > maxEdges  
                    maxEdges = numCovered;  
                    v = i;  
                end  
            end  
        end  
          
        % 确保v是一个有效的正整数索引  
        if v > 0 && v <= n  
            % 将选择的顶点v加入顶点覆盖集S  
            S = [S, v];  
              
            % 标记与顶点v相邻的边为已覆盖  
            edgesToCover(v, :) = 0; % 设置为0表示边已被覆盖  
            edgesToCover(:, v) = 0; % 对于无向图,双向标记  
        else  
            error('无法找到有效的顶点索引v'); % 如果v无效,则抛出错误  
        end  
    end  
end  
  
matlab 复制代码
% 示例:创建一个图的邻接矩阵并找到其顶点覆盖集  
% 邻接矩阵表示的图  
A = [0 1 1 0 0;  
     1 0 1 1 0;  
     1 1 0 1 1;  
     0 1 1 0 1;  
     0 0 1 1 0];  
  
% 调用函数找到顶点覆盖集  
S = greedyVertex(A);  
disp('Vertex Cover Set:');  
disp(S);

结果

相关推荐
土司大王10 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
sali-tec10 小时前
C# 基于OpenCv的视觉工作流-章106-差值追踪
图像处理·人工智能·opencv·算法·计算机视觉
Navigator_Z10 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
手写码匠10 小时前
Dify 多 Agent 工具权限与安全沙箱实战:让智能体“有能力,但不越权“
人工智能·深度学习·算法·aigc
黎阳之光11 小时前
打破堆场感知黑盒:黎阳之光视频孪生,构建港口码头网格化透明管控新体系
大数据·人工智能·算法·安全·数字孪生
大模型码小白11 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
sel_912 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习
Asize12 小时前
438. 找到字符串中所有字母异位词
算法
Asize12 小时前
283. 移动零
算法
船厂电气自动化ai大模型14 小时前
AI大模型与数学·第57课 傅里叶全套工具链综合实战:串联级数/连续变换/DFT/FFT,图像、音频、扩散模型完整例题
数据结构·人工智能·深度学习·算法·机器学习