一、如何衡量乙個演算法的好壞?
1,正確性。(a程式不含錯誤語法,b程式對於輸入的資料能夠得出所要求的結果,c程式對於典型甚至苛刻的資料也能得出所求結果,d對於一切合法輸入的資料都有相對應的結果。)
2,可讀性。(主要方便人的閱讀,可讀性好有助於人去理解。)
3,健壯性。(當輸入資料非法時,演算法也能適當地做出處理。)
4,效率與低儲存量。(演算法時間與問題規模的平衡)
二、時間複雜度?
所謂的時間複雜度是指隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,演算法中的基本操作的執行次數。
三、時間複雜度為什麼不使用時間來衡量而使用基本語句的執行次數來衡量?
因為考慮到演算法所執行的環境不同,所以執行乙個相同的演算法在不同的執行環境下所需要的時間也不相同。
四、時間複雜度的o漸進表示法
1,用常數1取代執行時間中的所有加法常數。
2,在修改後的執行次數函式,只保留最高端項。
3,如果最高端項存在且不是1,則去除與這個專案相乘的常數。
五、 時間複雜度的:最優、平均、最差情況,為什麼時間複雜度看的是最差情況?
最壞情況執行時間是一種保證,那就是執行時間將不會再壞了。在應用中,這是一種最重要的需求。
六、如何求解:二分查詢、遞迴求階乘、遞迴斐波那契的時間複雜度?
二分查詢的時間複雜度-最好o(1),最差o(lg n)。
遞迴求階乘o(n)。
斐波那契數列o(2^n)
七、什麼是空間複雜度?
對乙個演算法在執行過程中臨時占用儲存空間的大小的量度。也用大o漸進表示法。
八、如何求空間複雜度? (普通函式&遞迴函式)
遞迴函式:遞迴深度n*每次遞迴所要的輔助空間,如果每次遞迴所需要的輔助空間為常數,則遞迴空間複雜度o(n)
普通函式:當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為o(1)。
九、分析遞迴斐波那契數列的:時間、空間複雜度,並對其進行優化,偽遞迴優化--->迴圈優化。
//遞迴fibonacci
long long fibonacci(size_t n)
時間複雜度o(2^n)空間複雜度o(n)
//迴圈優化後fibonacci
long long*fibonacci(size_t n)
return fibarray;
}時間複雜度o(n),空間複雜度o(n)。
十、總結常見時間複雜度。
o(1) 直接輸出結果
o(logn) 二分查詢、快速冪
o(n) 貪心演算法、掃瞄和遍歷
o(nlogn) 帶有分治思想的演算法,如二分法
o(n^2) 列舉、動態規劃
o(n^3) 動態規劃
o(2^n) 搜尋
o(n!) 產生全排列
o(n^n) 暴力法破解密碼
資料結構總結(1)
1 資料結構是 相互之間存在的一種或多種特定關係的資料元素的集合。2 用乙個圖描述資料 資料元素 資料項 資料物件之間的關係。3 邏輯結構 集合結構 線性結構 樹形結構 圖形結構 4 物理結構 1 順序儲存結構 把資料元素放在位址連續的儲存單元裡,其資料間的邏輯關係和物理關係是一致的 2 鏈式儲存結...
資料結構總結1 資料結構的自述
2.1 資料 data 數值資料 整數 實數 複數 非數值資料 如字元 文字 圖形 影象 聲音等 2.2資料元素 data element 和資料項 data item 資料元素 資料元素是資料的基本單位,在電腦程式中通常被作為乙個整體進行考慮 和處理。資料元素有時也被稱為元素 結點 頂點 記錄等。...
資料結構錯題總結(1)
ps 加粗的是答案。對於乙個頭指標為head的帶頭結點的單鏈表,判定該錶為空表的條件是 a a headnull b head nextnull c head next head d head null 總 這裡要分清帶頭結點和不點頭結點,a就屬於不帶頭結點,因為不帶頭結點,該結點就要儲存資料元素。...