greedyalgorithm

3

Click here to load reader

Upload: bridget-jones

Post on 15-Apr-2017

77 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GreedyAlgorithm

%find the largest edge weight e = csvread('loops.csv'); n = length(e); TT = 50; %initialize variables best = 0; % largest edgeweight best_v = zeros(1,TT); % vertex history best_e = zeros(2,TT); % edge history

nv = max(max([e(:,1), e(:,2)])); V = zeros(1,nv);

for i = 1:n A = e(i,1); B = e(i,2); V(A) = V(A)+1; V(B) = V(B)+1; end

valence = max(V); V = zeros(1,nv); v = zeros(nv,valence);

for i = 1:n A = e(i,1); B = e(i,2); V(A) = V(A)+1; V(B) = V(B)+1; v(A,V(A)) = i; v(B,V(B)) = i; end

for i = 1:n if best < abs(e(i,3)) best = abs(e(i,3)); if e(i,3) > 0 best_v(1) = e(i,1); best_v(2) = e(i,2); best_e(1,1) = i; best_e(2,1) = 1; else best_v(1) = e(i,2); best_v(2) = e(i,1); best_e(1,1) = i; best_e(2,1) = -1; end end p(1,1) = best_v(1); p(2,1) = best_v(2); end

for q = 2:TT best = 0; for i = v(best_v(q),1:valence) if i ~= 0 if e(i,1) == best_v(q)

Page 2: GreedyAlgorithm

A = 1; B = e(i,2); W = e(i,3); else A = -1; B = e(i,1); W = -e(i,3); end

for ii = 1:q if B == best_v(ii) W = W*(.96+.01*(q-ii)); break end end

if W > best best = W; best_v(q+1) = B; best_e(1,q) = i; best_e(2,q) = A; end end end if any(best_v(q+1) == best_v(1:q)) break end end

for ii = 1:q if best_v(q+1) == best_v(ii) link = ii; break end end

loop = best_v(link:q);

nn = n; for ii = 1:(q+1-link) for edge = v(loop(ii),1:valence) if edge ~= 0 e(edge,:) = 0; nn = nn - 1; end end end

ee = e; e = zeros(nn,3); row = 1; for ii = 1:n if ee(ii,1) ~= 0 e(row,:) = ee(ii,:); row = row + 1; end

Page 3: GreedyAlgorithm

end