数据和它们的存储方式。
这个系列主要讨论的是数据及其存储方式,因而,数据结构。当然,单纯地讨论数据结构并不是很有意思,我们也要关心处理数据的方法,即算法。
在接下来的内容中,我们将探索数据的线性和非线性的存储方式、不同存储方式的意义以及针对不同的问题选择数据存储和处理的方案。
由于内容的特殊性,不同的章节可能长度有所不一。我们将会在离散结构和树形结构花大量篇幅解释其各种变体(因为诚然,「有趣」和「常考」的部分就是这两部分了),而在其他部分很可能只是草草带过,仅作出简单的解释。这也意味着 S4
和 S5
两节会迟于其他章节发布。
出于个人的恶趣味,我想使用 OCaml 来进行数据结构的讲解和算法实现。尽管 JS 仍然是个人喜好,但是考虑到 OCaml 更贴近数据结构的数学表达,我认为使用 OCaml 比使用其他命令式语言要更简洁一些——因为内存管理和模式匹配这种脏活累活都由语言内部处理了。当然,在实际的面试和考察中,能用上 OCaml 的机会寥寥,所以或许会考虑写一些将 OCaml 转写成 Java 的文章。
目录
- S0 - Data Structure
- S1 - Memory Model
- S2 - Linear Container
- S3 - Semi-linear Container
- S4 - Hierarchical Container
- S5 - Discrete Container
- S6 - Complexity of Code
- S7 - Time-Space Tradeoff
- S8 - Generators and Streams
- S9 - Purity of Functions
- S10 - Lazy Evaluation and Result Caching
- S11 - Dynamic Programming
- S12 - More on Recursive Calls
Your comments will be submitted to a human moderator and will only be shown publicly after approval. The moderator reserves the full right to not approve any comment without reason. Please be civil.