forked from lttam/SobolevTransport
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRandomlySamplingTree.m
45 lines (34 loc) · 918 Bytes
/
RandomlySamplingTree.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function [sEdgeID, sEdgeWW] = RandomlySamplingTree(N, EdgeID, EdgeWW)
% input:
% N: number of vertices
% EdgeID: mx2 (m edges -- IDs)
% EdgeWW: mx1 (weight)
% output
% sEdgeID: sampling edges
% sEdgeWW: corresponding weights of sampled edges
% (Assumption EdgeID(1) < EdgeID(2)
sEdgeID = zeros(N-1, 2);
sEdgeWW = zeros(N-1, 1);
flagEdge = zeros(N, 1);
rid = randperm(length(EdgeWW));
sEdgeID(1, :) = EdgeID(rid(1), :);
sEdgeWW(1) = EdgeWW(rid(1));
flagEdge(sEdgeID(1, :)) = 1;
sID = 1;
while sID < (N-1)
for ii = 2:length(EdgeWW)
id = rid(ii);
val1 = EdgeID(id, 1);
val2 = EdgeID(id, 2);
% "add" edge
if (flagEdge(val1) + flagEdge(val2)) == 1
sID = sID + 1;
sEdgeID(sID, :) = EdgeID(id, :);
sEdgeWW(sID) = EdgeWW(id);
% flag !!!
flagEdge([val1 val2]) = 1;
break;
end
end
end
end