- 程序員必會的40種算法
- (加)伊姆蘭·艾哈邁德
- 1481字
- 2021-09-27 16:59:55
1.4 算法設計技術
算法是求解實際問題的數學方案。我們在設計和微調算法時,需要牢記以下三個設計的關注點:
- 第一點:算法是否能產生我們預期的結果?
- 第二點:這是獲取預期結果的最佳方法嗎?
- 第三點:算法在更大的數據集上表現怎么樣?
在為問題設計解決方案前,最好先理解問題本身的復雜度。例如,如果將問題描述為其需求和復雜度,則有助于為其設計恰當的求解方案。一般來說,算法可以根據問題的特點分為以下幾種類型:
- 數據密集型算法:數據密集型算法旨在處理大量數據,其處理需求相對簡單。壓縮大型文件的算法就是數據密集型算法一個典型例子。對于這類算法,待處理數據的規模遠大于處理引擎(單節點或集群)的內存規模,因此可能需要開發一個迭代處理設計來根據要求高效地處理數據。
- 計算密集型算法:計算密集型算法具有大量計算需求而不涉及大量數據。一個簡單的例子就是尋找大素數的算法。尋找恰當策略將算法劃分為不同的階段,使得其中至少有一些階段是可以并行化的,這是最大限度地提升算法性能的關鍵。
- 既是數據密集型算法,也是計算密集型算法:有些算法需要處理大量數據,同時也有大量計算需求。實時視頻信號上的情感分析算法就是這種算法的一個很好的例子,其中數據和計算需求都很大。這類算法是最耗費資源的算法,需要對算法進行精心設計,并對可用資源進行智能分配。
更深入地研究問題的數據和計算將有助于刻畫問題的復雜度和計算需求。下面討論這方面的內容。
1.4.1 數據維度
將算法從問題的數據維度上歸類,我們需要查看數據的體積(volume)、速度(velocity)和多樣性(variety),這三個方面被稱為數據的3V,其定義如下:
- 體積:指算法將要處理的數據的預期規模;
- 速度:指使用該算法時新數據生成的預期速度,它可以為零;
- 多樣性:量化了所設計算法預計要處理多少種不同類型的數據。
圖1-5更加詳細地展示了數據的3V,其中心是最簡單的數據,體積小且多樣性和速度都很低。逐漸遠離中心時,數據復雜度逐漸增加,這可以從三個維度中的一個或多個維度上增加。例如,在速度維度上,最簡單的是批處理過程,其次是周期性處理過程,然后是近實時處理過程,最后是實時處理過程。實時處理從數據速度維度上看是最復雜的情況。例如,由一組監控攝像頭收集的實時視頻信號的集合具有體積大、速度快和多樣性高的特點,因此可能需要恰當的設計才能有效地存儲和處理數據;而由Excel創建的單個簡單.csv
文件則具有體積小、速度慢和多樣性低的特點。

圖 1-5
例如,如果輸入數據僅有一個簡單的csv
文件,則數據體積小,速度和多樣性都低。另一方面,如果輸入數據是監控攝像頭的實時信號,則數據體積大,速度和多樣性也高,在為其設計算法的時候應該牢記這一點。
1.4.2 計算維度
問題的計算維度與待求解問題的處理需求和計算需求有關。算法的處理需求確定了其應采取何種設計才最有效。例如,深度學習算法一般都需要大量的處理能力。這意味著,深度學習算法都應盡可能采用多節點并行架構。
實例
假定要對視頻展開情感分析,也就是將視頻的不同部分恰當地用人類的悲傷、幸福、恐懼、喜悅、挫折和狂喜等情緒進行標記。這是一項計算密集型的工作,需要大量的計算能力。如圖1-6所示,為了對算法的計算維度進行設計,我們將處理工作分為五個任務,由此構成兩個階段。所有的數據轉換和準備工作都在三個mapper中完成。為了實現這個目的,我們將視頻分為三個不同的部分,統稱為切片(split)。在執行mapper后,將處理后的視頻輸入到兩個稱為reducer的聚合器中。為了完成所需的情感分析,這兩個reducer根據情感對視頻進行分組。最后,將結果合并在輸出中。

圖 1-6
注意,mapper數量將直接轉化為算法運行時的并行度。mapper和reducer的最佳數量取決于數據的特性、所用算法的類型和可用資源的數量。
- 深入核心的敏捷開發:ThoughtWorks五大關鍵實踐
- CockroachDB權威指南
- NLTK基礎教程:用NLTK和Python庫構建機器學習應用
- Easy Web Development with WaveMaker
- JavaScript by Example
- INSTANT OpenNMS Starter
- PhoneGap Mobile Application Development Cookbook
- Learning ArcGIS for Desktop
- 青少年信息學競賽
- Serverless computing in Azure with .NET
- Babylon.js Essentials
- Spring Security Essentials
- 大話Java:程序設計從入門到精通
- 代替VBA!用Python輕松實現Excel編程
- Webpack實戰:入門、進階與調優(第2版)