學習算法的重要性在介紹具體算法之前,我先說說我學習算法的初心。
我的初心不外乎兩點:第壹,BAT等互聯網公司在招聘面試時,應該要求有算法知識。如果我想進互聯網公司,我必須學好算法;第二,通過學習算法提高個人開發的基本功,讓我能夠針對不同的場景正確選擇相應的數據結構和算法,讓程序更加健壯,提高程序的運行效率。
應用領域目前計算機的各個細分領域都涉及到不同的算法。
比如在搜索引擎中,我們通常會使用谷歌、百度等瀏覽器。我們只要輸入壹個關鍵詞,瀏覽器就會快速返回相關的集合,這個集合背後隱藏著很多算法。
沒有這些算法,我們不可能這麽快得到想要的結果。
再比如人工智能,通過計算模型算法實現人體識別、語音識別等各種應用場景。
算法分析上面我們已經提到,算法就是問題的解決方案,同壹個問題可能有不同的解決方案。
因此,為了衡量壹個算法的優劣,提出了時間復雜度和空間復雜度的概念。
時間復雜度壹般來說,算法中基本運算的重復次數是問題規模n的函數f(n),算法的時間度量記為T(n)=O(f(n)),這意味著隨著問題規模n的增大,算法執行時間的增長速度與f(n)的增長速度相同,稱為算法的漸近時間復雜度,簡稱時間復雜度。
空間復雜度空間復雜度是算法在運行過程中所占用的臨時存儲空間的度量,用S(n)=O(f(n))表示。
壹個算法的優劣主要從算法的執行時間和需要的存儲空間兩個方面來衡量。