svf-tools 1.0.285 → 1.0.286
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.TXT +6 -4
- package/SVF-doxygen/html/html/dir_63dba4c559aa5986900c35e27974bafc.html +83 -0
- package/SVF-doxygen/html/html/dir_97aefd0d527b934f1d99a682da8fe6a9.html +2 -0
- package/SVF-doxygen/html/html/dir_d1b325ac671111a54e189ae033ba710d.html +87 -0
- package/SVF-doxygen/html/html/dir_d44c64559bbebec7f509842c48db8b23.html +2 -0
- package/SVF-doxygen/html/html/fastcluster_8cpp.html +263 -0
- package/SVF-doxygen/html/html/fastcluster_8cpp_source.html +88 -0
- package/SVF-doxygen/html/html/fastcluster_8h.html +278 -0
- package/SVF-doxygen/html/html/fastcluster_8h_source.html +86 -0
- package/SVF-doxygen/html/html/fastcluster__R__dm_8cpp_8inc.html +79 -0
- package/SVF-doxygen/html/html/fastcluster__R__dm_8cpp_8inc_source.html +77 -0
- package/SVF-doxygen/html/html/fastcluster__dm_8cpp_8inc.html +89 -0
- package/SVF-doxygen/html/html/fastcluster__dm_8cpp_8inc_source.html +80 -0
- package/SVF-doxygen/html/html/files.html +220 -214
- package/SVF-doxygen/html/html/globals_c.html +82 -74
- package/SVF-doxygen/html/html/globals_enum.html +3 -0
- package/SVF-doxygen/html/html/globals_eval.html +19 -0
- package/SVF-doxygen/html/html/globals_f.html +6 -3
- package/SVF-doxygen/html/html/globals_func_c.html +46 -38
- package/SVF-doxygen/html/html/globals_func_f.html +3 -0
- package/SVF-doxygen/html/html/globals_func_h.html +4 -0
- package/SVF-doxygen/html/html/globals_h.html +22 -0
- package/SVF-doxygen/html/html/globals_r.html +3 -3
- package/SVF-doxygen/html/html/globals_s.html +7 -9
- package/SVF-doxygen/html/html/menudata.js +1 -0
- package/SVF-doxygen/html/html/search/all_12.js +1 -1
- package/SVF-doxygen/html/html/search/all_13.js +4 -4
- package/SVF-doxygen/html/html/search/all_3.js +2 -0
- package/SVF-doxygen/html/html/search/all_6.js +5 -0
- package/SVF-doxygen/html/html/search/all_8.js +7 -0
- package/SVF-doxygen/html/html/search/enums_4.js +1 -2
- package/SVF-doxygen/html/html/search/enums_5.js +2 -2
- package/SVF-doxygen/html/html/search/enums_6.js +2 -3
- package/SVF-doxygen/html/html/search/enums_7.js +3 -6
- package/SVF-doxygen/html/html/search/enums_8.js +6 -1
- package/SVF-doxygen/html/html/search/enums_9.js +1 -5
- package/SVF-doxygen/html/html/search/enums_a.js +5 -1
- package/SVF-doxygen/html/html/search/enums_b.js +1 -4
- package/SVF-doxygen/html/html/search/enums_c.html +26 -0
- package/SVF-doxygen/html/html/search/enums_c.js +7 -0
- package/SVF-doxygen/html/html/search/enumvalues_7.js +5 -0
- package/SVF-doxygen/html/html/search/files_5.js +4 -0
- package/SVF-doxygen/html/html/search/functions_2.js +2 -0
- package/SVF-doxygen/html/html/search/functions_5.js +1 -0
- package/SVF-doxygen/html/html/search/functions_7.js +1 -0
- package/SVF-doxygen/html/html/search/searchdata.js +1 -1
- package/include/FastCluster/LICENSE.TXT +13 -0
- package/include/FastCluster/fastcluster.h +79 -0
- package/lib/CMakeLists.txt +4 -1
- package/lib/FastCluster/LICENSE.TXT +13 -0
- package/lib/FastCluster/fastcluster.cpp +170 -0
- package/lib/FastCluster/fastcluster_R_dm.cpp.inc +115 -0
- package/lib/FastCluster/fastcluster_dm.cpp.inc +1795 -0
- package/package.json +1 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
6
|
+
<meta name="generator" content="Doxygen 1.8.13"/>
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
8
|
+
<title>Static Value-Flow Analysis: /home/runner/work/SVF/SVF/lib/FastCluster/fastcluster.cpp Source File</title>
|
|
9
|
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
10
|
+
<script type="text/javascript" src="jquery.js"></script>
|
|
11
|
+
<script type="text/javascript" src="dynsections.js"></script>
|
|
12
|
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
13
|
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
14
|
+
<script type="text/javascript" src="search/search.js"></script>
|
|
15
|
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
19
|
+
<div id="titlearea">
|
|
20
|
+
<table cellspacing="0" cellpadding="0">
|
|
21
|
+
<tbody>
|
|
22
|
+
<tr style="height: 56px;">
|
|
23
|
+
<td id="projectalign" style="padding-left: 0.5em;">
|
|
24
|
+
<div id="projectname">Static Value-Flow Analysis
|
|
25
|
+
</div>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
</tbody>
|
|
29
|
+
</table>
|
|
30
|
+
</div>
|
|
31
|
+
<!-- end header part -->
|
|
32
|
+
<!-- Generated by Doxygen 1.8.13 -->
|
|
33
|
+
<script type="text/javascript">
|
|
34
|
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
35
|
+
</script>
|
|
36
|
+
<script type="text/javascript" src="menudata.js"></script>
|
|
37
|
+
<script type="text/javascript" src="menu.js"></script>
|
|
38
|
+
<script type="text/javascript">
|
|
39
|
+
$(function() {
|
|
40
|
+
initMenu('',true,false,'search.php','Search');
|
|
41
|
+
$(document).ready(function() { init_search(); });
|
|
42
|
+
});
|
|
43
|
+
</script>
|
|
44
|
+
<div id="main-nav"></div>
|
|
45
|
+
<!-- window showing the filter options -->
|
|
46
|
+
<div id="MSearchSelectWindow"
|
|
47
|
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
48
|
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
49
|
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- iframe showing the search results (closed by default) -->
|
|
53
|
+
<div id="MSearchResultsWindow">
|
|
54
|
+
<iframe src="javascript:void(0)" frameborder="0"
|
|
55
|
+
name="MSearchResults" id="MSearchResults">
|
|
56
|
+
</iframe>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div id="nav-path" class="navpath">
|
|
60
|
+
<ul>
|
|
61
|
+
<li class="navelem"><a class="el" href="dir_97aefd0d527b934f1d99a682da8fe6a9.html">lib</a></li><li class="navelem"><a class="el" href="dir_d1b325ac671111a54e189ae033ba710d.html">FastCluster</a></li> </ul>
|
|
62
|
+
</div>
|
|
63
|
+
</div><!-- top -->
|
|
64
|
+
<div class="header">
|
|
65
|
+
<div class="headertitle">
|
|
66
|
+
<div class="title">fastcluster.cpp</div> </div>
|
|
67
|
+
</div><!--header-->
|
|
68
|
+
<div class="contents">
|
|
69
|
+
<a href="fastcluster_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// C++ standalone verion of fastcluster by Daniel Müllner</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">//</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// Copyright: Christoph Dalitz, 2020</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Daniel Müllner, 2011</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// License: BSD style license</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">// (see the file LICENSE for details)</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">//</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include <assert.h></span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include <vector></span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include <algorithm></span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "<a class="code" href="fastcluster_8h.html">FastCluster/fastcluster.h</a>"</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// Code by Daniel Müllner</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// workaround to make it usable as a standalone version (without R)</span></div><div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="fastcluster_8cpp.html#a8abcd9d66492e761592578e82ce2cba0"> 19</a></span> <span class="keywordtype">bool</span> <a class="code" href="fastcluster_8cpp.html#a8abcd9d66492e761592578e82ce2cba0">fc_isnan</a>(<span class="keywordtype">double</span> x) { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="fastcluster__dm_8cpp_8inc.html">fastcluster_dm.cpp.inc</a>"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "<a class="code" href="fastcluster__R__dm_8cpp_8inc.html">fastcluster_R_dm.cpp.inc</a>"</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">//</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// Assigns cluster labels (0, ..., nclust-1) to the n points such</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">// that the cluster result is split into nclust clusters.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">//</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">// Input arguments:</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">// n = number of observables</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">// merge = clustering result in R format</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">// nclust = number of clusters</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">// Output arguments:</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// labels = allocated integer array of size n for result</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">//</span></div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="fastcluster_8cpp.html#a4815993b37ce6e177c9838584e4cda24"> 34</a></span> <span class="keywordtype">void</span> <a class="code" href="fastcluster_8cpp.html#a4815993b37ce6e177c9838584e4cda24">cutree_k</a>(<span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span>* merge, <span class="keywordtype">int</span> nclust, <span class="keywordtype">int</span>* labels) {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordtype">int</span> k,m1,m2,j,l;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (nclust > n || nclust < 2) {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">for</span> (j=0; j<n; j++) labels[j] = 0;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// assign to each observable the number of its last merge step</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">// beware: indices of observables in merge start at 1 (R convention)</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  std::vector<int> last_merge(n, 0);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">for</span> (k=1; k<=(n-nclust); k++) {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// (m1,m2) = merge[k,]</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  m1 = merge[k-1];</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  m2 = merge[n-1+k-1];</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (m1 < 0 && m2 < 0) { <span class="comment">// both single observables</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  last_merge[-m1-1] = last_merge[-m2-1] = k;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m1 < 0 || m2 < 0) { <span class="comment">// one is a cluster</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">if</span>(m1 < 0) { j = -m1; m1 = m2; } <span class="keywordflow">else</span> j = -m2;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// merging single observable and cluster</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">for</span>(l = 0; l < n; l++)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> (last_merge[l] == m1)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  last_merge[l] = k;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  last_merge[j-1] = k;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">else</span> { <span class="comment">// both cluster</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">for</span>(l=0; l < n; l++) {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">if</span>( last_merge[l] == m1 || last_merge[l] == m2 )</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  last_merge[l] = k;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="comment">// assign cluster labels</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">int</span> label = 0;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  std::vector<int> z(n,-1);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">for</span> (j=0; j<n; j++) {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (last_merge[j] == 0) { <span class="comment">// still singleton</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  labels[j] = label++;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (z[last_merge[j]] < 0) {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  z[last_merge[j]] = label++;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  labels[j] = z[last_merge[j]];</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment">//</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment">// Assigns cluster labels (0, ..., nclust-1) to the n points such</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// that the hierarchical clustering is stopped when cluster distance >= cdist</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">//</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// Input arguments:</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="comment">// n = number of observables</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">// merge = clustering result in R format</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">// height = cluster distance at each merge step</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// cdist = cutoff cluster distance</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="comment">// Output arguments:</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">// labels = allocated integer array of size n for result</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">//</span></div><div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="fastcluster_8cpp.html#a8dbbd465af9ed88a066301ac83ce6961"> 96</a></span> <span class="keywordtype">void</span> <a class="code" href="fastcluster_8cpp.html#a8dbbd465af9ed88a066301ac83ce6961">cutree_cdist</a>(<span class="keywordtype">int</span> n, <span class="keyword">const</span> <span class="keywordtype">int</span>* merge, <span class="keywordtype">double</span>* height, <span class="keywordtype">double</span> cdist, <span class="keywordtype">int</span>* labels) {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordtype">int</span> k;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">for</span> (k=0; k<(n-1); k++) {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span> (height[k] >= cdist) {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="fastcluster_8cpp.html#a4815993b37ce6e177c9838584e4cda24">cutree_k</a>(n, merge, n-k, labels);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment">//</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">// Hierarchical clustering with one of Daniel Muellner's fast algorithms</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">//</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// Input arguments:</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment">// n = number of observables</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// distmat = condensed distance matrix, i.e. an n*(n-1)/2 array representing</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">// the upper triangle (without diagonal elements) of the distance</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment">// matrix, e.g. for n=4:</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment">// d00 d01 d02 d03</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">// d10 d11 d12 d13 -> d01 d02 d03 d12 d13 d23</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// d20 d21 d22 d23</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment">// d30 d31 d32 d33</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment">// method = cluster metric (see enum hclust_fast_methods)</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">// Output arguments:</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// merge = allocated (n-1)x2 matrix (2*(n-1) array) for storing result.</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// Result follows R hclust convention:</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// - observabe indices start with one</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// - merge[i][] contains the merged nodes in step i</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// - merge[i][j] is negative when the node is an atom</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">// height = allocated (n-1) array with distances at each merge step</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// Return code:</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// 0 = ok</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// 1 = invalid method</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">//</span></div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="fastcluster_8cpp.html#acccd226cbdf0944b5c9e24c84a4599c9"> 133</a></span> <span class="keywordtype">int</span> <a class="code" href="fastcluster_8cpp.html#acccd226cbdf0944b5c9e24c84a4599c9">hclust_fast</a>(<span class="keywordtype">int</span> n, <span class="keywordtype">double</span>* distmat, <span class="keywordtype">int</span> method, <span class="keywordtype">int</span>* merge, <span class="keywordtype">double</span>* height) {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="comment">// call appropriate culstering function</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  cluster_result Z2(n-1);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a>) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="comment">// single link</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  MST_linkage_core(n, distmat, Z2);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a>) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// complete link</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  NN_chain_core<METHOD_METR_COMPLETE, t_float>(n, distmat, NULL, Z2);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a>) {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// best average distance</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordtype">double</span>* members = <span class="keyword">new</span> <span class="keywordtype">double</span>[n];</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i<n; i++) members[i] = 1;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  NN_chain_core<METHOD_METR_AVERAGE, t_float>(n, distmat, members, Z2);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">delete</span>[] members;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474">HCLUST_METHOD_MEDIAN</a>) {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="comment">// best median distance (beware: O(n^3))</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  generic_linkage<METHOD_METR_MEDIAN, t_float>(n, distmat, NULL, Z2);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordtype">int</span>* order = <span class="keyword">new</span> <span class="keywordtype">int</span>[n];</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474">HCLUST_METHOD_MEDIAN</a>) {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  generate_R_dendrogram<true>(merge, height, order, Z2, n);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  generate_R_dendrogram<false>(merge, height, order, Z2, n);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">delete</span>[] order; <span class="comment">// only needed for visualization</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div><div class="ttc" id="fastcluster_8cpp_html_a8abcd9d66492e761592578e82ce2cba0"><div class="ttname"><a href="fastcluster_8cpp.html#a8abcd9d66492e761592578e82ce2cba0">fc_isnan</a></div><div class="ttdeci">bool fc_isnan(double x)</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8cpp_source.html#l00019">fastcluster.cpp:19</a></div></div>
|
|
70
|
+
<div class="ttc" id="fastcluster_8cpp_html_a8dbbd465af9ed88a066301ac83ce6961"><div class="ttname"><a href="fastcluster_8cpp.html#a8dbbd465af9ed88a066301ac83ce6961">cutree_cdist</a></div><div class="ttdeci">void cutree_cdist(int n, const int *merge, double *height, double cdist, int *labels)</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8cpp_source.html#l00096">fastcluster.cpp:96</a></div></div>
|
|
71
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00069">fastcluster.h:69</a></div></div>
|
|
72
|
+
<div class="ttc" id="fastcluster__dm_8cpp_8inc_html"><div class="ttname"><a href="fastcluster__dm_8cpp_8inc.html">fastcluster_dm.cpp.inc</a></div></div>
|
|
73
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474">HCLUST_METHOD_MEDIAN</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00073">fastcluster.h:73</a></div></div>
|
|
74
|
+
<div class="ttc" id="fastcluster__R__dm_8cpp_8inc_html"><div class="ttname"><a href="fastcluster__R__dm_8cpp_8inc.html">fastcluster_R_dm.cpp.inc</a></div></div>
|
|
75
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00067">fastcluster.h:67</a></div></div>
|
|
76
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00071">fastcluster.h:71</a></div></div>
|
|
77
|
+
<div class="ttc" id="fastcluster_8cpp_html_a4815993b37ce6e177c9838584e4cda24"><div class="ttname"><a href="fastcluster_8cpp.html#a4815993b37ce6e177c9838584e4cda24">cutree_k</a></div><div class="ttdeci">void cutree_k(int n, const int *merge, int nclust, int *labels)</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8cpp_source.html#l00034">fastcluster.cpp:34</a></div></div>
|
|
78
|
+
<div class="ttc" id="fastcluster_8h_html"><div class="ttname"><a href="fastcluster_8h.html">fastcluster.h</a></div></div>
|
|
79
|
+
<div class="ttc" id="fastcluster_8cpp_html_acccd226cbdf0944b5c9e24c84a4599c9"><div class="ttname"><a href="fastcluster_8cpp.html#acccd226cbdf0944b5c9e24c84a4599c9">hclust_fast</a></div><div class="ttdeci">int hclust_fast(int n, double *distmat, int method, int *merge, double *height)</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8cpp_source.html#l00133">fastcluster.cpp:133</a></div></div>
|
|
80
|
+
</div><!-- fragment --></div><!-- contents -->
|
|
81
|
+
<!-- start footer part -->
|
|
82
|
+
<hr class="footer"/><address class="footer"><small>
|
|
83
|
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
|
84
|
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
85
|
+
</a> 1.8.13
|
|
86
|
+
</small></address>
|
|
87
|
+
</body>
|
|
88
|
+
</html>
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
6
|
+
<meta name="generator" content="Doxygen 1.8.13"/>
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
8
|
+
<title>Static Value-Flow Analysis: /home/runner/work/SVF/SVF/include/FastCluster/fastcluster.h File Reference</title>
|
|
9
|
+
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
10
|
+
<script type="text/javascript" src="jquery.js"></script>
|
|
11
|
+
<script type="text/javascript" src="dynsections.js"></script>
|
|
12
|
+
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
13
|
+
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
14
|
+
<script type="text/javascript" src="search/search.js"></script>
|
|
15
|
+
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
19
|
+
<div id="titlearea">
|
|
20
|
+
<table cellspacing="0" cellpadding="0">
|
|
21
|
+
<tbody>
|
|
22
|
+
<tr style="height: 56px;">
|
|
23
|
+
<td id="projectalign" style="padding-left: 0.5em;">
|
|
24
|
+
<div id="projectname">Static Value-Flow Analysis
|
|
25
|
+
</div>
|
|
26
|
+
</td>
|
|
27
|
+
</tr>
|
|
28
|
+
</tbody>
|
|
29
|
+
</table>
|
|
30
|
+
</div>
|
|
31
|
+
<!-- end header part -->
|
|
32
|
+
<!-- Generated by Doxygen 1.8.13 -->
|
|
33
|
+
<script type="text/javascript">
|
|
34
|
+
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
|
35
|
+
</script>
|
|
36
|
+
<script type="text/javascript" src="menudata.js"></script>
|
|
37
|
+
<script type="text/javascript" src="menu.js"></script>
|
|
38
|
+
<script type="text/javascript">
|
|
39
|
+
$(function() {
|
|
40
|
+
initMenu('',true,false,'search.php','Search');
|
|
41
|
+
$(document).ready(function() { init_search(); });
|
|
42
|
+
});
|
|
43
|
+
</script>
|
|
44
|
+
<div id="main-nav"></div>
|
|
45
|
+
<!-- window showing the filter options -->
|
|
46
|
+
<div id="MSearchSelectWindow"
|
|
47
|
+
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
48
|
+
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
49
|
+
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<!-- iframe showing the search results (closed by default) -->
|
|
53
|
+
<div id="MSearchResultsWindow">
|
|
54
|
+
<iframe src="javascript:void(0)" frameborder="0"
|
|
55
|
+
name="MSearchResults" id="MSearchResults">
|
|
56
|
+
</iframe>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div id="nav-path" class="navpath">
|
|
60
|
+
<ul>
|
|
61
|
+
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_63dba4c559aa5986900c35e27974bafc.html">FastCluster</a></li> </ul>
|
|
62
|
+
</div>
|
|
63
|
+
</div><!-- top -->
|
|
64
|
+
<div class="header">
|
|
65
|
+
<div class="summary">
|
|
66
|
+
<a href="#enum-members">Enumerations</a> |
|
|
67
|
+
<a href="#func-members">Functions</a> </div>
|
|
68
|
+
<div class="headertitle">
|
|
69
|
+
<div class="title">fastcluster.h File Reference</div> </div>
|
|
70
|
+
</div><!--header-->
|
|
71
|
+
<div class="contents">
|
|
72
|
+
|
|
73
|
+
<p><a href="fastcluster_8h_source.html">Go to the source code of this file.</a></p>
|
|
74
|
+
<table class="memberdecls">
|
|
75
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
|
|
76
|
+
Enumerations</h2></td></tr>
|
|
77
|
+
<tr class="memitem:a4205a14ad66b3320d2e94c61d74913dd"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a> { <br />
|
|
78
|
+
  <a class="el" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a> = 0,
|
|
79
|
+
<a class="el" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a> = 1,
|
|
80
|
+
<a class="el" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a> = 2,
|
|
81
|
+
<a class="el" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474">HCLUST_METHOD_MEDIAN</a> = 3,
|
|
82
|
+
<br />
|
|
83
|
+
  <a class="el" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a> = 4
|
|
84
|
+
<br />
|
|
85
|
+
}</td></tr>
|
|
86
|
+
<tr class="separator:a4205a14ad66b3320d2e94c61d74913dd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
87
|
+
</table><table class="memberdecls">
|
|
88
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
|
89
|
+
Functions</h2></td></tr>
|
|
90
|
+
<tr class="memitem:a4815993b37ce6e177c9838584e4cda24"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="fastcluster_8h.html#a4815993b37ce6e177c9838584e4cda24">cutree_k</a> (int n, const int *merge, int nclust, int *labels)</td></tr>
|
|
91
|
+
<tr class="separator:a4815993b37ce6e177c9838584e4cda24"><td class="memSeparator" colspan="2"> </td></tr>
|
|
92
|
+
<tr class="memitem:a8dbbd465af9ed88a066301ac83ce6961"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="fastcluster_8h.html#a8dbbd465af9ed88a066301ac83ce6961">cutree_cdist</a> (int n, const int *merge, double *height, double cdist, int *labels)</td></tr>
|
|
93
|
+
<tr class="separator:a8dbbd465af9ed88a066301ac83ce6961"><td class="memSeparator" colspan="2"> </td></tr>
|
|
94
|
+
<tr class="memitem:acccd226cbdf0944b5c9e24c84a4599c9"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="fastcluster_8h.html#acccd226cbdf0944b5c9e24c84a4599c9">hclust_fast</a> (int n, double *distmat, int method, int *merge, double *height)</td></tr>
|
|
95
|
+
<tr class="separator:acccd226cbdf0944b5c9e24c84a4599c9"><td class="memSeparator" colspan="2"> </td></tr>
|
|
96
|
+
</table>
|
|
97
|
+
<h2 class="groupheader">Enumeration Type Documentation</h2>
|
|
98
|
+
<a id="a4205a14ad66b3320d2e94c61d74913dd"></a>
|
|
99
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a4205a14ad66b3320d2e94c61d74913dd">◆ </a></span>hclust_fast_methods</h2>
|
|
100
|
+
|
|
101
|
+
<div class="memitem">
|
|
102
|
+
<div class="memproto">
|
|
103
|
+
<table class="memname">
|
|
104
|
+
<tr>
|
|
105
|
+
<td class="memname">enum <a class="el" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dd">hclust_fast_methods</a></td>
|
|
106
|
+
</tr>
|
|
107
|
+
</table>
|
|
108
|
+
</div><div class="memdoc">
|
|
109
|
+
<table class="fieldtable">
|
|
110
|
+
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024"></a>HCLUST_METHOD_SINGLE </td><td class="fielddoc"></td></tr>
|
|
111
|
+
<tr><td class="fieldname"><a id="a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4"></a>HCLUST_METHOD_COMPLETE </td><td class="fielddoc"></td></tr>
|
|
112
|
+
<tr><td class="fieldname"><a id="a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115"></a>HCLUST_METHOD_AVERAGE </td><td class="fielddoc"></td></tr>
|
|
113
|
+
<tr><td class="fieldname"><a id="a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474"></a>HCLUST_METHOD_MEDIAN </td><td class="fielddoc"></td></tr>
|
|
114
|
+
<tr><td class="fieldname"><a id="a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618"></a>HCLUST_METHOD_SVF_BEST </td><td class="fielddoc"></td></tr>
|
|
115
|
+
</table>
|
|
116
|
+
|
|
117
|
+
<p class="definition">Definition at line <a class="el" href="fastcluster_8h_source.html#l00065">65</a> of file <a class="el" href="fastcluster_8h_source.html">fastcluster.h</a>.</p>
|
|
118
|
+
<div class="fragment"><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// single link with the minimum spanning tree algorithm (Rohlf, 1973)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a> = 0,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// complete link with the nearest-neighbor-chain algorithm (Murtagh, 1984)</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a> = 1,</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// omplete link with the nearest-neighbor-chain algorithm (Murtagh, 1984)</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a> = 2,</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="comment">// median link with the generic algorithm (Müllner, 2011)</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474">HCLUST_METHOD_MEDIAN</a> = 3,</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// To indicate to try all methods and pick the best.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a> = 4</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> };</div><div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00069">fastcluster.h:69</a></div></div>
|
|
119
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474">HCLUST_METHOD_MEDIAN</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00073">fastcluster.h:73</a></div></div>
|
|
120
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda66ab3fde95842ef6da0dae1f702a9618">HCLUST_METHOD_SVF_BEST</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00075">fastcluster.h:75</a></div></div>
|
|
121
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00067">fastcluster.h:67</a></div></div>
|
|
122
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00071">fastcluster.h:71</a></div></div>
|
|
123
|
+
</div><!-- fragment -->
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
<h2 class="groupheader">Function Documentation</h2>
|
|
127
|
+
<a id="a8dbbd465af9ed88a066301ac83ce6961"></a>
|
|
128
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a8dbbd465af9ed88a066301ac83ce6961">◆ </a></span>cutree_cdist()</h2>
|
|
129
|
+
|
|
130
|
+
<div class="memitem">
|
|
131
|
+
<div class="memproto">
|
|
132
|
+
<table class="memname">
|
|
133
|
+
<tr>
|
|
134
|
+
<td class="memname">void cutree_cdist </td>
|
|
135
|
+
<td>(</td>
|
|
136
|
+
<td class="paramtype">int </td>
|
|
137
|
+
<td class="paramname"><em>n</em>, </td>
|
|
138
|
+
</tr>
|
|
139
|
+
<tr>
|
|
140
|
+
<td class="paramkey"></td>
|
|
141
|
+
<td></td>
|
|
142
|
+
<td class="paramtype">const int * </td>
|
|
143
|
+
<td class="paramname"><em>merge</em>, </td>
|
|
144
|
+
</tr>
|
|
145
|
+
<tr>
|
|
146
|
+
<td class="paramkey"></td>
|
|
147
|
+
<td></td>
|
|
148
|
+
<td class="paramtype">double * </td>
|
|
149
|
+
<td class="paramname"><em>height</em>, </td>
|
|
150
|
+
</tr>
|
|
151
|
+
<tr>
|
|
152
|
+
<td class="paramkey"></td>
|
|
153
|
+
<td></td>
|
|
154
|
+
<td class="paramtype">double </td>
|
|
155
|
+
<td class="paramname"><em>cdist</em>, </td>
|
|
156
|
+
</tr>
|
|
157
|
+
<tr>
|
|
158
|
+
<td class="paramkey"></td>
|
|
159
|
+
<td></td>
|
|
160
|
+
<td class="paramtype">int * </td>
|
|
161
|
+
<td class="paramname"><em>labels</em> </td>
|
|
162
|
+
</tr>
|
|
163
|
+
<tr>
|
|
164
|
+
<td></td>
|
|
165
|
+
<td>)</td>
|
|
166
|
+
<td></td><td></td>
|
|
167
|
+
</tr>
|
|
168
|
+
</table>
|
|
169
|
+
</div><div class="memdoc">
|
|
170
|
+
|
|
171
|
+
<p class="definition">Definition at line <a class="el" href="fastcluster_8cpp_source.html#l00096">96</a> of file <a class="el" href="fastcluster_8cpp_source.html">fastcluster.cpp</a>.</p>
|
|
172
|
+
<div class="fragment"><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordtype">int</span> k;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">for</span> (k=0; k<(n-1); k++) {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span> (height[k] >= cdist) {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="fastcluster_8cpp.html#a4815993b37ce6e177c9838584e4cda24">cutree_k</a>(n, merge, n-k, labels);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> }</div><div class="ttc" id="fastcluster_8cpp_html_a4815993b37ce6e177c9838584e4cda24"><div class="ttname"><a href="fastcluster_8cpp.html#a4815993b37ce6e177c9838584e4cda24">cutree_k</a></div><div class="ttdeci">void cutree_k(int n, const int *merge, int nclust, int *labels)</div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8cpp_source.html#l00034">fastcluster.cpp:34</a></div></div>
|
|
173
|
+
</div><!-- fragment -->
|
|
174
|
+
</div>
|
|
175
|
+
</div>
|
|
176
|
+
<a id="a4815993b37ce6e177c9838584e4cda24"></a>
|
|
177
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a4815993b37ce6e177c9838584e4cda24">◆ </a></span>cutree_k()</h2>
|
|
178
|
+
|
|
179
|
+
<div class="memitem">
|
|
180
|
+
<div class="memproto">
|
|
181
|
+
<table class="memname">
|
|
182
|
+
<tr>
|
|
183
|
+
<td class="memname">void cutree_k </td>
|
|
184
|
+
<td>(</td>
|
|
185
|
+
<td class="paramtype">int </td>
|
|
186
|
+
<td class="paramname"><em>n</em>, </td>
|
|
187
|
+
</tr>
|
|
188
|
+
<tr>
|
|
189
|
+
<td class="paramkey"></td>
|
|
190
|
+
<td></td>
|
|
191
|
+
<td class="paramtype">const int * </td>
|
|
192
|
+
<td class="paramname"><em>merge</em>, </td>
|
|
193
|
+
</tr>
|
|
194
|
+
<tr>
|
|
195
|
+
<td class="paramkey"></td>
|
|
196
|
+
<td></td>
|
|
197
|
+
<td class="paramtype">int </td>
|
|
198
|
+
<td class="paramname"><em>nclust</em>, </td>
|
|
199
|
+
</tr>
|
|
200
|
+
<tr>
|
|
201
|
+
<td class="paramkey"></td>
|
|
202
|
+
<td></td>
|
|
203
|
+
<td class="paramtype">int * </td>
|
|
204
|
+
<td class="paramname"><em>labels</em> </td>
|
|
205
|
+
</tr>
|
|
206
|
+
<tr>
|
|
207
|
+
<td></td>
|
|
208
|
+
<td>)</td>
|
|
209
|
+
<td></td><td></td>
|
|
210
|
+
</tr>
|
|
211
|
+
</table>
|
|
212
|
+
</div><div class="memdoc">
|
|
213
|
+
|
|
214
|
+
<p class="definition">Definition at line <a class="el" href="fastcluster_8cpp_source.html#l00034">34</a> of file <a class="el" href="fastcluster_8cpp_source.html">fastcluster.cpp</a>.</p>
|
|
215
|
+
<div class="fragment"><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  {</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordtype">int</span> k,m1,m2,j,l;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (nclust > n || nclust < 2) {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">for</span> (j=0; j<n; j++) labels[j] = 0;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  }</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// assign to each observable the number of its last merge step</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">// beware: indices of observables in merge start at 1 (R convention)</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  std::vector<int> last_merge(n, 0);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">for</span> (k=1; k<=(n-nclust); k++) {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="comment">// (m1,m2) = merge[k,]</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  m1 = merge[k-1];</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  m2 = merge[n-1+k-1];</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">if</span> (m1 < 0 && m2 < 0) { <span class="comment">// both single observables</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  last_merge[-m1-1] = last_merge[-m2-1] = k;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (m1 < 0 || m2 < 0) { <span class="comment">// one is a cluster</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">if</span>(m1 < 0) { j = -m1; m1 = m2; } <span class="keywordflow">else</span> j = -m2;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// merging single observable and cluster</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">for</span>(l = 0; l < n; l++)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span> (last_merge[l] == m1)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  last_merge[l] = k;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  last_merge[j-1] = k;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  }</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">else</span> { <span class="comment">// both cluster</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">for</span>(l=0; l < n; l++) {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">if</span>( last_merge[l] == m1 || last_merge[l] == m2 )</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  last_merge[l] = k;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  }</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  }</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="comment">// assign cluster labels</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">int</span> label = 0;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  std::vector<int> z(n,-1);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">for</span> (j=0; j<n; j++) {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (last_merge[j] == 0) { <span class="comment">// still singleton</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  labels[j] = label++;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (z[last_merge[j]] < 0) {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  z[last_merge[j]] = label++;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  labels[j] = z[last_merge[j]];</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> }</div></div><!-- fragment -->
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
<a id="acccd226cbdf0944b5c9e24c84a4599c9"></a>
|
|
219
|
+
<h2 class="memtitle"><span class="permalink"><a href="#acccd226cbdf0944b5c9e24c84a4599c9">◆ </a></span>hclust_fast()</h2>
|
|
220
|
+
|
|
221
|
+
<div class="memitem">
|
|
222
|
+
<div class="memproto">
|
|
223
|
+
<table class="memname">
|
|
224
|
+
<tr>
|
|
225
|
+
<td class="memname">int hclust_fast </td>
|
|
226
|
+
<td>(</td>
|
|
227
|
+
<td class="paramtype">int </td>
|
|
228
|
+
<td class="paramname"><em>n</em>, </td>
|
|
229
|
+
</tr>
|
|
230
|
+
<tr>
|
|
231
|
+
<td class="paramkey"></td>
|
|
232
|
+
<td></td>
|
|
233
|
+
<td class="paramtype">double * </td>
|
|
234
|
+
<td class="paramname"><em>distmat</em>, </td>
|
|
235
|
+
</tr>
|
|
236
|
+
<tr>
|
|
237
|
+
<td class="paramkey"></td>
|
|
238
|
+
<td></td>
|
|
239
|
+
<td class="paramtype">int </td>
|
|
240
|
+
<td class="paramname"><em>method</em>, </td>
|
|
241
|
+
</tr>
|
|
242
|
+
<tr>
|
|
243
|
+
<td class="paramkey"></td>
|
|
244
|
+
<td></td>
|
|
245
|
+
<td class="paramtype">int * </td>
|
|
246
|
+
<td class="paramname"><em>merge</em>, </td>
|
|
247
|
+
</tr>
|
|
248
|
+
<tr>
|
|
249
|
+
<td class="paramkey"></td>
|
|
250
|
+
<td></td>
|
|
251
|
+
<td class="paramtype">double * </td>
|
|
252
|
+
<td class="paramname"><em>height</em> </td>
|
|
253
|
+
</tr>
|
|
254
|
+
<tr>
|
|
255
|
+
<td></td>
|
|
256
|
+
<td>)</td>
|
|
257
|
+
<td></td><td></td>
|
|
258
|
+
</tr>
|
|
259
|
+
</table>
|
|
260
|
+
</div><div class="memdoc">
|
|
261
|
+
|
|
262
|
+
<p class="definition">Definition at line <a class="el" href="fastcluster_8cpp_source.html#l00133">133</a> of file <a class="el" href="fastcluster_8cpp_source.html">fastcluster.cpp</a>.</p>
|
|
263
|
+
<div class="fragment"><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="comment">// call appropriate culstering function</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  cluster_result Z2(n-1);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a>) {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="comment">// single link</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  MST_linkage_core(n, distmat, Z2);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a>) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// complete link</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  NN_chain_core<METHOD_METR_COMPLETE, t_float>(n, distmat, NULL, Z2);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a>) {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// best average distance</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordtype">double</span>* members = <span class="keyword">new</span> <span class="keywordtype">double</span>[n];</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i<n; i++) members[i] = 1;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  NN_chain_core<METHOD_METR_AVERAGE, t_float>(n, distmat, members, Z2);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keyword">delete</span>[] members;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  }</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474">HCLUST_METHOD_MEDIAN</a>) {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="comment">// best median distance (beware: O(n^3))</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  generic_linkage<METHOD_METR_MEDIAN, t_float>(n, distmat, NULL, Z2);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordtype">int</span>* order = <span class="keyword">new</span> <span class="keywordtype">int</span>[n];</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">if</span> (method == <a class="code" href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474">HCLUST_METHOD_MEDIAN</a>) {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  generate_R_dendrogram<true>(merge, height, order, Z2, n);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  generate_R_dendrogram<false>(merge, height, order, Z2, n);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">delete</span>[] order; <span class="comment">// only needed for visualization</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> }</div><div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda44ce22fdfc560f27242e9b8f8e7009f4">HCLUST_METHOD_COMPLETE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00069">fastcluster.h:69</a></div></div>
|
|
264
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddaa453b79910d9c6f7f57a179bcdf63474">HCLUST_METHOD_MEDIAN</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00073">fastcluster.h:73</a></div></div>
|
|
265
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913ddad16cc6362447cc32292c4af4c6fe8024">HCLUST_METHOD_SINGLE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00067">fastcluster.h:67</a></div></div>
|
|
266
|
+
<div class="ttc" id="fastcluster_8h_html_a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115"><div class="ttname"><a href="fastcluster_8h.html#a4205a14ad66b3320d2e94c61d74913dda3ab72664fc61704a1ba46bddbc347115">HCLUST_METHOD_AVERAGE</a></div><div class="ttdef"><b>Definition:</b> <a href="fastcluster_8h_source.html#l00071">fastcluster.h:71</a></div></div>
|
|
267
|
+
</div><!-- fragment -->
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
</div><!-- contents -->
|
|
271
|
+
<!-- start footer part -->
|
|
272
|
+
<hr class="footer"/><address class="footer"><small>
|
|
273
|
+
Generated by  <a href="http://www.doxygen.org/index.html">
|
|
274
|
+
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
|
275
|
+
</a> 1.8.13
|
|
276
|
+
</small></address>
|
|
277
|
+
</body>
|
|
278
|
+
</html>
|