aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcathook <b01902109@csie.ntu.edu.tw>2014-04-22 21:37:53 +0800
committercathook <b01902109@csie.ntu.edu.tw>2014-04-22 21:37:53 +0800
commit5d4e65d6209a078fce2ef094ff2cb812b040513e (patch)
treedb0b58b3192e69457b35671f88073e399a67f657
parentac6d2fcb7b1a77455895fa65b42502c9b29823fd (diff)
downloadmeow-5d4e65d6209a078fce2ef094ff2cb812b040513e.tar
meow-5d4e65d6209a078fce2ef094ff2cb812b040513e.tar.gz
meow-5d4e65d6209a078fce2ef094ff2cb812b040513e.tar.bz2
meow-5d4e65d6209a078fce2ef094ff2cb812b040513e.tar.lz
meow-5d4e65d6209a078fce2ef094ff2cb812b040513e.tar.xz
meow-5d4e65d6209a078fce2ef094ff2cb812b040513e.tar.zst
meow-5d4e65d6209a078fce2ef094ff2cb812b040513e.zip
update readme
-rw-r--r--Makefile1
-rw-r--r--README.asciidoc77
-rw-r--r--README.html297
-rw-r--r--description.asciidoc4
-rw-r--r--footer.asciidoc6
-rw-r--r--meowpp/dsa/KD_Tree.h3
-rw-r--r--meowpp/dsa/KD_Tree.hpp1
-rw-r--r--meowpp/dsa/SplayTree.h2
-rw-r--r--meowpp/dsa/VP_Tree.h9
-rwxr-xr-xreadme_generate.py26
10 files changed, 410 insertions, 16 deletions
diff --git a/Makefile b/Makefile
index e67d67a..1bb75c5 100644
--- a/Makefile
+++ b/Makefile
@@ -27,6 +27,7 @@ $(TEST)/meowpp: $(TEST)/meowpp.o \
$(TEST)/meowpp_SegmentTree.o \
$(TEST)/meowpp_MergeableHeap.o \
$(TEST)/meowpp_SplayTree.o \
+ $(TEST)/meowpp_VP_Tree.o \
$(CXX) -o $@ $(CXXFLAGS) $^
diff --git a/README.asciidoc b/README.asciidoc
index 3d93e0a..bdaaeee 100644
--- a/README.asciidoc
+++ b/README.asciidoc
@@ -32,6 +32,7 @@
** *KD_Tree.h* `class KD_Tree<Vector, Scalar>`
** *SegemenTree.h* `class SegmentTree<Value>`
** *SplayTree.h* `class SplayTree<Key, Value>`
+** *VP_Tree.h* `class VP_Tree<Vector, Scalar>`
* *oo/*
** *Register_Implement.h* `class RegisterInterface` ,
`class ImplementInterface`
@@ -264,6 +265,76 @@ size_t `number2`)| size_t | very fast
'''
+=== meow:: *VP_Tree<Vector, Scalar>* (C++ class)
+==== Description
+`VP_Tree` 用來維護由 *N個K維度向量所成的集合*,
+並可於該set中查找 *前i個離給定向量最接近的向量*. +
+不像 `KD_Tree` 二分樹每次都選擇一個維度去分, 分成小的跟大的,
+`VP_Tree` 每次選一個點, 將資料分成 離這個點近的, 跟離這個點遠的.
+至於怎麼選呢...., 嘛還沒研究, 先random
+
+.參考資料連結:
+* http://stevehanov.ca/blog/index.php?id=130[link]
+* http://pnylab.com/pny/papers/vptree/vptree[link]
+
+==== Template Class Operators Request
+[options="header",width="70%",cols="1>m,1<,3<s,5<,3<,15<",grid="rows"]
+|=====================================================================
+|Const?|Typename| Operator | Parameters | Return_Type| Description
+|const | Vector|operator[] |(size_t `n`) | Scalar | 取得第 `n` 維度量
+|const | Vector|operator= |(Vector `v`) | Vector& | copy operator
+|const | Vector|operator< |(Vector `v`) | bool | 權重比較
+|const | Scalar| 'Scalar' |(int `n`) | Scalar | 建構子,
+其中一定`n=0 or 4`
+|const | Scalar|operator* |(Scalar `s`) | Scalar | 相乘
+|const | Scalar|operator+ |(Scalar `s`) | Scalar | 相加
+|const | Scalar|operator- |(Scalar `s`) | Scalar | 相差
+|const | Scalar|operator- |( ) | Scalar | 取負號
+|const | Scalar|operator< |(Scalar `s`) | bool | 大小比較
+|=====================================================================
+
+==== Custom Type Definitions
+* `Vectors` <- `std::vector<Vector>`
+
+==== Support Methods
+
+* N <- `this` 中擁有的資料數
+* D <- `this` 資料維度
+
+[options="header",width="100%",cols="1>m,3>s,7<,3<,3^,20<",grid="rows"]
+|=====================================================================
+|Const?|Name | Parameters | Return_Type| Time_Complexity| Description
+||insert|(Vector const& `v`)|void| O(1)
+|將向量 `v` 加到set中
+||erase|(Vector const& `v`)|bool| O(N)
+|將向量 `v` 從set中移除, '~TODO:可以再優化~'
+||build|()|void|O(KN logN) or O(1)
+|檢查距上一次 `build()` 至今是否有 `insert/erase` 被呼叫,
+若有, 重新建樹, 否則不做事
+||forceBuild|()|void|O(KN logN)
+|重新建樹
+|const|query|(Vector const& `v`, +
+size_t `i`, +
+bool `cmp`)|Vectors
+|O(logN) ~Expected~
+|於set中找尋距離 `v` 前 `i` 近的向量, 並依照由近而遠的順序排序.
+如果有兩個向量 `v1`,`v2` 距離一樣, 且 `cmp` 為 `true` , 則直接依照
+`v1 < v2` 來決定誰在前面. 最後回傳一陣列包含所有解.
+||clear|()|void|O(1)
+|清空所有資料
+||reset|(size_t `dimension`)|size_t|O(1)
+|清空所有資料並且指定維度為 `max(1, dimension)` 並且回傳指定後的維度
+|=====================================================================
+
+[NOTE]
+========================================
+* 實測結果發覺比 `KD_Tree` 有效率多了...
+* 'TODO' `insert()`, `erase()` 算是未完成功能
+
+========================================
+
+'''
+
=== meow:: *KD_Tree<Vector, Scalar>* (C++ class)
==== Description
`KD_Tree` 全名k-dimension tree, 用來維護由 *N個K維度向量所成的集合*,
@@ -472,3 +543,9 @@ Value const& `delta`)
'''
+
+== Test
+
+
+== Bug Report / Contact
+ * E-Mail: cat.hook31894 \~在~ gmail.com
diff --git a/README.html b/README.html
index 2addc48..c002ad7 100644
--- a/README.html
+++ b/README.html
@@ -785,6 +785,11 @@ asciidoc.install(2);
<strong>SplayTree.h</strong> <span class="monospaced">class SplayTree&lt;Key, Value&gt;</span>
</p>
</li>
+<li>
+<p>
+<strong>VP_Tree.h</strong> <span class="monospaced">class VP_Tree&lt;Vector, Scalar&gt;</span>
+</p>
+</li>
</ul></div>
</li>
<li>
@@ -1409,11 +1414,26 @@ width:100%;
</div>
</div>
<div class="sect2">
-<h3 id="_meow_strong_kd_tree_lt_vector_scalar_gt_strong_c_class">meow:: <strong>KD_Tree&lt;Vector, Scalar&gt;</strong> (C++ class)</h3>
+<h3 id="_meow_strong_vp_tree_lt_vector_scalar_gt_strong_c_class">meow:: <strong>VP_Tree&lt;Vector, Scalar&gt;</strong> (C++ class)</h3>
<div class="sect3">
<h4 id="_description_6">Description</h4>
-<div class="paragraph"><p><span class="monospaced">KD_Tree</span> 全名k-dimension tree, 用來維護由 <strong>N個K維度向量所成的集合</strong>,
-並可於該set中查找 <strong>前i個離給定向量最接近的向量</strong></p></div>
+<div class="paragraph"><p><span class="monospaced">VP_Tree</span> 用來維護由 <strong>N個K維度向量所成的集合</strong>,
+並可於該set中查找 <strong>前i個離給定向量最接近的向量</strong>.<br>
+不像 <span class="monospaced">KD_Tree</span> 二分樹每次都選擇一個維度去分, 分成小的跟大的,
+<span class="monospaced">VP_Tree</span> 每次選一個點, 將資料分成 離這個點近的, 跟離這個點遠的.
+至於怎麼選呢&#8230;., 嘛還沒研究, 先random</p></div>
+<div class="ulist"><div class="title">參考資料連結:</div><ul>
+<li>
+<p>
+<a href="http://stevehanov.ca/blog/index.php?id=130">link</a>
+</p>
+</li>
+<li>
+<p>
+<a href="http://pnylab.com/pny/papers/vptree/vptree">link</a>
+</p>
+</li>
+</ul></div>
</div>
<div class="sect3">
<h4 id="_template_class_operators_request_2">Template Class Operators Request</h4>
@@ -1449,6 +1469,14 @@ width:70%;
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Vector</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator=</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector <span class="monospaced">v</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Vector&amp;</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">copy operator</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Vector</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator&lt;</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector <span class="monospaced">v</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
@@ -1457,6 +1485,15 @@ width:70%;
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong><em>Scalar</em></strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(int <span class="monospaced">n</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">建構子,
+其中一定<span class="monospaced">n=0 or 4</span></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator*</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
@@ -1481,6 +1518,14 @@ width:70%;
<tr>
<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator-</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">( )</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">取負號</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator&lt;</strong></p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
@@ -1509,6 +1554,219 @@ N &#8592; <span class="monospaced">this</span> 中擁有的資料數
</li>
<li>
<p>
+D &#8592; <span class="monospaced">this</span> 資料維度
+</p>
+</li>
+</ul></div>
+<table class="tableblock frame-all grid-rows"
+style="
+width:100%;
+">
+<col style="width:2%;">
+<col style="width:8%;">
+<col style="width:18%;">
+<col style="width:8%;">
+<col style="width:8%;">
+<col style="width:54%;">
+<thead>
+<tr>
+<th class="tableblock halign-right valign-top" >Const?</th>
+<th class="tableblock halign-right valign-top" >Name </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-center valign-top" > Time_Complexity</th>
+<th class="tableblock halign-left valign-top" > Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>insert</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector const&amp; <span class="monospaced">v</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將向量 <span class="monospaced">v</span> 加到set中</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>erase</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector const&amp; <span class="monospaced">v</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(N)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">將向量 <span class="monospaced">v</span> 從set中移除, <em><sub>TODO:可以再優化</sub></em></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>build</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(KN logN) or O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">檢查距上一次 <span class="monospaced">build()</span> 至今是否有 <span class="monospaced">insert/erase</span> 被呼叫,
+若有, 重新建樹, 否則不做事</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>forceBuild</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(KN logN)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">重新建樹</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>query</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector const&amp; <span class="monospaced">v</span>,<br>
+size_t <span class="monospaced">i</span>,<br>
+bool <span class="monospaced">cmp</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Vectors</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(logN) <sub>Expected</sub></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">於set中找尋距離 <span class="monospaced">v</span> 前 <span class="monospaced">i</span> 近的向量, 並依照由近而遠的順序排序.
+如果有兩個向量 <span class="monospaced">v1</span>,<span class="monospaced">v2</span> 距離一樣, 且 <span class="monospaced">cmp</span> 為 <span class="monospaced">true</span> , 則直接依照
+<span class="monospaced">v1 &lt; v2</span> 來決定誰在前面. 最後回傳一陣列包含所有解.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>clear</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">()</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">void</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">清空所有資料</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced"></p></td>
+<td class="tableblock halign-right valign-top" ><p class="tableblock"><strong>reset</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">dimension</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">size_t</p></td>
+<td class="tableblock halign-center valign-top" ><p class="tableblock">O(1)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">清空所有資料並且指定維度為 <span class="monospaced">max(1, dimension)</span> 並且回傳指定後的維度</p></td>
+</tr>
+</tbody>
+</table>
+<div class="admonitionblock">
+<table><tr>
+<td class="icon">
+<div class="title">Note</div>
+</td>
+<td class="content">
+<div class="ulist"><ul>
+<li>
+<p>
+實測結果發覺比 <span class="monospaced">KD_Tree</span> 有效率多了&#8230;
+</p>
+</li>
+<li>
+<p>
+<em>TODO</em> <span class="monospaced">insert()</span>, <span class="monospaced">erase()</span> 算是未完成功能
+</p>
+</li>
+</ul></div>
+</td>
+</tr></table>
+</div>
+<hr>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_meow_strong_kd_tree_lt_vector_scalar_gt_strong_c_class">meow:: <strong>KD_Tree&lt;Vector, Scalar&gt;</strong> (C++ class)</h3>
+<div class="sect3">
+<h4 id="_description_7">Description</h4>
+<div class="paragraph"><p><span class="monospaced">KD_Tree</span> 全名k-dimension tree, 用來維護由 <strong>N個K維度向量所成的集合</strong>,
+並可於該set中查找 <strong>前i個離給定向量最接近的向量</strong></p></div>
+</div>
+<div class="sect3">
+<h4 id="_template_class_operators_request_3">Template Class Operators Request</h4>
+<table class="tableblock frame-all grid-rows"
+style="
+width:70%;
+">
+<col style="width:3%;">
+<col style="width:3%;">
+<col style="width:10%;">
+<col style="width:17%;">
+<col style="width:10%;">
+<col style="width:53%;">
+<thead>
+<tr>
+<th class="tableblock halign-right valign-top" >Const?</th>
+<th class="tableblock halign-left valign-top" >Typename</th>
+<th class="tableblock halign-left valign-top" > Operator </th>
+<th class="tableblock halign-left valign-top" > Parameters </th>
+<th class="tableblock halign-left valign-top" > Return_Type</th>
+<th class="tableblock halign-left valign-top" > Description</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Vector</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator[]</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(size_t <span class="monospaced">n</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">取得第 <span class="monospaced">n</span> 維度量</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Vector</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator&lt;</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Vector <span class="monospaced">v</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">權重比較</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator*</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">相乘</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator+</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">相加</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator-</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">相差</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-right valign-top" ><p class="tableblock monospaced">const</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">Scalar</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock"><strong>operator&lt;</strong></p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">(Scalar <span class="monospaced">s</span>)</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">bool</p></td>
+<td class="tableblock halign-left valign-top" ><p class="tableblock">大小比較</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="_custom_type_definitions_2">Custom Type Definitions</h4>
+<div class="ulist"><ul>
+<li>
+<p>
+<span class="monospaced">Vectors</span> &#8592; <span class="monospaced">std::vector&lt;Vector&gt;</span>
+</p>
+</li>
+</ul></div>
+</div>
+<div class="sect3">
+<h4 id="_support_methods_4">Support Methods</h4>
+<div class="ulist"><ul>
+<li>
+<p>
+N &#8592; <span class="monospaced">this</span> 中擁有的資料數
+</p>
+</li>
+<li>
+<p>
K &#8592; <span class="monospaced">this</span> 資料維度
</p>
</li>
@@ -1620,12 +1878,12 @@ bool <span class="monospaced">cmp</span>)</p></td>
<div class="sect2">
<h3 id="_meow_strong_splaytree_lt_key_value_gt_strong_c_class">meow:: <strong>SplayTree&lt;Key, Value&gt;</strong> (C++ class)</h3>
<div class="sect3">
-<h4 id="_description_7">Description</h4>
+<h4 id="_description_8">Description</h4>
<div class="paragraph"><p><span class="monospaced">SplayTree</span> 是一種神乎其技的資料結構, 維護一堆 Key&#8594;Value . 並且支援
一些 <span class="monospaced">std::map</span> 難以快速實踐的操作, 如 <span class="monospaced">split</span> , <span class="monospaced">merge</span> , <span class="monospaced">keyOffset</span></p></div>
</div>
<div class="sect3">
-<h4 id="_template_class_operators_request_3">Template Class Operators Request</h4>
+<h4 id="_template_class_operators_request_4">Template Class Operators Request</h4>
<table class="tableblock frame-all grid-rows"
style="
width:70%;
@@ -1683,7 +1941,7 @@ width:70%;
</table>
</div>
<div class="sect3">
-<h4 id="_custom_type_definitions_2">Custom Type Definitions</h4>
+<h4 id="_custom_type_definitions_3">Custom Type Definitions</h4>
<div class="ulist"><ul>
<li>
<p>
@@ -1715,7 +1973,7 @@ width:70%;
</ul></div>
</div>
<div class="sect3">
-<h4 id="_support_methods_4">Support Methods</h4>
+<h4 id="_support_methods_5">Support Methods</h4>
<div class="ulist"><ul>
<li>
<p>
@@ -1964,11 +2222,11 @@ SplayTree* <span class="monospaced">tree2</span>)</p></td>
<div class="sect2">
<h3 id="_meow_strong_segmenttree_lt_value_gt_strong_c_class">meow:: <strong>SegmentTree&lt;Value&gt;</strong> (C++ class)</h3>
<div class="sect3">
-<h4 id="_description_8">Description</h4>
+<h4 id="_description_9">Description</h4>
<div class="paragraph"><p>維護一個陣列, 並且讓user可以有區間查詢, 區間修改的小東東</p></div>
</div>
<div class="sect3">
-<h4 id="_template_class_operators_request_4">Template Class Operators Request</h4>
+<h4 id="_template_class_operators_request_5">Template Class Operators Request</h4>
<table class="tableblock frame-all grid-rows"
style="
width:70%;
@@ -2065,7 +2323,7 @@ width:70%;
</ul></div>
</div>
<div class="sect3">
-<h4 id="_support_methods_5">Support Methods</h4>
+<h4 id="_support_methods_6">Support Methods</h4>
<div class="ulist"><ul>
<li>
<p>
@@ -2139,11 +2397,28 @@ Value const&amp; <span class="monospaced">delta</span>)</p></td>
</div>
</div>
</div>
+<div class="sect1">
+<h2 id="_test">Test</h2>
+<div class="sectionbody">
+</div>
+</div>
+<div class="sect1">
+<h2 id="_bug_report_contact">Bug Report / Contact</h2>
+<div class="sectionbody">
+<div class="ulist"><ul>
+<li>
+<p>
+E-Mail: cat.hook31894 ~在~ gmail.com
+</p>
+</li>
+</ul></div>
+</div>
+</div>
</div>
<div id="footnotes"><hr></div>
<div id="footer">
<div id="footer-text">
-Last updated 2014-04-22 02:34:00 CST
+Last updated 2014-04-22 21:35:29 CST
</div>
</div>
</body>
diff --git a/description.asciidoc b/description.asciidoc
index f55fdad..a09334b 100644
--- a/description.asciidoc
+++ b/description.asciidoc
@@ -7,6 +7,7 @@
.Links
* https://github.com/cathook/meow[GitHub]
* http://www.csie.ntu.edu.tw/~b01902109/readme/template_meow/README.html[README.html]
+* https://github.com/cathook/meow/archive/master.zip[Download]
== File Tree
=== *meowpp/* C++ templates
@@ -31,6 +32,7 @@
** *KD_Tree.h* `class KD_Tree<Vector, Scalar>`
** *SegemenTree.h* `class SegmentTree<Value>`
** *SplayTree.h* `class SplayTree<Key, Value>`
+** *VP_Tree.h* `class VP_Tree<Vector, Scalar>`
* *oo/*
** *Register_Implement.h* `class RegisterInterface` ,
`class ImplementInterface`
@@ -39,3 +41,5 @@
:b: |
+
+
diff --git a/footer.asciidoc b/footer.asciidoc
new file mode 100644
index 0000000..b6e1ea9
--- /dev/null
+++ b/footer.asciidoc
@@ -0,0 +1,6 @@
+
+== Test
+
+
+== Bug Report / Contact
+ * E-Mail: cat.hook31894 \~在~ gmail.com
diff --git a/meowpp/dsa/KD_Tree.h b/meowpp/dsa/KD_Tree.h
index 035d6eb..216d9c9 100644
--- a/meowpp/dsa/KD_Tree.h
+++ b/meowpp/dsa/KD_Tree.h
@@ -1,11 +1,10 @@
#ifndef KD_Tree_H__
#define KD_Tree_H__
-#include <list>
#include <vector>
#include <cstdlib>
#include <queue>
-#include <utility.h>
+#include "../utility.h"
namespace meow{
//#
diff --git a/meowpp/dsa/KD_Tree.hpp b/meowpp/dsa/KD_Tree.hpp
index f0e97a9..7fea6da 100644
--- a/meowpp/dsa/KD_Tree.hpp
+++ b/meowpp/dsa/KD_Tree.hpp
@@ -1,5 +1,4 @@
#include <cstdlib>
-#include <list>
#include <vector>
#include <algorithm>
#include <queue>
diff --git a/meowpp/dsa/SplayTree.h b/meowpp/dsa/SplayTree.h
index f8cdd20..69b204e 100644
--- a/meowpp/dsa/SplayTree.h
+++ b/meowpp/dsa/SplayTree.h
@@ -1,7 +1,7 @@
#ifndef SplayTree_h__
#define SplayTree_h__
-#include "utility.h"
+#include "../utility.h"
namespace meow{
//#
diff --git a/meowpp/dsa/VP_Tree.h b/meowpp/dsa/VP_Tree.h
index f8ab393..669eb0f 100644
--- a/meowpp/dsa/VP_Tree.h
+++ b/meowpp/dsa/VP_Tree.h
@@ -17,6 +17,10 @@ namespace meow{
//# `VP_Tree` 每次選一個點, 將資料分成 離這個點近的, 跟離這個點遠的.
//# 至於怎麼選呢...., 嘛還沒研究, 先random
//#
+ //# .參考資料連結:
+ //# * http://stevehanov.ca/blog/index.php?id=130[link]
+ //# * http://pnylab.com/pny/papers/vptree/vptree[link]
+ //#
//#==== Template Class Operators Request
//#[options="header",width="70%",cols="1>m,1<,3<s,5<,3<,15<",grid="rows"]
//#|=====================================================================
@@ -128,7 +132,7 @@ namespace meow{
//#|const|query|(Vector const& `v`,\size_t `i`,\bool `cmp`)|Vectors
- //#|O(KN ^1-1/K^ )
+ //#|O(logN) ~Expected~
//#|於set中找尋距離 `v` 前 `i` 近的向量, 並依照由近而遠的順序排序.
//# 如果有兩個向量 `v1`,`v2` 距離一樣, 且 `cmp` 為 `true` , 則直接依照
//# `v1 < v2` 來決定誰在前面. 最後回傳一陣列包含所有解.
@@ -154,6 +158,9 @@ namespace meow{
//#
//#[NOTE]
//#========================================
+ //# * 實測結果發覺比 `KD_Tree` 有效率多了...
+ //# * 'TODO' `insert()`, `erase()` 算是未完成功能
+ //#
//#========================================
//#
//# '''
diff --git a/readme_generate.py b/readme_generate.py
index 2ee5cc4..8d105bf 100755
--- a/readme_generate.py
+++ b/readme_generate.py
@@ -110,10 +110,22 @@ if len(sys.argv) <= 1: readme = 'README.asciidoc';
else : readme = sys.argv[1];
readme_f = open(readme, 'w');
+footer_n = 'footer';
+
+footer_lst = [];
for (root, sub_folders, files) in os.walk('./'):
for reader in readers:
deleted = []
+ tmp1 = [];
+ tmp2 = [];
+ for filename in files:
+ if filename.find(footer_n) == -1:
+ tmp1.append(filename);
+ else:
+ if not os.path.join(root, filename) in footer_lst:
+ footer_lst.append(os.path.join(root, filename));
+ files = tmp1;
for filename in files:
path = os.path.join(root, filename);
if path == './' + readme:
@@ -127,4 +139,18 @@ for (root, sub_folders, files) in os.walk('./'):
deleted.append(filename);
for filename in deleted:
files.remove(filename);
+for reader in readers:
+ deleted = [];
+ for path in footer_lst:
+ if path == './' + readme:
+ continue;
+ if reader.checkOk(path):
+ s = reader.read(path);
+ if len(s) > 0:
+ print 'Get asciidoc from ' + path;
+ readme_f.write(s);
+ if reader.stop():
+ deleted.append(path);
+ for filename in deleted:
+ footer_lst.remove(filename);
readme_f.close();