From 268c73b3c3348d0937d99603fcb321719f4bcbe7 Mon Sep 17 00:00:00 2001 From: krahets Date: Thu, 1 Jun 2023 18:46:07 +0800 Subject: [PATCH] Update and fix some contents. Place the comment box above the comments. --- .../backtracking_algorithm.md | 2 +- .../basic_data_types.md | 8 ++++++- docs/chapter_hashing/hash_collision.md | 2 +- docs/chapter_preface/about_the_book.md | 2 +- docs/chapter_preface/suggestions.md | 24 +++++++++---------- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/docs/chapter_backtracking/backtracking_algorithm.md b/docs/chapter_backtracking/backtracking_algorithm.md index f8e6af074..75bb89d05 100644 --- a/docs/chapter_backtracking/backtracking_algorithm.md +++ b/docs/chapter_backtracking/backtracking_algorithm.md @@ -187,7 +187,7 @@ !!! question "例题三" - 在二叉树中搜索所有值为 $7$ 的节点,返回根节点到这些节点的路径,**路径中不能包含值为 $3$ 的节点**。 + 在二叉树中搜索所有值为 $7$ 的节点,返回根节点到这些节点的路径,**路径中不能包含值为 $3$ 的节点**。 **解题思路**:在例题二的基础上添加剪枝操作,当遇到值为 $3$ 的节点时,则终止继续搜索。 diff --git a/docs/chapter_data_structure/basic_data_types.md b/docs/chapter_data_structure/basic_data_types.md index 5a1fc0e9b..6773f7268 100644 --- a/docs/chapter_data_structure/basic_data_types.md +++ b/docs/chapter_data_structure/basic_data_types.md @@ -27,10 +27,16 @@ | 浮点数 | `float` | 4 bytes | $1.175 \times 10^{-38}$ | $3.403 \times 10^{38}$ | $0.0 f$ | | | `double` | 8 bytes | $2.225 \times 10^{-308}$ | $1.798 \times 10^{308}$ | $0.0$ | | 字符 | `char` | 2 bytes / 1 byte | $0$ | $2^{16} - 1$ | $0$ | -| 布尔 | `bool` | 1 byte / 1 bit | $\text{false}$ | $\text{true}$ | $\text{false}$ | +| 布尔 | `bool` | 1 byte | $\text{false}$ | $\text{true}$ | $\text{false}$ | +!!! tip + + 字符的占用空间大小取决于编程语言采用的字符编码方法,详见「字符编码」章节。 + + 现代计算机 CPU 通常将 1 字节作为最小寻址内存单元。因此,即使表示布尔量仅需 1 位($0$ 或 $1$),它在内存中通常被存储为 1 字节。 + 那么,基本数据类型与数据结构之间有什么联系与区别呢?我们知道,数据结构是在计算机中组织与存储数据的方式。它的主语是“结构”,而非“数据”。如果想要表示“一排数字”,我们自然会想到使用数组。这是因为数组的线性结构可以表示数字的相邻关系和顺序关系,但至于存储的内容是整数 `int` 、小数 `float` 、还是字符 `char` ,则与“数据结构”无关。 换句话说,**基本数据类型提供了数据的“内容类型”,而数据结构提供了数据的“组织方式”**。如以下代码所示,我们可以使用不同基本数据类型来初始化数组。 diff --git a/docs/chapter_hashing/hash_collision.md b/docs/chapter_hashing/hash_collision.md index e52ac9bf2..126005816 100644 --- a/docs/chapter_hashing/hash_collision.md +++ b/docs/chapter_hashing/hash_collision.md @@ -37,7 +37,7 @@ ## 开放寻址 -「开放寻址」方法不引入额外的数据结构,而是通过“多次探测”来解决哈希冲突,**探测方主要包括线性探测、平方探测、多次哈希**。 +「开放寻址」方法不引入额外的数据结构,而是通过“多次探测”来解决哈希冲突,**探测方式主要包括线性探测、平方探测、多次哈希**。 ### 线性探测 diff --git a/docs/chapter_preface/about_the_book.md b/docs/chapter_preface/about_the_book.md index 8ea5964b2..097b2390c 100644 --- a/docs/chapter_preface/about_the_book.md +++ b/docs/chapter_preface/about_the_book.md @@ -40,6 +40,6 @@ 在写作过程中,我阅读了许多关于数据结构与算法的教材和文章。这些作品为本书提供了优秀的范本,确保了本书内容的准确性与品质。在此感谢所有老师和前辈们的杰出贡献! -本书倡导“手脑并用”的学习方法,在此方面深受《动手学深度学习》的启发。在此向各位读者强烈推荐这本优秀著作,包括[中文版](https://github.com/d2l-ai/d2l-zh)、[英文版](https://github.com/d2l-ai/d2l-en)、[李沐老师 bilibili 主页](https://space.bilibili.com/1567748478)。 +本书倡导手脑并用的学习方式,在这一点上深受[《动手学深度学习》](https://github.com/d2l-ai/d2l-zh)的启发。在此向各位读者强烈推荐这本优秀著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这些富有趣味的事。 diff --git a/docs/chapter_preface/suggestions.md b/docs/chapter_preface/suggestions.md index 481a539f7..6d4dd9bc8 100644 --- a/docs/chapter_preface/suggestions.md +++ b/docs/chapter_preface/suggestions.md @@ -4,18 +4,6 @@ 为了获得最佳的阅读体验,建议您通读本节内容。 -## 算法学习路线 - -从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段: - -1. **算法入门**。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效率等方面内容。 -2. **刷算法题**。建议从热门题目开刷,如[剑指 Offer](https://leetcode.cn/problem-list/xb9nqhhg/)和[LeetCode Hot 100](https://leetcode.cn/problem-list/2cktkvj/),先积累至少 100 道题目,熟悉主流的算法问题。初次刷题时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来复习题目,通常在进行 3-5 轮的重复后,就能将其牢记在心。 -3. **搭建知识体系**。在学习方面,我们可以阅读算法专栏文章、解题框架和算法教材,以不断丰富知识体系。在刷题方面,可以尝试采用进阶刷题策略,如按专题分类、一题多解、一解多题等,相关的刷题心得可以在各个社区找到。 - -作为一本入门教程,本书内容主要涵盖“第一阶段”,旨在帮助你更高效地展开第二和第三阶段的学习。 - -![算法学习路线](suggestions.assets/learning_route.png) - ## 行文风格约定 标题后标注 `*` 的是选读章节,内容相对困难。如果你的时间有限,建议可以先跳过。 @@ -195,3 +183,15 @@ git clone https://github.com/krahets/hello-algo.git 同时,也希望您能在评论区多花些时间。一方面,您可以了解大家遇到的问题,从而查漏补缺,这将有助于激发更深入的思考。另一方面,希望您能慷慨地回答其他小伙伴的问题、分享您的见解,让大家共同学习和进步。 ![评论区示例](../index.assets/comment.gif) + +## 算法学习路线 + +从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段: + +1. **算法入门**。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效率等方面内容。 +2. **刷算法题**。建议从热门题目开刷,如[剑指 Offer](https://leetcode.cn/problem-list/xb9nqhhg/)和[LeetCode Hot 100](https://leetcode.cn/problem-list/2cktkvj/),先积累至少 100 道题目,熟悉主流的算法问题。初次刷题时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来复习题目,通常在进行 3-5 轮的重复后,就能将其牢记在心。 +3. **搭建知识体系**。在学习方面,我们可以阅读算法专栏文章、解题框架和算法教材,以不断丰富知识体系。在刷题方面,可以尝试采用进阶刷题策略,如按专题分类、一题多解、一解多题等,相关的刷题心得可以在各个社区找到。 + +作为一本入门教程,本书内容主要涵盖“第一阶段”,旨在帮助你更高效地展开第二和第三阶段的学习。 + +![算法学习路线](suggestions.assets/learning_route.png)