MATLAB-最小集合覆蓋-貪心近似算法-以美國快遞倉庫選址覆蓋爲例

num=[];
z=zeros(353,546);
N=sum(sum(s{54}==1));
U=s{54};
Q=z;
s0=s;
t=0;
for j=1:40
    max=0;  
for i=1:53
    if sum(sum(s0{i}&U==1))/N>max
        t=i;
        max=sum(sum(s0{i}&U==1))/N;
    end   
end
T=Q;
U=U.*(s0{t}==0);%將U在s0值爲1的地方變爲0 即U-s0;
Q=Q|s0{(t)};
if T==Q
    break;
end
pause(0.01)%速度較快 需要pause可以看清過程
imh=image(cat(3,U,Q,s0{t}));   

num(j)=t;%存儲選擇的集合編號
s0{t}=z;
if Q==s{54}%Q已經等於全集 故停止循環
    break;
end
end
https://pan.baidu.com/s/1jJwSGDK(包含元組s)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章