資料結構和演算法
例子1.書架擺書
總結:當問乙個資料怎麼組織的時候,其實跟這個資料的規模有關係
不一樣規模的問題,處理起來的難度不一樣,解決方法的效率,跟資料的組織方式有。關
例子2.寫乙個函式,輸入正整數n,順序列印1-n的全部正整數。
第一種方法for迴圈
第二種遞迴總結:雖然遞迴簡潔,但是遞迴對空間的占用很恐怖,當n為100000時,遞迴寫法把能用的空間都佔了,還不夠,然後就爆掉了,導致非正常的終止。解決問題方法的效率也跟空間的利用效率有關。
例子3.寫一計算給定多項式在給定點x的值
第一種方法直接翻譯多項式(簡單粗暴直接)
第二種利用規律簡化多項式再翻譯如何測試程式的執行時間
clock()函式:捕捉程式從開始執行到clock()被呼叫時所花費的時間,時間單位為colock tick,即時間打點
常數clk_tck:機器時鐘每秒所走的時鐘打點數
#include#include//呼叫clock函式需要的標頭檔案
clock_t start,stop;//clock_t是clock函式返回的變數型別
double duration;
int mian()
當執行時間太短小於1單位時,我們採取多次重複,最後除以多次,得出單詞的執行時間總結:第一種方法的執行時間比第二種慢了乙個數量級解決問題方法的效率,跟演算法的巧妙程度有關。
到底什麼是資料結構?
抽象:描述資料型別的方法不依賴具體實現
只描述資料物件集和相關操作集是什麼並不涉及如何做到的問題總結:抽象就是,比較清晰明了的知道你這個資料型別是幹什麼的,有什麼用處,不用糾結是用什麼語言實現的,也不用糾結資料型別,能讓你更加清晰的了解這個資料結構,比如函式max(),你使用它的時候你知道它是找出兩個數的最大值,你沒有糾結它的資料型別,也沒有糾結用哪種語言實現,最簡單的說法也是最重要的理由:介面和實現分離!復用性更強!
什麼是好演算法
例:遞迴print n
當n足夠大時,空間會被沾滿for迴圈的空間占用始終是乙個常量
不對演算法做非常精細的分析複雜度分析小竅門粗略估計增長趨勢
#include//最大資料10的5次方時21ms
using namespace std;
int num[100000];
int maxn=0;
int main()
//printf("%d",sum);
} if(sum<0)
else
printf("%d",sum);
return 0;
} #include//最大資料10的5次方時3700ms 爆力法
using namespace std;
int num[100000];
int maxn=0;
int main()
} }if(sum<0)
else
printf("%d",sum);
return 0;
} #include//最大資料10的5次方時3700ms .分而治之
略
MOOC資料結構(陳越 何欽銘)第一講 基本概念
for迴圈 的 例 寫程式實現乙個函式printn,使得傳入乙個正整數為n的引數後,能順序列印從1到n的全部正整數 迴圈實現 includevoid printn int n printn的乙個迴圈函式 int main 遞迴實現 includevoid printn int n return in...
第一講 基本概念
資料結構和演算法 例子1.書架擺書 總結 當問乙個資料怎麼組織的時候,其實跟這個資料的規模有關係 不一樣規模的問題,處理起來的難度不一樣,解決方法的效率,跟資料的組織方式有。關 例子2.寫乙個函式,輸入正整數n,順序列印1 n的全部正整數。第一種方法for迴圈 第二種遞迴 總結 雖然遞迴簡潔,但是遞...
資料結構 陳越 第一講舉例 最大子列和問題
最直接最暴力的演算法 把所有的連續子列和全部算出來,然後從中找最大的那乙個 下面是 分 的過程 center left right 2 找到中分點 遞迴求得兩邊子列的最大和 maxleftsum divideandconquer list,left,center maxrightsum divide...