資源簡介
matlab實現kd樹的創建和配套的搜索程序,注釋詳細,還附有算法思路講解。歡迎下載

代碼片段和文件信息
function?[node]?=?cut_by_r(XrcurrentNode)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%?根據第r維對X進行切分獲得節點
%?X:數據點集
%?r:切分維度
%?node:結構體
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Node_template?=?struct(...
????‘isRoot‘0...??????是否是根節點,0不是,1是
????‘isLeaf‘0...??????是否是葉子節點
????‘isLeft‘0...??????是否是左孩子
????‘isRight‘0...?????是否是右孩子?用于搜索時找兄弟結點
????‘hasLeft‘0...?????是否有左孩子
????‘hasRight‘0...????是否有右孩子
????‘parent‘-1...?????父親結點,用于搜索時回溯
????‘val‘-1...????????切分點坐標
????‘left‘-1...???????左節點(依然是結構體)
????‘right‘-1...??????右節點
????‘leftSet‘-1...????分到右邊的點集(矩陣)-1表示空集
????‘rightSet‘-1...???分到左邊的點集(矩陣),-1表示空集?
????‘r‘-1...??????????切分維度);
????‘visited‘0....?????搜索時是否訪問標志),0為未訪問,1為訪問過
????‘index‘-1?...??????下標
????);??????????????????%節點結構體模板
dim?=?size(X1)-1;????%數據點的維度
num?=?size(X2);????%數據集點數
node?=?currentNode;
node.r?=?r;
if?num?==?1
????%數據集中只有一個點
????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
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????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個文件信息
- 上一篇:剛體彈道程序,simuli
nk - 下一篇:擬一維噴管流動的數值解MATLAB程序
評論
共有 條評論