十大經(jīng)典算法 什么是算法設(shè)計?
什么是算法設(shè)計?算法設(shè)計比較困難,編碼只基于算法的偽碼。需要一些編寫代碼的基本知識。算法設(shè)計更注重思想?;旧希惴ㄊ窃O(shè)計好的,所以編寫程序并不困難。算法設(shè)計的代價遠高于編碼。高中生可以編碼。在印度,
什么是算法設(shè)計?
算法設(shè)計比較困難,編碼只基于算法的偽碼。需要一些編寫代碼的基本知識。算法設(shè)計更注重思想。基本上,算法是設(shè)計好的,所以編寫程序并不困難。算法設(shè)計的代價遠高于編碼。高中生可以編碼。在印度,程序員基本上都是高中生。而中國的計算機專業(yè)本科生基本上都成了程序員。
影響算法設(shè)計的因素?
影響預測算法性能的主要因素有三個:問題的復雜性、模型的復雜性和可用的訓練數(shù)據(jù)量。
一個復雜的問題同時有大量的訓練數(shù)據(jù),一個復雜的模型可以得到更準確的結(jié)果。
一個復雜的問題沒有足夠的數(shù)據(jù),線性模型可能是最好的結(jié)果。
一個簡單的問題可以通過線性模型來解決。
方法:復雜模型用于解決復雜問題,簡單模型用于解決簡單問題,同時必須考慮數(shù)據(jù)規(guī)模。列多于行或相對簡單問題的數(shù)據(jù)集傾向于使用線性模型;行多于列的復雜問題傾向于使用非線性模型(積分法)。
算法設(shè)計的步驟?
1. 明確主題的含義,列出主題的輸入、輸出和約束條件
另一個主題是這樣的:“有一個mxn矩陣,每行從左到右遞增,每列從上到下遞增。請實現(xiàn)一個函數(shù)來查找矩陣中的元素elem,如果找到了元素,請返回元素的位置我剛才說的行和列是按升序排列的。我在草稿紙上畫了一個3x4矩陣,里面的元素是1~12,所以我想當然地認為矩陣的左上角是最小的元素,右下角是最大的元素。所以整個話題的思維方向是錯誤的。
2. 想一想如何使算法的時間復雜度盡可能小
繼續(xù)以上述主題為例。有以下幾種算法:
A.遍歷整個矩陣進行查找,則復雜度為O(m*n);
B.由于每行都是有序的,因此可以對每行進行二進制搜索,因此復雜度為O(m*logn)。但這只使用了row order的屬性。
c.最好的算法是從矩陣的左下角開始,比較左下角元素的大?。僭O(shè)x)和元素的大小。如果elem大于x,那么x所在列中的元素將被排除,因為x是列中最大的元素。如果elem大于x,那么x所在列中的元素將被排除在外,因為x是此行中最小的元素,小于x,它必須小于x右邊的元素。每次迭代都會將矩陣的大小減少一行或一列。復雜度為O(max(m,n))。
我們可以從復雜度高的實現(xiàn)方法開始,然后考慮如何利用主題的具體條件來降低復雜度。
3. 寫偽代碼或代碼
現(xiàn)在有很多種算法,比如工程應用算法,比如排序、紅黑樹等,可以從經(jīng)典書籍或大學課本上學習。但例如,人工智能等一些學習算法對高等數(shù)學、建模和分類都有很高的要求。沒有一個算法學習是可能的。