趣學演算法系列 演算法之美

2021-08-11 02:45:42 字數 1971 閱讀 7780

宣告:本系列為趣學演算法一書學習總結內容,在此推薦大家看這本演算法書籍作為演算法入門,

原作者部落格鏈結,本書暫無免費電子版資源,請大家支援正版

書籍簡介

本書內容按照演算法策略分為7章。

- 第1章從演算法之美、簡單小問題、趣味故事引入演算法概念、時間複雜度、空間複雜度的概念和計算方法,以及演算法設計的**性增量問題,使讀者體驗演算法的奧妙。

- 第2~7章介紹經典演算法的設計策略、實戰演練、演算法分析及優化拓展,分別講解貪心演算法、分治演算法、動態規劃、回溯法、分支限界法、線性規劃和網路流。每一種演算法都有4~10個例項,共50個大型例項,包括經典的構造例項和實際應用例項,按照問題分析、演算法設計、完美**、偽**詳解、實戰演練、演算法解析及優化拓展的流程,講解清楚且通俗易懂。附錄介紹常見的資料結構及演算法改進用到的相關知識,包括sort函式、優先佇列、鄰接表、並查集、四邊不等式、排列樹、貝爾曼規則、增廣路複雜性計算、最大流最小割定理等內容。

書籍從大量的趣味故事以及影象展示,向讀者生動的的分析和描述了演算法問題的分析過程,一圖勝千言,影象聯合記憶的效果也遠比文字講解效果出眾,並且配有專門的答疑qq**流,部落格內容記錄分析,值得推薦。

以下內容在原作基礎上進行了刪減或者自我理解加工,詳細內容請檢視原作書籍。

瑞士著名的科學家 n.wirth 教授曾提出: 資料結構+演算法=程式。

資料結構是程式的骨架,演算法是程式的靈魂。

- 什麼是演算法?

演算法是為解決乙個特定的問題而精心設計的一套數學模型以及在這套數學模型上的一系列操作步驟,這些操作步驟將問題描述的輸入資料逐步處理、轉換,並最後得到乙個確定的結果。-出自《演算法的樂趣》-王曉東

以下內容也有出自此書籍中的總結,由於篇幅零散在此提前說明。

- 演算法具有以下特性。

- 有窮性:演算法是由若干條指令組成的有窮序列,總是在執行若干次後結束,不可能永不停止。

- 確定性:每條語句有確定的含義,無歧義。

- 可行性:演算法在當前環境條件下可以通過有限次運算實現。

- 輸入輸出:有零個或多個輸入,乙個或多個輸出。

演算法的時間複雜度

最好、最壞和平均情況分別求演算法漸近複雜度,但我們考查乙個演算法通常考查最壞的情況,而不是考查最好的情況,最壞情況對衡量演算法的好壞具有實際的意義。

演算法的空間複雜度、

演算法占用的空間大小。一般將演算法的輔助空間作為衡量空間複雜度的標準。空間複雜度的本意是指演算法在執行過程中占用了多少儲存空間。演算法占用的儲存空間

包括:演算法學習瓶頸

很多人感嘆:演算法為什麼這麼難。演算法作為一門學問,有兩條幾乎平行的線索。乙個是資料結構(資料物件):數、

矩陣、集合、串、排列、圖、表示式、分布等。另乙個是演算法策略:貪心、分治、動態規

劃、線性規劃、搜尋等。

傳統的演算法書大多注重

內容的收錄,但卻忽視思維過程的展示,因此我們學習了經典的演算法,卻費解於演算法設計

的過程。

本章主要說明問題

程式設計師必須要會演算法嗎?

計算機其實是一種很傻的工具,傻到幾乎沒有智商(至少目前是這樣),我暫且理解為面向傻瓜程式設計(在設計演算法思路時這個原則 可以更好的幫助理解你設計變數 變數交換傳遞等過程)。

計算機願意做,但前提是你要告訴它怎麼做。演算法可以理解為這樣一種技術,它將告訴計算機怎麼做。

電腦程式最重要的兩點,那就是演算法和資料結構。說資料結構和演算法沒用的人是因為他們用不到,用不到的原因是他們想不到,而想不到的原因是他們不會。就如小學生很少能看懂高等數學,當你的水平不到一定的層次,你就對所認知的東西有所牴觸,不理解不等於不認同,存在即合理,演算法工程師的薪資已經說明問題。

《趣學演算法》之貪心演算法(上)

乙個貪心演算法總是做出當前最好的選擇,也就是說,它期望通過區域性最優選擇從而得到全域性最優的解決方案。演算法導論 貪心演算法秘籍 有一天,加勒比海盜們截獲了一艘裝滿古董的貨船,每件古董都價值連城,一旦打碎就失去價值。雖然海盜船足夠大,但載重量為 c,每件古董的重量為 wi 海盜們該如何把盡可能多數量...

C 演算法系列之排序

插入排序 o n2 基本思路就是玩撲克牌的時候,從牌堆裡摸牌放到手上的思路 include include include include include include const int m 1000 const int n 1000 template void insertsort const...

經典演算法系列之 遞迴

1 前言 演算法,在計算機中的地位,就相當於人類大腦的決策中樞系統,哪怕最簡單的演算法,其精妙的思維方式,都可以讓人開啟一扇新的視窗。演算法,它不僅僅只是狹義的用來解決電腦科學領域的問題,更是一種 思維方式 演算法思維,是一種深度思考和創造的過程。演算法,只有真正理解了,而不只是所謂的知道,並將應用...