diff --git a/README.md b/README.md index 23bf5b2bb..a10dd2f87 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,22 @@ Contents - Chapter 15, Search II; - Appendices and answers +Preface +-------- +Some people did not see their works published, like Fermat and Galois; Some people refused to publish any 'imperfect' works despite they had already been great and important (at least from our view point), like Gauss; Some people lost some of their works in fires or wars, like Riemann. We owe Samuel Fermat, who collected his father's notes and mails, published a special edition of _Arithmetica, augmented with Fermat's comments_; We owe Liouville, who re-discovered and published Galois' papers in _Journal de Mathématiques Pures et Appliquées_; We owe Dedekind, who collected the burnt notebook from Mrs Riemann after her husband's early death. We appreciate those publishers who save, protect, and spread human knowledge no matter it's profitable or not (in terms of money). The development of technology and internet greatly change the way that people write, log, edit, and publish things. I was able to write and share about elementary functional algorithms and data structures online from 2009. It was accumulated to a draft book by 2015, and was published in 2017 in Chinese. + +I always think I am so lucky compare to the people in the past. It's impossible to make this happen before, while there are plenty of wonderful works in this domain yet to be published. Thanks to the editors, the publisher, and every reader. I collected the feedback, questions, and comments, started to re-write the book from the end of 2020, and completed a new edition by May 2023. The main changes are: + +1. Rewrite all chapters, use simple notations instead of long text descriptions. + +2. Reorganize the book structure. **(a)** Move the list to the first chapter, make it friendly to the new readers to the functional programming; **(b)** Add a section of paired-list B-tree in chapter 7. Add the remove algorithms to the red-black tree and AVL tree to the appendix; **(c)** Remove the chapter of the suffix tree. For imperative string matching, focus on KMP algorithm, and remove the Boyer-Moore algorithm; **(d)** Add the answers to all the 120 exercises. + +3. Unify the programming language of the example programs. This is one of the most feedback to the first edition. Use Haskell for functional examples, and consolidate imperative ones in a language named 'Bourbaki' (Nicolas Bourbaki is the pseudonym of a group of (mainly) French mathematicians, including André Weil, Henri Cartan, and etc. The virtual figure indicates the programming language does not exist, while it reflects some popular languages behind, like Python, Java, C and etc.). Collect the examples as an appendix after each chapter. + +4. Correct all known errors in the first edition. + +Chris Okasaki and Richard Bird established the main content of purely functional data structures and algorithms. I essentially tailored and re-organized the materials under their framework. Although the new functional applications and technologies evolve fast, the elementary algorithms are relative stable. This slow changing part allows me to spend over 10 years, iteratively write and improve this book. + Install --------