原创 STL源碼解析 - nth_element

 nth_element 模板函數具有兩個版本 template<class _RanIt> void nth_element(_RanIt _First, _RanIt _Nth, _RanIt _Las

原创 使用遞歸高斯濾波器實現快速高斯模糊

高斯窗常用於對圖像進行模糊或低通濾噪,但是隨着高斯半徑的增加,時間消耗會逐級增加 如高斯半徑爲N時,計算每個輸出採樣點需要計算的乘法次數爲(2N+1)*模糊方向數,加法次數爲2N*模糊方向數,這種情況下,當N=100時,甚至更大時,計算量

原创 SSE2實現HAAR小波變換(dwt2與idwt2)

wiki鏈接:http://en.wikipedia.org/wiki/Haar_wavelet   可用SSE2實現HAAR小波變換,達到實時,關於HAAR小波的介紹可參考以上維基鏈接  參考MATLAB中dwt2與idwt2的函數原型

原创 自動矢量化編譯優化技術(Automatic Vectorization)

自動矢量化技術,是編譯器代碼優化技術的一種,即在不改變C/C++源代碼的情況下,自動編譯產生使用單指令多數據(Single Instruction Multiple Data,SIMD)指令集的二進制碼,包括MMX,SSE,SSE2,SS

原创 STL源碼解析 - sort

  模板函數sort有兩個重載版本template<class _RanIt> inline void sort(_RanIt _First, _RanIt _Last); template<class

原创 實現自定義的 STL allocator

STL allocator 的註釋講解請見:http://blog.csdn.net/lifesider/archive/2011/06/06/6527776.aspx   這裏實現的自定義allocator是繼承自std::alloca

原创 更新詞彙至Unigram詞表進行識別

在上一篇文章中提到通過在運行時修改某一詞彙至特定詞彙進行識別,然而當需要測試的新詞彙較多時,並且新增詞彙相近時,對於運行時手動修改的工作量是巨大的。爲了具有更好的擴展性,這裏提出一種對新增詞彙進行統一處理的方法。   在語言模型目錄(及與

原创 無鎖的數據結構(Lock-Free)及CAS(Compare-and-Swap)機制

當同時存在讀寫線程時,默認情況下是不保證線程安全的,因而需要利用信號量來進行線程同步(Synchronization),如關鍵代碼段、互斥體等,同時操作系統也提供了相應的API。然而同步並不總是滿足條件的且有效率的,比如陷入內核時會有性

原创 STL源碼解析 - make_heap

模板函數make_heap具有如下兩個版本template<class _RanIt> void make_heap(_RanIt _First, _RanIt _Last); template<class _RanIt, class _

原创 STL源碼解析 - sort_heap

 模板函數sort_heap具有如下兩個版本template<class _RanIt> void sort_heap(_RanIt _First, _RanIt _Last);template<class _RanIt, class _

原创 深入理解 STL allocator

由於std::set,std::multiset,std::map,std::multimap四種容器的插入刪除操作性能高並且自動排序,在很多時候比如需要動態操作時往往會使用它們,然後由於容器內部使用的是節點,每次的插入或刪除都要調用ne

原创 在語言模型文件中更新詞彙以提高識別正確率

完成CMU Sphinx Toolkit到UNICODE的移植後,由於其自身支持的中文詞彙太少且過於簡單,實際生活中的很多詞彙無法識別,由於其缺少開發文檔,只能在代碼跟蹤的過程裏心煩了。   於是想,肯定需要在詞典文件中增加新詞彙吧,如果

原创 C++慣用法:通過成員模板實現隱式轉換(Coercion by Member Template)

往往將子類指針轉換成父類指針進行操作是常見的且是非常有用的,如下 class base {}; class derive : public base {}; base* pb = NULL; derive* pd = NULL; pb

原创 C++慣用法:奇特的遞歸模板模式(Curiously Recurring Template Pattern,CRTP,Mixin-from-above)

意圖: 使用派生類作爲模板參數特化基類。   與多態的區別: 多態是動態綁定(運行時綁定),CRTP是靜態綁定(編譯時綁定)   在實現多態時,需要重寫虛函數,因而這是運行時綁定的操作。 然而如果想在編譯期確定通過基類來得到派生類的行爲,