📄 sgnt_hwp.m
字号:
function node= sgnt_hwp(node,m);
% HWP Purning HWP(Horizontally Well Placed) d(n,np)<=d(n,ns)
[nr,nc]= size(node);
for i=2:1:nr
if node(i,m+2)>0 & node(i,m+4)>0
j=1;
x(j)= node(i,m+4);
temp= x(j);
while ( temp> 0)
temp= node(x(j),m+4);
if temp > 0
j=j+1;
x(j)= temp;
end
end
for k=1:1:m
w(k)= node(i,k);
wp(k)= node(node(i,m+2),k);
end
dp= sum((w-wp).^2);
d_min= inf;
hh= 0;
for j=1:1:length(x)
for k=1:1:m ws(k)= node(x(j),k); end
ds= sum((w-ws).^2);
if ds < d_min
d_min= ds;
hh= x(j);
end
end
if dp > d_min
% update ns
if node(hh,m+3)==0 %hh is a leaf
dead = 0;
for jj=2:1:nr
if node(jj,m+2)== 0
dead= jj;
break;
end
end
if dead== 0
node(nr+1,:)= node(hh,:);
node(nr+1,m+2)= hh;
node(nr+1,m+3)= 0;
node(nr+1,m+4)= 0;
node(hh,m+3)= nr+1;
nr= nr+1;
else
node(dead,:)= node(hh,:);
node(dead,m+2)= hh;
node(dead,m+3)= 0;
node(dead,m+4)= 0;
node(hh,m+3)= dead;
end
end
for k=1:1:m
node(hh,k)= (node(hh,k)*node(hh,m+1)+node(i,k)*node(i,m+1))...
/(node(hh,m+1)+ node(i,m+1));
end
node(hh,m+1)= node(hh,m+1)+ node(i,m+1);
% connect(n,ns)
if node(node(i,m+2),m+3)== i
node(node(i,m+2),m+3)= node(i,m+4);
node(i,m+4)= 0;
elseif node(i,m+4) == 0
node(x(length(x)),m+4)= 0;
node(i,m+4)= 0;
elseif ~(node(node(i,m+2),m+3)== i) & node(i,m+4) > 0
sibling= node(node(hh,m+2),m+3);
while ( node(sibling,m+4)>0 )
if node(sibling,m+4)== i node(sibling,m+4)= node(i,m+4); end
sibling= node(sibling,m+4);
end
node(i,m+4)= 0;
end
node(i,m+2)= hh;
pointer= node(hh,m+3);
sibling= pointer;
while ( node(pointer,m+4) > 0 )
sibling= pointer;
pointer= node(pointer,m+4);
end
node(sibling,m+4)= i;
end
end
clear x
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -