function h = treehij(A,C,T,i,j) % bounds hh(i,j) for a tree % find j0, where % j0 is the minimum descendant of i s.t. j0>=j [n,n] = size(T); global LEVELS LEVELS = repmat({[]},n,1); Ti = getSubt(T,i); jj = Ti(Ti>=j); if isempty(jj) h = 0; return end j0 = min(jj); dpath = parentseq(T,j0,i); getLevels(T,1,0); h = 1; for k=2:length(dpath) u = dpath(k); LEVu = getLevu(u); S = 0; thlev = []; for li = 1:length(LEVu) u1 = LEVu(li); v = find(T(:,u1)); Avu = getAij(A,v,u1); th = getTH(Avu); %S = max(S,th); %S = S + th; thlev(end+1) = th; end S = inclexcl(thlev); h = h * S; end return function h = getTH(A) [n,n] = size(A); h = 0; for i=1:n for j=i+1:n x = A(:,i); y = A(:,j); d = TV(x-y); h = max(h,d); end end return function LEVu = getLevu(u) global LEVELS for ell=1:length(LEVELS) if ismember(u,LEVELS{ell}) LEVu = LEVELS{ell}; return end end return function getLevels(T,u,ell) global LEVELS ell = ell+1; LEVELS{ell}(end+1) = u; ukids = find(T(u,:)); for vi=1:length(ukids) v = ukids(vi); getLevels(T,v,ell); end return function pseq = parentseq(T,u,r) v = u; el = 0; pseq = [u]; while v~=r el = el+1; rents = find(T(:,v)); v = rents; pseq = [v pseq]; end return function sT = getSubt(T,v) % a list of v's descendents in T % includes v itself global SUBT SUBT = []; Pi(T,v); sT = SUBT; return function Pi(T,v) global SUBT SUBT(end+1) = v; vkids = find(T(v,:)); for vi=1:length(vkids) v1 = vkids(vi); Pi(T,v1); end