Time of Update: 2018-12-05
習慣在Matlab裡面計算,不太喜歡系統內建的計算機,但Matlab每次啟動都比較慢。對於簡單的計算,用不著Matlab,一直希望有一個簡單版本的Matlab。一次看到OSChina上有分享一個簡單的命令列計算機,覺得這個不錯,不過功能僅限於數位四則運算,於是想著可不可以寫一個功能在稍微強一點的命令列計算機。於是就有了這個項目,稱之為Command Line Calculator(CLC)。希望實現的功能,1. 數值運算,整數和浮點數;2. 變數賦值,運算式運算;3. 數學函數;4.
Time of Update: 2018-12-05
這幾天用Ubuntu11.04,被網路設定問題搞得很心煩。 這個Ubuntu是裝在筆記本上的,在宿舍有靜態IP,在實驗室用無線網,IP自動擷取。剛開始系統裝好了,沒有進行配置,開啟無線網,就可以上網了。於是以為Ubuntu的網路設定做的挺好的哈。回到宿舍,配置好靜態IP,和DNS,開啟網頁,也可以上網了。挺不錯的哈。 可第二天,悲劇就來了。實驗室無線網路沒有什麼問題,問題是回到宿舍後,不能上網了。ping一下,unreachable。看一下IP設定,是對的。於是networking重啟一
Time of Update: 2018-12-05
進入Qualification Round 2009的試題,第一道題Alien Language,模式比對的問題,既然選擇了Python,可以使用Regular ExpressionRegex,那就是太簡單了。主要問題就在於把給定的pattern轉換為regular expression,把"("和")"換成"["和"]"就可以了,代碼如下:#!/usr/bin/python#encoding:UTF-8#Filename:AlienLanguage.pyimport sysimport
Time of Update: 2018-12-05
以前的版本是11.10,啟動系統後,就提示有是否升級到12.04的提示,選擇升級,然後就開始下載內容和升級了。第一次以這種方式升級,以前基本上都是重新安裝,不過這次希望保留已經安裝的軟體,所以就用這種方式了。下載升級包的速度還是蠻快的(或許是因為在校內,用的是學校的升級源),不過安裝升級包的速度還是有點慢,一開始顯示需要三個多小時,還好後來時間跳了幾次,總共時間大概1個多小時吧。而且升級過程中還有一些資訊需要確認,比如Apache和MySQL的更新確認,升級過程中最好不要在繼續使用,我本來想
Time of Update: 2018-12-05
在使用hash_map的程式中,編譯的時候會報出warning,In file included from /usr/include/c++/4.4/ext/hash_map:60, from hash_a.h:6, from test.cpp:5:/usr/include/c++/4.4/backward/backward_warning.h:28:2: warning: #warning This file includes
Time of Update: 2018-12-05
最近跑一個程式,結果2G記憶體用完了,結果也沒算出來,出現std::bad_alloc,應該是程式中某個地方記憶體空間沒有及時釋放,開始檢查程式。發現好多地方用到vector,而且有些會很大,並且只是中間結果,只是因為需要在多個地方訪問,定義為了類的成員變數,要等到這個類解析的時候才釋放空間,看來應該在程式中,它的中間作用結束之後便釋放記憶體。於是開始探索如何釋放vector的記憶體。1、vector的成員函數
Time of Update: 2018-12-05
在《演算法設計技巧與分析》這本書的第四章,介紹了堆。於是按照上面的虛擬碼實現了一下。資料結構定義maxHeap.hpp如下, 1 #ifndef MAX_HEAP_HPP_ 2 #define MAX_HEAP_HPP_ 3 4 #include <vector> 5 using std::vector; 6 7 class MaxHeap 8 { 9 public:10 MaxHeap(vector<int>& A);11
Time of Update: 2018-12-05
vector是使用的比較多的一種C++的STL類,之前沒有系統地看過如何使用vector,導致使用的時候總覺得不好用。vector是為了取代直接定義的數組,可以進行下標越界檢查,大小可以動態增長。大家總是建議使用vector,而不使用 Type array[size]。第一次用vector的時候,報錯了,vector<int> vInt;vInt[0] = 1;cout << vInt[0] << endl;運行時報錯,Segmetation fault。
Time of Update: 2018-12-05
LAPACKLAPACK,全稱是Linear Algebra PACKage,一個高效能的線性代數的程式庫,首頁http://www.netlib.org/lapack/
Time of Update: 2018-12-05
這次介紹pyplot如何畫直方統計圖,並且畫出最合適的輪廓線。這是Matplotlib內建的一個例子,樣本程式example/pyplot_examples/histdiagram_demo.py。先看,在看代碼,#!/usr/bin/env pythonimport numpy as npimport matplotlib.mlab as mlabimport matplotlib.pyplot as pltmu, sigma = 100, 15x = mu +
Time of Update: 2018-12-05
之前糾結enum class,其中一個問題就是,要輸出type的名字,方便調試。今天嘗試了一下輸出重載,沒想到竟然可以。測試如下,#include <iostream>using namespace std;enum class Type{ TEXT, _EOF};ostream& operator << (ostream& out,Type tp){ switch(tp) { case Type::TEXT:
Time of Update: 2018-12-05
最開始使用Matplotlib,一是因為它不需要像Matlab一樣花很長時間啟動一個圖形介面,二是它可以直接儲存為.eps格式。在映像顯示出來之後,在左下角有幾個按鈕,最後一個就是儲存,在儲存的對話方塊選擇.eps格式即可。另一種方式就是在程式裡面使用pyplot.savefig(name,format="eps"),可以用format指定格式為eps,也可以不使用format,而是寫在name裡面,它會自動從name裡面找到副檔名來決定格式。雖然這樣得到了.eps格式的映像,但是它的周圍有空白
Time of Update: 2018-12-05
一直想試試這個LLVM的,據說錯誤提示資訊比GCC好,C++11支援的也更多。今天編譯的時候,發現用了幾個C++11特性了,gcc4.4沒法編譯,於是想,那就嘗試一下LLVM吧。既然是想安裝比較新的版本的LLVM,新立得軟體包上的肯定不是好的選擇。想用先行編譯好的.deb包,卻發現不支援ubuntu10.04,好像11.10之後的是可以用deb包的。那就原始碼編譯吧,這應該總是可以的。目的,LLVM和Clang,編譯C/C++,環境Ubuntu10.04,X86,gcc4.4.先搞清楚要準備哪些
Time of Update: 2018-12-05
開始看《程式設計語言實現模式》,補習了一下Parser的基礎知識。英文是Wiki上的,中文是自己理解翻譯的。Wiki LALR parserhttp://en.wikipedia.org/wiki/LALR_parserin 1965, Donald Knuth invented the LR parser (Left to Right, Rightmost derivation). The LR parser can recognize any deterministic
Time of Update: 2018-12-05
在OpenCV中,矩陣是一個基礎的資料結構,在CvCore中。在較早版本裡面,使用的是C語言實現的struct,較新的版本裡面有C++實現的class。下面分別介紹一下這兩種使用方法。CvMat參考http://www.opencv.org.cn/index.php/Cxcore%E5%9F%BA%E7%A1%80%E7%BB%93%E6%9E%84在OpenCV的中文首頁上,文檔裡面給的還是C實現的結構體。如下,typedef struct CvMat { int type; /*
Time of Update: 2018-12-05
以前嘗試閱讀《編譯原理》,但都沒有讀下來,現在看《程式設計語言實現模式》,感覺輕鬆多了。其實,目前我只對解析感興趣,只要看這本書的第一部分解析起步就可以了,確實沒有必要去啃《編譯原理》。下面就是學習的內容了。解析,分為兩步,先是進行詞發分析,將輸入轉換成一個一個的Token,然後是進行文法分析。一個一個的Token組成語句,對應一定的文法。根據這些Toke,匹配一定的文法。詞法分析器,lexer,是文法分析器,parser,的基礎。先來看看詞發分析器。例如語句,1024+
Time of Update: 2018-12-05
1.基本介紹 K最近鄰(k-Nearest Neighbor,KNN)分類演算法,是一個理論上比較成熟的方法,也是最簡單的機器學習演算法之一。該方法的思路是:如果一個樣本在特徵空間中的k個最相似(即特徵空間中最鄰近)的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。KNN演算法中,所選擇的鄰居都是已經正確分類的對象。該方法在定類決策上只依據最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。
Time of Update: 2018-12-05
在實現lexer和parser的過程中,要定義token的類型。《程式設計語言實現模式》中使用的是java代碼,直接定義static int TEXT = 1;並且可以在lexer擴充的時候繼承到實際使用的lexer裡面。但C++定義類的static成員時,必須在外面單獨的進行初始化,對這一點不是很爽,在C++11中,實現了enum class, 先看看這個enum class能不能滿足要求,例如enum class TokenType{ _EOF, TEXT};TokenType
Time of Update: 2018-12-05
1. delete 用於釋放 new 分配的空間,free 有用釋放 malloc 分配的空間2. delete [] 用於釋放 new [] 分配的空間3. delete 釋放空間的時候會調用 相應對象的解構函式 順便說一下new在分配空間的時候同時會調用對象的建構函式,對對象進行初始化,使用malloc則只是分配記憶體4. 調用free 之前需要檢查 需要釋放的指標是否為空白,使用delete 釋放記憶體則不需要檢查指標是否為NULL5. free 和 delete
Time of Update: 2018-12-05
之前實現的枚舉類enum class雖然達到了當時期望的功能,但現在在用的時候出現了一些問題。比如新定義了一個Token的類,定義如下,class Token{public: Token(){} Token(int tp, string tx) { type = tp; text = tx; } int Type() const { return type; } string Text() const {