📄 sgnt_insert.m
字号:
function [node] = sgnt_insert(node,e,alfa)
% Insert the data s into the SNGT node.
% Input:
% node: is a SGNT
% e: is a sample data
% alfa: is a threshold value of minimum distance bwteen e and winner
[noder,nodec]= size(node);
m = nodec -4;
% choose(i,node)
winner = 1;
dmin = inf;
dead = 0;
t = 1;
for h=1:1:noder
if h == 1 | node(h, m+2) > 0
w = node(h,1:m);
% d = sqrt((y1(i,:)-w)*(y1(i,:)-w)');
d = sum((e - w).^2);
if d < dmin
dmin = d;
winner = h;
end
else
dead(t) = h;
t = t+1;
end
end
if dmin > alfa
%*************************************************
if node(winner,m+3)== 0 % winner is a leaf
% copy(n_j,n_win); and % connect(n_j,n_win);
j = noder +1;
if dead(1) > 0 j= dead(1); end
node(j,:)= node(winner,:);
node(j,m+1)= 1;
node(j,m+2)= winner;
node(j,m+3)= 0;
node(j,m+4)= 0;
node(winner,m+3)= j;
end
[noder,nodec]= size(node);
j = noder +1;
if length(dead) > 1 j = dead(2); end
% copy(n_j,e_i);
node(j,1:m) = e;
node(j,m+1)= 1;
node(j,m+2)= winner;
node(j,m+3)= 0;
node(j,m+4)= 0;
% connect(n_j,n_win);
j_sibling = node(winner,m+3);
while(node(j_sibling, m+4) >0)
j_sibling= node(j_sibling,m+4);
end
node(j_sibling, m+4) = j;
% update(e_i,n_win)
node(winner,m+1)= node(winner,m+1)+1;
node(winner,1:m)= node(winner,1:m)+(e(1:m)-node(winner,1:m))./node(winner,m+1);
while(winner > 1)
winner= node(winner,m+2);
node(winner,m+1)= node(winner,m+1)+1;
node(winner,1:m)= node(winner,1:m)+(e(1:m)-node(winner,1:m))./node(winner,m+1);
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -