Time of Update: 2018-12-05
自己的研究方向:靜態程式分析及缺陷檢測已經涉及的研究及技術:流、路徑、上下文、域敏感分析,AI,SE,約束求解,測試案例產生及單元測試 國內現狀:軟體所,上海交大,南大,北大,MSRA 國際現狀:MS的三個組(CSE,RiSE,SRR),斯坦福,威斯康辛。。。 當前的研究熱點:通過分析頂級會議的track及自己的認知總結1、靜動態結合的程式分析技術,代表人物是MS的Patrice
Time of Update: 2018-12-05
Valgrind介紹Valgrind是一個程式動態分析的工具。它的工具集可以自動地檢測到記憶體管理和線程的錯誤並且能夠深入剖析器行為。Valgrind目前包括六個工具:一個記憶體錯誤偵測器、兩個線程錯誤偵測器、一個緩衝和分支預測性分析器、一個呼叫歷程圖分析器和一個堆棧分析器。它目前支援的平台:X86/Linux、AMD64/Linux、PPC32/Linux、PPC6/Linux和X86/Darwin(Max OS X)。Valgrind是開源的並且可以在GNU GPL
Time of Update: 2018-12-05
#include <stdio.h>#include <string.h>#define MAX 256void bigNumAdd(const char[], const char[], char[]);void strRev(char [], const char []);void delTailZero(char []);int main(){ char num1[MAX], num2[MAX], result[MAX]; while(scanf("%
Time of Update: 2018-12-05
單迴圈賽,每個隊參加前後兩場比賽之間的距離最大,這就是這個問題的要求。 這個問題,使用簡單回溯,剪剪枝好像可以,但是要當n很大的時候就很為難,速度什麼的成了問題。所以這裡,我使用了近似演算法。觀察問題,發現這是一個對稱矩陣的問題,那麼我有幾條啟發學習法規則: (1)插入矩陣的元素,不應該和前
Time of Update: 2018-12-05
題意:標準的0-1背包問題。記憶體方面使用滾動數組。時間方面可以先對W[]進行非升排序。本來在輸入資料時候還打算記錄最小重量,在knap時候進行最佳化,但發現結果沒有什麼變數,所以並沒有加上。 C++源碼:#include <iostream>using namespace std;const int N = 3402;const int M = 12881;short w[N], v[N];int t[M];int n, c;void swap(int i, int j){
Time of Update: 2018-12-05
背景:無向連通圖G=(V,E)的最小產生樹演算法:1.prim演算法: (1)初始頂點集合S為空白,把任意一個頂點s加入集合S. (2)迭代|V|-1次,每次加入頂點u,使得v屬於S,u不屬於S並且(u,v)權值最小, 記錄邊(u,v) (3)所有記錄過的邊(u,v)即最小產生樹2.kruskal演算法: (1)把有|E|中邊按權值非降排序 (2)邊初始集合S為空白,每次加入權值最小的邊,當加入後邊集合不構成迴路,刪掉此邊。迴路判定可以採取並查集方法
Time of Update: 2018-12-05
一、首先,先對Linux下C語言開發的流程有個大體的瞭解。簡單的說,就是: 1、編寫C程式原始碼*.c 2、預先處理(Pre-Processing) 3、編譯(Compiling) 4、彙編(Assembling)-->產生目標代碼*.o 5、連結(Linking)-->產生可執行檔 6、調試
Time of Update: 2018-12-05
Dijkstra演算法:有向圖G=(V,E)1、把源點v0放入到集合S中,計數器c=0。每個結點一個結構資料d(a,b), a表示到v0的最短路徑長,b表示a的前趨節點。初始化v0為d(0,-)並且除v0外的所有節點為d(INF,-)。這裡面INF表示無窮大。 2、通過遍曆集合S中所有節點v,來更新非集合S中所有節點u. 更新條件為 d[u].first = min{du[u].first, d[v].first + wt(v,u)},其中d[u].first表示u節點資料的每一個元素,
Time of Update: 2018-12-05
在一個2^k * 2^k的方格組成的棋盤中,恰有一個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤。 在棋盤覆蓋問題中,要用到所示的4種不同形態的L型骨牌覆蓋給定的特殊棋盤上除特殊方格以外的所有方格,且任何2個L型骨牌不得重疊覆蓋。易知在任何一個2^k * 2^k的棋盤覆蓋中,用到的L型骨牌個數恰好為(4^k -1)/3。 圖一 k=2時的一個特殊棋盤 圖二
Time of Update: 2018-12-05
背景:對於有些問題沒有好的演算法去求解,只能通過遍曆搜尋的方式尋找可行解,此時就用到了寬度優先搜尋和深度優先搜尋。深度優先搜尋用棧實現,可以利用系統的棧區遞迴調用,也可以自己維護好結構。一般來說,自己維護棧對空間的把握更準確一些,而且調試也更方便一些。不過遞迴調用的方式有時確會寫出很漂亮的代碼,深度搜尋隨著問題規模增加時間開銷會顯著增加,此時必須通過一些剪枝技術來進行最佳化。寬度優先搜尋用隊列來實現,隨問題規模增加空間開銷會顯著增加。 題意:給出棋盤行列數,求從(1,1)點能否遍曆整個棋盤,能順
Time of Update: 2018-12-05
題意:現在有m個裝置,n種電源插座,k個適配器。適配器a b作用為可以把a插頭轉成b插頭,也就是原來用a電源的裝置現在可以用b電源需要注意的幾點:1、"only one receptacle of each type",對於n種電源插座,每種類型只有一個2、"No two devices will have exactly the same
Time of Update: 2018-12-05
貪心思想:局部最優從而達到整體最優 題意:t組測試資料,每組n塊木頭,每塊木頭有相應的length和weight。現在對n塊木頭進行處理,setup time如下定義:1、處理第一塊木頭setup time為12、如果後來處理木頭的length和weight分別都不小於前一塊的length和weight,則不需要setup time,否則setup
Time of Update: 2018-12-05
題目: 求Rn ,其中R是一個實數範圍是 0.0 < R < 99.999 ,n是一個整數的範圍是 0 < n <= 25. 分析:高精度運算,字串符類比數值運算。需要注意的是各種輸入格式處理:123, 0123, 012.3, 123., 123.0, 123.01, .123, .1230等等,我的方法是先把如上這些情況輸入處理成(123,0),(123,0),(123,1),(123,0),(123,0),(12301,2),(123,3),(123,3)這些形式。
Time of Update: 2018-12-05
題目:定義棧的資料結構,要求添加一個min函數,能夠得到棧的最小元素。要求函數min、push以及pop的時間複雜度都是O(1)。 分析:普通的棧push(),pop()都是O(1),現在需要加入min方法。第一眼看這個題,想到在棧結構中加一個min變數,儲存當前棧最小元素。這樣在push()操作時比較當時元素與min變數值來決定是否要替換min變數,即push()操作O(1),但是pop()的時候最有麻煩,因為如果pop()的是最小元素,那更新min變數就需要重新遍曆整個棧,時間複雜為O(n)
Time of Update: 2018-12-05
最近在拼接一個純C的多核模擬器multi2sim和C++的DRAM模擬器dramsim時,用到了使用autoconf/automake自動產生Makefile,所以這裡總結記錄一下,以便以後方便找到。1、首先,autoscan產生configure.scan,修改產生configure.in檔案,裡面主要是一些庫、環境的檢測。2、其次,使用者只需要手動寫Makefile.am,Makefile.am是比Makefile更高的一個層次。書寫時需要需要寫出目標、源檔案、遞迴子檔案夾、所需要標頭檔、連
Time of Update: 2018-12-05
題意:不引入新節點,只允許指標操作,實現二元尋找樹轉換為相應雙向鏈表。 10 / / 6 14 / / / /4 8 12
Time of Update: 2018-12-05
分析:隊列是FIFO,而棧是FILO。這裡考慮兩個棧,mStack1和mStack2。push_back()操作時假設都push到mStack1中,如果需要front()操作或者pop_front()操作時,應該拿到mStack1中棧底的元素。這時就用到mStack2,把mStack1中的元素全部push到mStack2中,然後再進行mStack2的top()和pop()操作。理論上分析如果,每次pop_front()的都是最早進入的,而新加入元素都在mStack1的最上面,pop_front(
Time of Update: 2018-12-05
今天把基於比較的內排序演算法寫了一遍,其中包括bubbleSort, selectSort, insertSort, heapSort, quickSort, shellShort。 mergeSort留了介面以後補上,下篇再把幾種排序的時間複雜度、穩定性、適用情況總結一下。 #include <iostream>#include <string>#include <cstring>#include <cmath>#include
Time of Update: 2018-12-05
前面發了兩篇內排序的文章。(一)中當時歸併排序並沒有寫出,(二)中今天發現在非遞迴quickSort中stack<node*> 存在記憶體泄露,並且主程式選項功能支援不是很好,所以今天又練習寫了一遍。大規模排序時,發現1million整形資料大小為6.8M,int在當前平台佔4B1million = 1000000 = 106 ≈220 總容量=4B*220
Time of Update: 2018-12-05
都說電腦編程乏味,可是好多程式員卻玩地津津有味。電腦的世界什麼都可以用來做為程式員的遊戲,比如CPU。下面就讓我們來讓Windows下的工作管理員聽我們指揮,畫出完美的正弦曲線吧。 思路:0、目測windows下工作管理員重新整理頻率為1s,每一次重新整理的CPU佔用率其實就是這一時間段的 忙碌時間 /