【專案3 - 體驗複雜度】
在資料結構與演算法中,對於演算法的選擇,要考慮到時間複雜度的重要性,在小規模的計算中,或許不同時間複雜度的程式所用時間並無多少影響,但在實際應用中,大資料時代,我們會明白複雜度不同對於演算法的差異,下面將用實際例子體驗複雜度。
排序是電腦科學中的乙個基本問題,產生了很多種適合不同情況下適用的演算法,也一直作為演算法研究的熱點。本專案提供兩種排序演算法,複雜度為o(
n2)的選擇排序selectsort,和複雜度為o(
nlog
n)的快速排序quicksort,在main函式中加入了對執行時間的統計。
我們將以近十萬條資料作為輸入測試體驗。
選擇排序的源程式 (複雜度是o(
n2))
//*all rights reservrd.*
//*檔名稱 :test.cpp*
//*版本號:v1.0*
//*問題描述:體驗複雜度為o(n^2)的函式的運算時間*
//*輸入描述:文字文件中的近萬條資料*
//*程式輸出:輸出排序所用時間*
#include #include #include #define maxnum 100000
void selectsort(int a, int n)
if(k != j)
}}int main()
while(fscanf(fp, "%d", &x[n])!=eof)
n++;
printf("資料量:%d, 開始排序....", n);
t1=time(0);
selectsort(x, n);
t2=time(0);
printf("用時 %d 秒!", (int)(t2-t1));
fclose(fp);
return 0;
}
快速排序源** (
複雜度為o(
nlog
n))
//*all rights reservrd.*
//*檔名稱 :test1.cpp*
//*版本號:v1.0*
//*問題描述:體驗複雜度為o(nlogn)的函式的運算時間*
//*輸入描述:文字文件中的近萬條資料*
//*程式輸出:輸出排序所用時間*
#include #include #include #define maxnum 100000
void quicksort(int data,int first,int last)
long move(int n, char a, char b,char c)
}
當discount為4時,執行結果如下:
當discount為8時,執行結果如下:
似乎執行時間並沒有多大差異
當discount為16時,執行結果如下:
當discount為20時,執行結果如下:
當discount為24時,執行結果如下:
這些次數,望而生畏,連程式計算都稍微卡頓了一下
當discount為26時
執行已經明顯有將近2秒的延遲了
當discount為30時
程式整整執行了14秒之久,可見複雜度在實際應用中的差異。
第二週專案3
檔名稱 score.cpp 作 者 吳英政 完成日期 2015年3月15日 版 本 號 v1.0 問題描述 add seconds int 增加n秒鐘 add minutes int 增加n分鐘 add hours int 增加n小時 要考慮增加後超出取值範圍的情形 增加n秒後,秒數可能會超過60,...
資料結構上機實踐第三週專案3 求集合並集
專案 求集合並集 首先還是要建立乙個工程,並將之前建立好的演算法庫作為標頭檔案包進去。檔案視角如下 list.cpp源 如下 all rights reservrd.檔名稱 list.h 版本號 v1.0 問題描述 用於存放各類實現函式 輸入描述 無 程式輸出 無 include include i...
資料結構上機實踐第三週專案3 求集合並集
首先還是要建立乙個工程,並將之前建立好的演算法庫作為標頭檔案包進去。檔案視角如下 list.cpp源 如下 cpp view plain copy font family arial,helvetica,sans serif include cpp view plain copy include i...