function [node,ncluster,nedges] = choose_node( G, nset, nsize ) %function [node,ncluster,nedges] = choose_node( G, nset, nsize ) % % Choose the node that causes the least number of edges to be added to 2b, N = length(nset); clusters = cell(1,N); newedges = cell(1,N); numedges = zeros(1,N); for i=1:N, v = nset(i); clusters{i} = induced_cluster( v, G ); newedges{i} = new_edges( clusters{i}, G ); numedges(i) = length(newedges{i}); end; % breaking ties by choosing the node that induces the cluster with the smallest % weight. posnodes = zeros(1,N); [num,varindex]=min(numedges); posnodes(varindex) = 1; numedges(varindex) = N*N; % largest possible while 1, [val,varindex]=min(numedges); if val > num, break; else posnodes(varindex) = 1; numedges(varindex) = N*N; % largest possible end; end; smallest = find(posnodes); N = length(smallest); if N > 1, weights = zeros(1,N); for i=1:N, var = smallest(i); weights(i) = calc_weight( clusters{var}, nsize ); end; [wgt,vari]=min(weights); node = smallest(vari); else node = smallest; end; ncluster = clusters{node}; nedges = newedges{node};