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