資源簡(jiǎn)介
matlab實(shí)現(xiàn)kd樹的創(chuàng)建和配套的搜索程序,注釋詳細(xì),還附有算法思路講解。歡迎下載

代碼片段和文件信息
function?[node]?=?cut_by_r(XrcurrentNode)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%?根據(jù)第r維對(duì)X進(jìn)行切分獲得節(jié)點(diǎn)
%?X:數(shù)據(jù)點(diǎn)集
%?r:切分維度
%?node:結(jié)構(gòu)體
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Node_template?=?struct(...
????‘isRoot‘0...??????是否是根節(jié)點(diǎn),0不是,1是
????‘isLeaf‘0...??????是否是葉子節(jié)點(diǎn)
????‘isLeft‘0...??????是否是左孩子
????‘isRight‘0...?????是否是右孩子?用于搜索時(shí)找兄弟結(jié)點(diǎn)
????‘hasLeft‘0...?????是否有左孩子
????‘hasRight‘0...????是否有右孩子
????‘parent‘-1...?????父親結(jié)點(diǎn),用于搜索時(shí)回溯
????‘val‘-1...????????切分點(diǎn)坐標(biāo)
????‘left‘-1...???????左節(jié)點(diǎn)(依然是結(jié)構(gòu)體)
????‘right‘-1...??????右節(jié)點(diǎn)
????‘leftSet‘-1...????分到右邊的點(diǎn)集(矩陣)-1表示空集
????‘rightSet‘-1...???分到左邊的點(diǎn)集(矩陣),-1表示空集?
????‘r‘-1...??????????切分維度);
????‘visited‘0....?????搜索時(shí)是否訪問標(biāo)志),0為未訪問,1為訪問過
????‘index‘-1?...??????下標(biāo)
????);??????????????????%節(jié)點(diǎn)結(jié)構(gòu)體模板
dim?=?size(X1)-1;????%數(shù)據(jù)點(diǎn)的維度
num?=?size(X2);????%數(shù)據(jù)集點(diǎn)數(shù)
node?=?currentNode;
node.r?=?r;
if?num?==?1
????%數(shù)據(jù)集中只有一個(gè)點(diǎn)
????node.val?=?X(1:dim1);
????node.isLeaf?=?1;
????node.index?=?X(dim+1:);
else
????X_sorted?=?sort_by_r(Xr);
????mid?=?ceil(num/2);
????node.val?=?X_sorted(1:dimmid);
????node.index?=?X_sorted(dim+1mid);
????if?mid>1
????????node.leftSet?=?X_sorted(:1:ceil(num/2)-1);
????end
????if?mid ????????node.rightSet?=?X_sorted(:ceil(num/2)+1:end);
????end
end
r?=?mod(rdim)+1;
if?node.leftSet?~=?-1
????node.hasLeft?=?1;
????node.left?=?Node_template;
????node.left.parent?=?node;
????node.left.isLeft?=?1;
????node.left?=?cut_by_r(node.leftSetrnode.left);
end
if?node.rightSet?~=?-1
????node.hasRight?=?1;
????node.right?=?Node_template;
????node.right.parent?=?node;
????node.right.isRight?=?1;
????node.right?=?cut_by_r(node.rightSetrnode.right);
end
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????????28??2018-08-08?14:35??kdTree\.git\COMMIT_EDITMSG
?????文件????????298??2018-08-06?21:28??kdTree\.git\config
?????文件?????????73??2018-08-06?21:28??kdTree\.git\desc
?????文件?????????23??2018-08-06?21:28??kdTree\.git\HEAD
?????文件????????478??2018-08-06?21:28??kdTree\.git\hooks\applypatch-msg.sample
?????文件????????896??2018-08-06?21:28??kdTree\.git\hooks\commit-msg.sample
?????文件???????3327??2018-08-06?21:28??kdTree\.git\hooks\fsmonitor-watchman.sample
?????文件????????189??2018-08-06?21:28??kdTree\.git\hooks\post-update.sample
?????文件????????424??2018-08-06?21:28??kdTree\.git\hooks\pre-applypatch.sample
?????文件???????1642??2018-08-06?21:28??kdTree\.git\hooks\pre-commit.sample
?????文件???????1348??2018-08-06?21:28??kdTree\.git\hooks\pre-push.sample
?????文件???????4898??2018-08-06?21:28??kdTree\.git\hooks\pre-reba
?????文件????????544??2018-08-06?21:28??kdTree\.git\hooks\pre-receive.sample
?????文件???????1492??2018-08-06?21:28??kdTree\.git\hooks\prepare-commit-msg.sample
?????文件???????3610??2018-08-06?21:28??kdTree\.git\hooks\update.sample
?????文件????????689??2018-08-08?14:35??kdTree\.git\index
?????文件????????240??2018-08-06?21:28??kdTree\.git\info\exclude
?????文件????????498??2018-08-08?14:35??kdTree\.git\logs\HEAD
?????文件????????498??2018-08-08?14:35??kdTree\.git\logs\refs\heads\master
?????文件????????174??2018-08-06?21:28??kdTree\.git\logs\refs\remotes\origin\HEAD
?????文件????????282??2018-08-08?14:36??kdTree\.git\logs\refs\remotes\origin\master
?????文件????????191??2018-08-08?14:35??kdTree\.git\ob
?????文件????????509??2018-08-06?21:28??kdTree\.git\ob
?????文件????????255??2018-08-08?14:35??kdTree\.git\ob
?????文件????????252??2018-08-06?21:33??kdTree\.git\ob
?????文件????????277??2018-08-08?14:35??kdTree\.git\ob
?????文件?????????54??2018-08-06?21:28??kdTree\.git\ob
?????文件?????????79??2018-08-06?21:28??kdTree\.git\ob
?????文件????????212??2018-08-06?21:33??kdTree\.git\ob
?????文件????????727??2018-08-06?21:33??kdTree\.git\ob
............此處省略66個(gè)文件信息
評(píng)論
共有 條評(píng)論