演算法/貢獻者指南
外觀
< 演算法
本書是關於資料結構和演算法的三本教科書系列的一部分
- 資料結構—適合作為資料結構入門課程的書籍,介紹了最常見的資料抽象及其構造和屬性。關於關鍵點的教程。
- 演算法—適合作為演算法入門課程的書籍,介紹了最常見的演算法技巧以及如何分析演算法。假設對資料結構有一定了解。關於關鍵點的教程。
- 高階資料結構和演算法—涵蓋更高階內容的書籍,假設對資料結構和演算法有一定了解。前兩本書是教程,而這本書更多的是參考性質的。因此,它的內容可以更加多元化。不屬於前兩本書教程性質的更高階(和有趣)的內容應該放在這本書裡。
這些書籍之所以組成一個系列,是為了幫助縮小它們的範圍並協調工作。最終目標是為每個計算機科學主題提供書籍。
- 如果您想修復錯誤,只需點選“編輯”,進行修改,然後點選儲存。我們會稽核這些修改,確保它們適合本書。如果您不確定,可以訪問“討論”頁面並提出疑問。一般來說,要進行小的更改,不需要先詢問,你可以使用常識來判斷你的更改是否合適。
- 如果您想編寫章節、部分或部分章節,請檢視標記為“TODO”標籤的專案並從那裡開始。
- 請務必先閱讀本書的所有其他章節,以避免內容重複。
- 編寫章節時,您可以將某些部分標記為“[TODO: 解釋]”,其中 解釋 描述了您希望在該部分發生的內容。例如,如果您不擅長製作影像,您可以將影像的描述作為 TODO 專案。也許擅長製作影像的人會注意到這一點併為您提供一個。TODO 專案的目的是給出要寫什麼內容的計劃。
- 這是一個教程:我們不是要建立包含所有已建立演算法的百科全書,也不是要展示特定演算法的絕對最佳版本。
- 不要在書籍章節中包含指向維基百科文章的連結:我們的想法是讓每一本書都自成一體,這樣讀者就可以打印出書籍並單獨閱讀,而不必線上瀏覽。
- 本書使用一種虛擬碼語言,對於熟悉 Algol 家族語言(包括 C、Java、Pascal 和 Python)的人來說應該足夠熟悉。它包含一些額外的功能,有助於抽象掉瑣碎的實現細節,從而可以傳達真正的演算法思想,而不是專注於依賴於語言的瑣碎實現問題。
- 非虛擬碼的實現可以在附錄中編寫。這些實現可以供讀者使用,並可以消除任何可能的歧義。實現應該經過充分測試幷包含測試用例。實現語言為 Python、C、Java 和 Scheme。
- 如果該部分呈現的材料對於理解章節的整體要點來說並不重要,則在章節或小節標題旁邊加一個星號(“*”)。(例如,更初級的讀者可以選擇跳過或略讀這些章節。)
- 儘可能使用原始來源。如果您確實使用了參考資料,請將其放在參考資料部分。未經許可不得複製內容。此外,請注意,即使一些 GFDL 內容使用不同的許可版本(並非所有內容都向前相容),也應未經許可不得複製。
- 將維基百科用作材料的另一個來源,但編輯材料以僅呈現主要要點和想法:維基百科的百科全書式細節在試圖學習基本概念時會分散注意力。
- 對於一些短語,可以使用數學上的“我們”這種尊稱,但儘可能使用第二人稱“你”:這使得句子更容易構建,而且聽起來也更直接。
- 尋找對理解演算法或軟體工程流程中某個部分的見解。
- 避免使用被動語態(“這篇文章是我們寫的。”)。相反,嘗試使用主動語態(“我們寫了這篇文章。”)。
- 不要使用“this”作為代詞,只將其用作形容詞。
- 應該建立並大體上達成共識的目錄。這樣的目錄將為本書的範圍設定一個基準。當然,以後可以進行更改。( 已完成:目錄大體上已得到貢獻者的認可)
- 在章節劃分之後,應該設計好章節和部分,使用 TODO 專案來描述要在該部分放置的內容。( 已完成)
- 應該首先編寫最重要的概念,以便為其他材料的構建提供一個錨點和上下文。( 正在進行中:加入我們!)
- 實現演算法的 C、Java、Python 和 Scheme 版本並將其放在附錄中。( 仍然 TODO...)
- 類似於開源專案,應該新增越來越多的“功能”(即章節和部分)。此階段將在完成第一版里程碑後進行。但是,在對第二版進行改進時,不應忽視核心專案。( 仍然 TODO...)
編寫書籍需要時間和奉獻精神,但如果您已經走到了這一步,它很可能是值得的。正如免費軟體程式不會從樹上掉下來一樣,完整的開放書籍也不會自己寫出來。