- 程序員必會的40種算法
- (加)伊姆蘭·艾哈邁德
- 1087字
- 2021-09-27 16:59:54
1.1 什么是算法
簡而言之,算法是求解問題的計算規(guī)則集,每條規(guī)則都執(zhí)行某種計算。它旨在根據(jù)精確定義的指令,為任何有效的輸入產(chǎn)生對應(yīng)的輸出結(jié)果。在英語詞典(如American Heritage Dictionary)中查找算法這個詞,你將得到這個概念的定義如下:
“算法是由無歧義指令構(gòu)成的有限集合,它在給定的一組初始條件下按預(yù)定順序執(zhí)行,直到滿足給定的可識別的結(jié)束條件,以實現(xiàn)某種目的。”
算法設(shè)計致力于設(shè)計一種最高效的數(shù)學(xué)步驟來有效地求解實際問題。以所得的數(shù)學(xué)步驟為基礎(chǔ),可以開發(fā)一個可復(fù)用且通用性更強的數(shù)學(xué)方案來求解更廣泛的類似問題。
算法的各個階段
圖1-1展示了開發(fā)、部署和使用算法的各個階段。

圖 1-1
可以看到,整個過程始于從問題表述中了解算法的設(shè)計需求,明確需要完成的事項細(xì)節(jié)。一旦問題被明確表述,就可以進入開發(fā)階段。
開發(fā)階段由兩個階段構(gòu)成:
- 設(shè)計階段:設(shè)計階段要構(gòu)思算法的架構(gòu)、邏輯和實現(xiàn)細(xì)節(jié)并形成文檔。設(shè)計算法時,既要考慮算法的準(zhǔn)確性,又要考慮算法的性能。為給定問題設(shè)計算法時,很多時候最終會得到多個候選算法。算法設(shè)計階段是一個迭代的過程,需要對各種候選算法進行比較。有些算法簡單而快速,但可能會犧牲一些準(zhǔn)確性。其他算法可能非常準(zhǔn)確,但由于其復(fù)雜度高,可能需要大量的運行時間。在這些復(fù)雜的算法中,也有一些算法比其他算法更高效。在做出選擇之前,應(yīng)該仔細(xì)研究候選算法的所有內(nèi)在平衡因素。特別是,為復(fù)雜問題設(shè)計高效算法非常重要。恰當(dāng)設(shè)計的算法是一個有效的解決方案,它不僅具有令人滿意的性能,還具有令人信服的準(zhǔn)確性。
- 編碼階段:編碼階段將設(shè)計好的算法轉(zhuǎn)化為計算機程序。重要的是,實際程序必須實現(xiàn)設(shè)計階段提出的所有邏輯和結(jié)構(gòu)。
算法的設(shè)計階段和編碼階段本質(zhì)上是一個迭代過程。設(shè)計出同時滿足功能性需求和非功能性需求的算法,往往需要花費大量的時間和精力。算法的功能性需求明確刻畫了給定輸入數(shù)據(jù)對應(yīng)的正確輸出結(jié)果,而非功能需求主要是指在給定數(shù)據(jù)規(guī)模上的性能需求。本章稍后將討論算法的驗證和性能分析。算法驗證就是驗證算法是否滿足其功能性需求,而性能分析則是驗證算法是否滿足其主要的非功能性需求,亦即性能需求。
一旦將選用的算法用編程語言進行了代碼設(shè)計和代碼實現(xiàn),就可以部署算法的代碼了。部署算法需要設(shè)計代碼運行的實際生產(chǎn)環(huán)境,其設(shè)計需要根據(jù)算法的數(shù)據(jù)和處理需求來展開。例如,并行算法需要恰當(dāng)?shù)剡x擇集群中計算機節(jié)點的數(shù)量,以確保算法被高效執(zhí)行;數(shù)據(jù)密集型算法則需要設(shè)計數(shù)據(jù)傳遞管道、數(shù)據(jù)緩存策略和數(shù)據(jù)存儲策略。生產(chǎn)環(huán)境的設(shè)計將在第13章和第14章中更加詳細(xì)地討論。一旦生產(chǎn)環(huán)境被設(shè)計和實現(xiàn),算法就可以部署了。之后,算法就接收并處理輸入數(shù)據(jù),并按照要求生成輸出結(jié)果。
- Mastering Visual Studio 2017
- Hands-On Machine Learning with scikit:learn and Scientific Python Toolkits
- OpenShift開發(fā)指南(原書第2版)
- 微服務(wù)與事件驅(qū)動架構(gòu)
- Power Up Your PowToon Studio Project
- 新編Premiere Pro CC從入門到精通
- Visual Basic學(xué)習(xí)手冊
- The Data Visualization Workshop
- PLC編程與調(diào)試技術(shù)(松下系列)
- Instant Nancy Web Development
- Django 3.0入門與實踐
- 愛上C語言:C KISS
- Python 快速入門(第3版)
- C/C++代碼調(diào)試的藝術(shù)
- 生成藝術(shù):Processing視覺創(chuàng)意入門