
- Algorithms and Data Structures
- 算法和数据结构的基础教程和进阶知识总结
- # 1. data-structure
- 1-1. Data Structure 00 - Introduction1-2. Data Structure 01 - Linear List1-3. Data Structure 02 - Restricted Linear List1-4. Data Structure 03 - Tree1-5. Data Structure 04 - Binary Tree1-6. Data Structure 05 - Binary Search Tree1-7. Data Structure 05 - Heap1-8. Data Structure 06 - Self-balancing Binary Search Tree1-9. Data Structure 06 - Binary Heap1-10. Data Structure 07 - AVL Tree1-11. Data Structure 07 - Disjoint-Set Union1-12. Data Structure 10 - Summation Sequence and Difference Sequence1-13. Data Structure 11 - Binomial Heap1-14. Data Structure xx - xx
- # 2. fundamental-algorithms
# 前言
Algorithm and Data Structures 栏目下的文章内容包括各种算法和数据结构,细化来说,又分为若干个知识板块,分别包括不同类别的算法或数据结构知识。
本栏目中的任何文章都假定读者至少已经掌握一门主流编程语言,且文章中的代码示例均使用 C/C++ 编写,但是除指针外几乎没有使用 C/C++ 独有的其它语言特性,读者只需了解 C 指针和 C++ 引用的概念即可正常阅读。
特别声明,本栏目中的文章并不能帮助你通过学校的算法和数据结构相关课程的书面考试,但能帮助你真正地掌握这些知识,能让你学会如何用代码实现这些基础算法与数据结构。如果只是为了应付考试,那么我的文章并不适合你。
根据面向读者的不同,文章可分为“面向初学者”和“面向进阶读者”两大类。
关于面向初学者的文章:
这些文章是相对基础的教程。具体地讲:
适合对当前知识板块掌握尚浅的读者。注意,是相对于当前知识板块,而不是相对于整个 Algorithm and Data Structures 栏目。
默认读者没有接触过任何相关知识,会对所有涉及到的、读者可能不知道的知识进行解释。
通常会以大量的篇幅对简单的基础知识进行解释,用语言引导读者举一反三深入思考。
会使用精简代码并分段提取出来讲解,用大量的简单示例图来帮助学习,完整的代码实现也会附于文末。
关于面向进阶读者的文章:
这些文章是我对一些进阶知识的理解和总结。具体地讲:
适合对当前知识板块已经有所了解,希望了解相关进阶内容的读者。
默认读者的基础较为良好,不会花费大量篇幅解释一些我认为过于简单的内容。
通常会深入解释知识的内在原理,甚至给出正确性证明等,帮助读者完全掌握知识,而非浮于表面。
会提供更多学校课本上没有的扩展知识,并且通常只给出完整的代码实现,除非是一些重要或较难的关键代码会分段提取出来讲解。
有些是专门针对算法竞赛选手的文章,知识难度较大,且部分知识的实用价值不高,此类情况会特别标注在文章的开头,非竞赛选手可以自行避过。
关于文章的阅读顺序:
在每个知识板块内,每篇文档会有一个标号,这个标号表示了该文档大致的在当前知识板块内的相对级别,建议按标号从小到大阅读,标号相同的则无所谓。
有些文档会具有相同的标号,这是按层划分的,可能会让您感到有些困惑,您可以参阅每个知识板块头部的阅读指引图来获得确切的阅读顺序。
一些文档的开头会给出前置知识声明,如果你没有掌握这些知识,建议进行递归学习。这些前置声明和阅读指引图提供的顺序是相同的。
# 推荐浏览
这两个网站提供了一些算法和数据结构的动态可视化预览界面,读者能够非常方便地观看算法和数据结构的整个动态的运行过程,初学者可以借助这些可视化界面进行更加全面的理解和学习。
- 01
- Reading Papers - Kernel Concurrency06-01
- 02
- Linux Kernel - Source Code Overview05-01
- 03
- Linux Kernel - Per-CPU Storage05-01