資料結構和演算法
例子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 .分而治之
略
最優化第一講 概念
概念性質的 凸集 convex sets 任意兩個點的線性組合還屬於這個集合。也就意味著任意兩點的連線還是這個集合中,形式化表示為 一範數 向量各個維度絕對值的和 二範數 向量各個維度的平方和的開根號 超平面 二維空間是一條直線,三維空間是乙個平面,更高空間就是超平面,統稱超平面 會將這個空間分成兩...
浙大 資料結構 陳越 第一講 基本概念
資料結構和演算法 例子1.書架擺書 總結 當問乙個資料怎麼組織的時候,其實跟這個資料的規模有關係 不一樣規模的問題,處理起來的難度不一樣,解決方法的效率,跟資料的組織方式有。關 例子2.寫乙個函式,輸入正整數n,順序列印1 n的全部正整數。第一種方法for迴圈 第二種遞迴 總結 雖然遞迴簡潔,但是遞...
CSharp第一講 基本語法
1.注釋 這是注釋 這是多行注釋 這是文件注釋2.基本寫法 引用命名空間 using system using system.collections.generic using system.text 宣告自己的命名空間 namespace csharp 在vs中,應該在form1.design.c...