srchbbtknn.html
来自「一个关于数据聚类和模式识别的程序,在生物化学,化学中因该都可以用到.希望对大家有」· HTML 代码 · 共 108 行
HTML
108 行
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"><html><head> <title>Description of srchBBTknn</title> <meta name="keywords" content="srchBBTknn"> <meta name="description" content="BBTKNN Branch-and-bound tree search for k nearest neighbor"> <meta http-equiv="Content-Type" content="text/html; charset=big5"> <meta name="generator" content="m2html © 2003 Guillaume Flandin"> <meta name="robots" content="index, follow"> <link type="text/css" rel="stylesheet" href="../m2html.css"></head><body><a name="_top"></a><div><a href="../index.html">Home</a> > <a href="index.html">dcpr</a> > srchBBTknn.m</div><!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png"> Master index</a></td><td align="right"><a href="index.html">Index for dcpr <img alt=">" border="0" src="../right.png"></a></td></tr></table>--><h1>srchBBTknn</h1><h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="box"><strong>BBTKNN Branch-and-bound tree search for k nearest neighbor</strong></div><h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="box"><strong>function [NNINDEX, NNDIST, DISTCOMPCOUNT] = srchbbtknn(vec, tree, alldata, k) </strong></div><h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="fragment"><pre class="comment"> BBTKNN Branch-and-bound tree search for k nearest neighbor</pre></div><!-- crossreference --><h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>This function calls:<ul style="list-style-image:url(../matlabicon.gif)"></ul>This function is called by:<ul style="list-style-image:url(../matlabicon.gif)"></ul><!-- crossreference --><h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><ul style="list-style-image:url(../matlabicon.gif)"><li><a href="#_sub1" class="code">function treesearch(vec, tree, index, alldata)</a></li><li><a href="#_sub2" class="code">function out = distance(vec1, vec2)</a></li><li><a href="#_sub3" class="code">function [nnindex, nndist] = insert(nnindex, nndist, index, dist);</a></li></ul><h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2><div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [NNINDEX, NNDIST, DISTCOMPCOUNT] = srchbbtknn(vec, tree, alldata, k)</a>0002 <span class="comment">% BBTKNN Branch-and-bound tree search for k nearest neighbor</span>0003 0004 <span class="comment">% Roger Jang, 20000114</span>0005 0006 <span class="keyword">global</span> NNINDEX <span class="comment">% Nearest neighbor index</span>0007 <span class="keyword">global</span> NNDIST <span class="comment">% Nearest neighbor distance</span>0008 <span class="keyword">global</span> DISTCOMPCOUNT <span class="comment">% No. of distance computation</span>0009 0010 NNINDEX = nan*ones(1, k);0011 NNDIST = inf*ones(1, k);0012 DISTCOMPCOUNT = 0;0013 0014 <a href="#_sub1" class="code" title="subfunction treesearch(vec, tree, index, alldata)">treesearch</a>(vec, tree, 1, alldata);0015 0016 <span class="comment">% ====== Definition of treesearch() subfunction</span>0017 <a name="_sub1" href="#_subfunctions" class="code">function treesearch(vec, tree, index, alldata)</a>0018 <span class="keyword">global</span> NNINDEX NNDIST DISTCOMPCOUNT0019 <span class="comment">% ====== According to rule 1</span>0020 <span class="keyword">if</span> <a href="#_sub2" class="code" title="subfunction out = distance(vec1, vec2)">distance</a>(vec, tree(index).mean) >= max(NNDIST)+tree(index).radius, 0021 <span class="comment">% fprintf('Node %g is skipped.\n', index);</span>0022 <span class="keyword">return</span>;0023 <span class="keyword">end</span>0024 0025 <span class="keyword">if</span> ~isempty(tree(index).child),0026 <span class="comment">% ====== Recursion into the child nodes</span>0027 <span class="keyword">for</span> i=tree(index).child,0028 <a href="#_sub1" class="code" title="subfunction treesearch(vec, tree, index, alldata)">treesearch</a>(vec, tree, i, alldata);0029 <span class="keyword">end</span>0030 <span class="keyword">else</span>0031 <span class="comment">% ====== Check each data item</span>0032 dataindex = tree(index).data;0033 dist2mean = tree(index).dist2mean;0034 <span class="keyword">for</span> i = 1:length(dataindex),0035 <span class="comment">% ====== According to rule 2</span>0036 <span class="keyword">if</span> <a href="#_sub2" class="code" title="subfunction out = distance(vec1, vec2)">distance</a>(vec, tree(index).mean) < max(NNDIST)+dist2mean(i),0037 temp = <a href="#_sub2" class="code" title="subfunction out = distance(vec1, vec2)">distance</a>(vec, alldata(dataindex(i), :));0038 <span class="keyword">if</span> temp < max(NNDIST) <span class="comment">% Insert into NNDIST</span>0039 [NNINDEX, NNDIST] = <a href="#_sub3" class="code" title="subfunction [nnindex, nndist] = insert(nnindex, nndist, index, dist);">insert</a>(NNINDEX, NNDIST, dataindex(i), temp);0040 0041 <span class="keyword">end</span>0042 DISTCOMPCOUNT = DISTCOMPCOUNT + 1;0043 <span class="keyword">end</span>0044 <span class="keyword">end</span>0045 <span class="keyword">end</span>0046 0047 <span class="comment">% ====== Definition of distance() subfunction</span>0048 <a name="_sub2" href="#_subfunctions" class="code">function out = distance(vec1, vec2)</a>0049 out = norm(vec1-vec2);0050 0051 <span class="comment">% ====== Definition of insert() subfunction</span>0052 <a name="_sub3" href="#_subfunctions" class="code">function [nnindex, nndist] = insert(nnindex, nndist, index, dist);</a>0053 <span class="comment">% Insert dist into nn dist, which is ordered increasingly</span>0054 <span class="comment">% Also insert the index into nnindex accordingly.</span>0055 <span class="comment">% dist must be smaller than max(nndist).</span>0056 index1 = find(nndist <= dist);0057 index2 = 1:length(nndist);0058 index2(index1) = [];0059 nndist = [nndist(index1), dist, nndist(index2(1:end-1))];0060 nnindex = [nnindex(index1), index, nnindex(index2(1:end-1))];</pre></div><hr><address>Generated on Thu 30-Oct-2008 12:53:56 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> © 2003</address></body></html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?