function graphtest(n0,n1) global A global LEVELS m = 2; mrat = 0; for c=1:1e9 n = round(randinseg(n0,n1)); T = randdtree(n); %A = randtreeA(T,m); %C = pnormdim(rand(m,1),1); %P = dtreefillprob1(m,n,T,A,C); %[hh,Ht,H] = gethhn(P,m,n); %r = submulthh(T,hh); %mrat = max(mrat,r); L = treewidth(T); for i=1:n-1 %Ei = getEi(T,i); %nE = size(Ei,1); %if nE>2*w-1 % 'bad E bound' % keyboard %end for j=i+1:n dp = dpath(T,i,j); h = length(dp)-1; tha = rand; if ~isempty(dp) lhs = (1-(1-tha)^L)^floor((j-i)/L); %rhs = ((1-(1-tha)^L)^(1/(2*L-1)))^(j-i); rhs = ((1-(1-tha)^L)^(1/(2*L)))^(j-i); if lhs > rhs 'bad dp bound' keyboard end end end end %fprintf('mrat = %1.10f; n=%d checked %d \n',mrat,n,c); fprintf('n=%d checked %d \n',n,c); end return function [ell0,LEVu] = getLevu(u) global LEVELS for ell=1:length(LEVELS) if ismember(u,LEVELS{ell}) LEVu = LEVELS{ell}; ell0 = ell; return end end return function graphtest0(n) global minT maxT minu maxu minr = Inf; maxr = -Inf; while 1 T = randdtree(n); d = fanout(T); for u=1:n el0 = reallevel(T,u); el1 = lambda(u,d); r = el1/(el0+realmin); if r < minr minT=T; minu = u; minr = r; end if r > maxr maxT=T; maxu = u; maxr = r; end fprintf('n=%d minr = %1.5f maxr = %1.5f \n',n,minr,maxr); end end return function el = reallevel(T,u) v = u; el = 0; while v~=1 el = el+1; rents = find(T(:,v)); if length(rents)~=1 'bad tree' keyboard end v = rents; if el > size(T,1) 'runaway loop' keyboard end end return function el = lambda(u,d) if d==1 el = u-1; else el = floor(log(u*(d-1)+1)/log(d))-1; %el1 = floor(log(u)/log(d))-1; %el1 = pl(el1); el1 = floor(log(pl(u-1))/log(d)); %if (el0~=el) good = el1 <= el; %good = el1>-1; if ~good 'hm' keyboard end end return