今天睡不著,把這三年來股票、期貨、基金的投資報酬率算一算,發現居然接近0%,真是太沒有效率了,
果然我還是犯了投資人最大的兩個錯誤,1、不做功課,2、不知停損,要好好檢討了@@
<div class="code"></span>
1、先至 HTML Encoder 將code中的特殊字元做轉換
2、至 Advanced Syntax highlighting將程式碼highlight 我的程式碼
</div>
test equations: Einstein's most famous equation is $E=mc^2$.
大部份Boost裡面的library,都只需要include header file就可以正確的編譯成執行檔,但有一些library需要先編譯出*.lib或是*.dll在link時才能夠正確的編譯成執行檔。在1.38.0中,Filesystem, IOstreams, ProgramOptions, Python, Regex, Serialization, Signals, Thread, Wave這些都是需要先編譯的library,以下以Thread為例。
接下來要開始寫程式時,只要記得在IDE(我的習慣是CodeBlocks和Eclipse)設定好include的路徑和link library就可以使用該library。
const在C++中是很常使用的修飾字,其原本的意義是指「不會被修改」也就是read only的意思。但是隨著其放在不同的地方,而有不同的功能。其中const pointer最容易被搞混,要特別注意。
value這個變數是read only,在程式當中不可以被修改。
許多書上建議使用這個方法加上inline來取代macro。
const member value只在object的生存期間是常數,而對於整個class而言是可變的,因為class可以創建多個instance,不同的instance其const member value可以為不同值。所以不能在class declaration初使化consta member value,因為在instance尚未被建立時,compiler不知道const member value之值。
要初使用const int value,必須使用constructor:
this pointer本身不可指向其它不同的object,但是其指向的object之值是可以改變的。
使用const reference可以避免在傳遞argument使用call by value的方式,在傳遞物件時比較有效率且可以保證所傳遞的值在function中不會被修改。
RMQ的功能是若有一群資料放在array中,在經過preprocessing後,可在O(1)的時間內找出index i~j之間的最小(大)的元素。目前preprocessing最快是O(n),也就是只需要O(n)的時間就可以處理完成。
以下介紹O(nlog(n))的preprocessing方法,O(n)的方法是由此法去改進,所以先了解此法相當重要且因程式碼容易撰寫,所以也相當適合在ACM中使用。
![]() | ![]() |
![]() |
Reference:
Hausdorff distance可以用來量測兩個sets之間的距離,如果將其中一個set的元素全部加(減)上t個單位,則兩個sets之間的Hausdorff distance可能會變小或變大。實際的應用,假設我們要做影像的比對,有一張影像為template,而另一張影像是準備要和template比對的圖片,若能夠讓兩張圖片儘量對齊,則能夠提高辨識的淮確度。
我在IPL Vol 106(2008)第一次看到這一篇A new algorithm for computing the minimum Hausdorff distance between two point sets on a line under translation時,看了很久還是不懂演算法實際上是如何運作的,於是追蹤下去追到了源頭的兩篇論文。
源頭是Huttenlocher在1990年發表的Computing the Mimimum Hausdorff Distance for Point Sets Under Translation,這一篇提出的算法提供最初的想法,把sets中每一個元素移動t單位的軌跡的圖形找出來,再找出所有軌跡極大值中的最小值即為所求,時間複雜度是O(mnlog(mn))。
第二篇論文是Rote在1991年發表的Computing the mimimum Hausdorff distance between two point sets on a line under translation也是沿用了Huttenlocker的概念,只是他使用了一個lower bound來減少搜尋解答時所要檢查的解答數量,這個演算法的時間複雜度已經是Optimal (O(m+n)log(m+n)),所以一直以來大家都使用這個算法。
2008年的這一篇論文也是Optimal algorithm,但是所需要檢查的解答數量又更少了,時間複雜度仍然是O((m+n)log(m+n)),但實驗的結果比Rote’s algorithm快了將近15倍。
以下是我用來畫軌跡圖的Scilab script:
Operator overloaded是C++獨特的功能,能夠把operator重新定義,符合class的需求,但是在定義的時候要注意是否違反class原本的意義。