演算法競賽入門經典習題與解答 第一章

2021-08-15 08:48:44 字數 1378 閱讀 1576

1.1.1排序效能問題

c語言的函式qsort,c++中的sort(直接傳入排序函式)以及傳入functor物件的sort函式**以及時間。

#includeusing namespace std;

#define _for(i,a,b) for( int i=(a); i

const int n = 10000000;

struct ts;

inline bool cmp (const ts&t1, const ts&t2)

struct cmpfunctor

};ts tss[n];

void gendata()

}int main()

兩次編譯結果(-o2優化):

1.1.4 stl容器的輸出

使用io流對容器的內容進行輸出。

#includeusing namespace std;

#define _for(i,a,b) for(int i=(a); i<=(b); i++)

templateostream& operator<

int main()

;ts tss[n];

void gendata()

}int main()

); printf("sort by funtion pointer : %ld\n",clock() - start);

return 0;

}

1.2.6 雜湊容器

c++11引用了幾個基於hash演算法的容器: unordered_map、unordered_set、unordered_multimap、unordered_multiset。

當不需要排序時,這些容器的查詢效能更好。預設的hash容器提供了內建資料型別的hash演算法,但是自定義型別需要提供自定義

的hash演算法:自定義型別包含幾種內建型別時,分別算出其hash,進行組合後得到乙個新的hash值,一般採用移位+異或。容器

處理碰撞時需要判斷兩物件是否相等,所以需要過載"=="操作符。

#includeusing namespace std;

struct type

};struct hashfunc

};int main()

, "one"},

, "two"},

, "three"}

};for(const auto& k : testhash)

{cout<

演算法競賽入門經典習題解答(1)

1 1求平均數 include int main 1 2溫度 include int main 1 3連續和 include int main 1 4正弦和余弦 include include int main 1 5求兩點之間的距離 include include int main 1 6判斷乙個...

演算法競賽入門經典習題2 6

用1,2,3,9組成3個三位數abc,def和ghi,每個數字恰好使用一次,要 求abc def ghi 1 2 3。按照 abc def ghi 的格式輸出所有解,每行乙個解 思路 如果首先要保證每個數字都用一次,那麼這個題就會變得很麻煩,所以就先讓abc,def,ghi產生倍數關係然後對 這三個...

演算法競賽入門經典 習題3 7

uva1368 dna consensus string 本來以為題目是要在已有序列中找乙個最小的序列,後來仔細讀了下題才發現是要構造乙個距離最小的序列。感覺這道題應該就是貪心演算法吧?每一位和已有序列的對應位差得越少,總體也就越少。include include include include u...