演算法/前言
本書旨在成為高效演算法設計和分析的入門讀物。在整本書中,我們將只介紹最基本的技巧,並描述分析它們所需的嚴格數學方法。
涵蓋的主題包括
- 分治技術。
- 在演算法中使用隨機化。
- 一般性的,但通常效率低下的回溯技術。
- 動態規劃作為某些回溯演算法的有效最佳化。
- 貪心演算法作為其他型別的回溯演算法的最佳化。
- 爬山技術,包括網路流。
本書的目的是向您展示如何系統地將不同的技術應用於您自己的演算法,以提高其效率。雖然本書主要強調通用技術,但也深入探討了一些著名的演算法。本書的編寫方式使其可以在一個學期內從頭到尾閱讀,其中用*標記的部分可以跳過。
本書是關於技術的教程,而不是參考。對於參考,我們強烈推薦 [Knuth] 和 [CLRS] 的鉅著。此外,有時最佳的見解來自原始資料本身(例如 [Hoare])。
一個 華夏公益教科書 類似於開源軟體專案:貢獻者為專案建立內容以幫助他人,為了個人豐富,或為了完成貢獻者自身工作(例如,講座準備)的目的。
像開源程式一樣,開放書籍需要時間才能完成,但它可以從讀者即使是微不足道的貢獻中獲益良多。例如,您可以修復文字中的“錯誤”(錯誤可能是印刷錯誤、說明錯誤、技術錯誤、美學錯誤或其他錯誤),以製作更好的書籍。如果您發現修復錯誤的機會,只需點選“編輯”,進行更改,然後點選儲存。其他貢獻者可能會審查您的更改以確保它們適合本書。如果您不確定,您可以訪問討論頁面並在那裡提出問題。使用常識。
如果您想做出更大的貢獻,您可以檢視那些過短或需要更多工作的部分或章節,然後開始寫作!一定要先瀏覽整本書,以避免內容重複。此外,您應該閱讀 貢獻者指南 頁面以獲得一致性提示和建議。
請注意,您不需要一次性貢獻所有內容。您可以將部分標記為“TODO”,並描述待完成的工作,也許其他人會為您完成這些部分。一旦所有 TODO 項都完成,我們就將完成我們的第一版!
這本書故意保持重點狹窄,以使貢獻更容易(因為這樣最終目標就更清晰了)。這本書是關於演算法的三本計算機科學教科書系列的第二部分,從 資料結構 開始,以 高階資料結構和演算法 結束。如果您想貢獻一個還沒有列入這三本書中的主題,請嘗試將其放在 高階 書籍中,該書籍的性質更加相容。或者,如果您認為該主題是基礎性的,您可以去 演算法討論頁面 或 資料結構討論頁面 提出建議。
此外,歡迎將演算法的實現作為附錄。