diff --git a/chapter_computational_complexity/performance_evaluation.md b/chapter_computational_complexity/performance_evaluation.md index c0118a1e1..bc7550816 100644 --- a/chapter_computational_complexity/performance_evaluation.md +++ b/chapter_computational_complexity/performance_evaluation.md @@ -6,7 +6,7 @@ comments: true ## 2.1.1. 算法评价维度 -在开始学习算法之前,我们首先需要明确算法的设计目标,换句话说,我们应该如何评判算法的优劣。从总体上看,算法设计追求以下两个层面的目标: +从总体上看,算法设计追求以下两个层面的目标: 1. **找到问题解法**。算法需要在规定的输入范围内,可靠地求得问题的正确解。 2. **寻求最优解法**。同一个问题可能存在多种解法,我们希望找到尽可能高效的算法。 @@ -16,7 +16,7 @@ comments: true - **时间效率**,即算法运行速度的快慢。 - **空间效率**,即算法占用内存空间的大小。 -数据结构与算法的终极目标是“又快又省”。了解如何评估算法效率非常重要,因为只有掌握了评价方法,我们才能进行算法间的对比分析,从而指导算法设计与优化。 +简而言之,**我们的目标是设计“既快又省”的数据结构与算法**。掌握评估算法效率的方法则至关重要,因为只有了解评价标准,我们才能进行算法之间的对比分析,从而指导算法设计与优化过程。 ## 2.1.2. 效率评估方法 diff --git a/chapter_data_structure/classification_of_data_structure.md b/chapter_data_structure/classification_of_data_structure.md index 566e763c9..68044f7f3 100644 --- a/chapter_data_structure/classification_of_data_structure.md +++ b/chapter_data_structure/classification_of_data_structure.md @@ -4,13 +4,13 @@ comments: true # 3.2. 数据结构分类 -数据结构主要可根据「逻辑结构」和「物理结构」两种角度进行分类。 +数据结构可以从逻辑结构和物理结构两个维度进行分类。 ## 3.2.1. 逻辑结构:线性与非线性 -**「逻辑结构」反映了数据之间的逻辑关系**。数组和链表的数据按照顺序依次排列,反映了数据间的线性关系;树从顶至底按层级排列,反映了祖先与后代之间的派生关系;图由结点和边组成,反映了复杂网络关系。 +**「逻辑结构」揭示了数据元素之间的逻辑关系**。在数组和链表中,数据按照顺序依次排列,体现了数据之间的线性关系;而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系;图则由结点和边构成,反映了复杂的网络关系。 -我们一般将逻辑结构分为「线性」和「非线性」两种。“线性”这个概念很直观,即表明数据在逻辑关系上是排成一条线的;而如果数据之间的逻辑关系是非线性的(例如是网状或树状的),那么就是非线性数据结构。 +逻辑结构通常分为「线性」和「非线性」两类。线性结构比较直观,指数据在逻辑关系上呈线性排列;非线性结构则相反,呈非线性排列,例如网状或树状结构。 - **线性数据结构**:数组、链表、栈、队列、哈希表; - **非线性数据结构**:树、图、堆、哈希表; @@ -23,21 +23,21 @@ comments: true !!! note - 若感到阅读困难,建议先看完下个章节「数组与链表」,再回过头来理解物理结构的含义。 + 如若阅读起来有困难,建议先阅读下一章“数组与链表”,然后再回头理解物理结构的含义。 -**「物理结构」反映了数据在计算机内存中的存储方式**。从本质上看,分别是 **数组的连续空间存储** 和 **链表的离散空间存储**。物理结构从底层上决定了数据的访问、更新、增删等操作方法,在时间效率和空间效率方面呈现出此消彼长的特性。 +**「物理结构」体现了数据在计算机内存中的存储方式**,可以分为数组的连续空间存储和链表的离散空间存储。物理结构从底层决定了数据的访问、更新、增删等操作方法,同时在时间效率和空间效率方面呈现出互补的特点。 ![连续空间存储与离散空间存储](classification_of_data_structure.assets/classification_phisical_structure.png)
Fig. 连续空间存储与离散空间存储
-**所有数据结构都是基于数组、或链表、或两者组合实现的**。例如栈和队列,既可以使用数组实现、也可以使用链表实现,而例如哈希表,其实现同时包含了数组和链表。 +**所有数据结构都是基于数组、链表或二者的组合实现的**。例如,栈和队列既可以使用数组实现,也可以使用链表实现;而哈希表的实现可能同时包含数组和链表。 - **基于数组可实现**:栈、队列、哈希表、树、堆、图、矩阵、张量(维度 $\geq 3$ 的数组)等; - **基于链表可实现**:栈、队列、哈希表、树、堆、图等; -基于数组实现的数据结构也被称为「静态数据结构」,这意味着该数据结构在在被初始化后,长度不可变。相反地,基于链表实现的数据结构被称为「动态数据结构」,该数据结构在被初始化后,我们也可以在程序运行中修改其长度。 +基于数组实现的数据结构也被称为「静态数据结构」,这意味着此类数据结构在初始化后长度不可变。相对应地,基于链表实现的数据结构被称为「动态数据结构」,这类数据结构在初始化后,仍可以在程序运行过程中对其长度进行调整。 !!! tip - 数组与链表是其他所有数据结构的“底层积木”,建议读者一定要多花些时间了解。 + 数组与链表是其他所有数据结构的“底层积木”,建议读者投入更多时间深入了解这两种基本数据结构。 diff --git a/chapter_data_structure/data_and_memory.md b/chapter_data_structure/data_and_memory.md index e1e905e44..dc9004adc 100644 --- a/chapter_data_structure/data_and_memory.md +++ b/chapter_data_structure/data_and_memory.md @@ -6,14 +6,14 @@ comments: true ## 3.1.1. 基本数据类型 -谈到计算机中的数据,我们能够想到文本、图片、视频、语音、3D 模型等等,这些数据虽然组织形式不同,但都是由各种基本数据类型构成的。 +谈及计算机中的数据,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织形式各异,但它们都由各种基本数据类型构成。 **「基本数据类型」是 CPU 可以直接进行运算的类型,在算法中直接被使用**。 -- 「整数」根据不同的长度分为 byte, short, int, long ,根据算法需求选用,即在满足取值范围的情况下尽量减小内存空间占用; -- 「浮点数」代表小数,根据长度分为 float, double ,同样根据算法的实际需求选用; -- 「字符」在计算机中是以字符集的形式保存的,char 的值实际上是数字,代表字符集中的编号,计算机通过字符集查表来完成编号到字符的转换。占用空间通常为 2 bytes 或 1 byte ; -- 「布尔」代表逻辑中的“是”与“否”,其占用空间需根据编程语言确定,通常为 1 byte 或 1 bit ; +- 「整数」按照不同的长度分为 byte, short, int, long 。在满足取值范围的前提下,我们应该尽量选取较短的整数类型,以减小内存空间占用; +- 「浮点数」表示小数,按长度分为 float, double ,选用规则与整数相同。 +- 「字符」在计算机中以字符集形式保存,char 的值实际上是数字,代表字符集中的编号,计算机通过字符集查表完成编号到字符的转换。 +- 「布尔」代表逻辑中的“是”与“否”,其占用空间需根据编程语言确定。Fig. 内存条、内存空间、内存地址
-**内存资源是设计数据结构与算法的重要考虑因素**。内存是所有程序的公共资源,当内存被某程序占用时,不能被其它程序同时使用。我们需要根据剩余内存资源的情况来设计算法。例如,若剩余内存空间有限,则要求算法占用的峰值内存不能超过系统剩余内存;若运行的程序很多、缺少大块连续的内存空间,则要求选取的数据结构必须能够存储在离散的内存空间内。 +**在数据结构与算法的设计中,内存资源是一个重要的考虑因素**。内存是所有程序的共享资源,当内存被某个程序占用时,其他程序无法同时使用。我们需要根据剩余内存资源的实际情况来设计算法。例如,算法所占用的内存峰值不应超过系统剩余空闲内存;如果运行的程序很多并且缺少大量连续的内存空间,那么所选用的数据结构必须能够存储在离散的内存空间内。 diff --git a/chapter_data_structure/summary.md b/chapter_data_structure/summary.md index b6c52eee5..25a3a5b63 100644 --- a/chapter_data_structure/summary.md +++ b/chapter_data_structure/summary.md @@ -4,8 +4,8 @@ comments: true # 3.3. 小结 -- 整数 byte, short, int, long 、浮点数 float, double 、字符 char 、布尔 boolean 是计算机中的基本数据类型,占用空间的大小决定了它们的取值范围。 -- 在程序运行时,数据存储在计算机的内存中。内存中每块空间都有独立的内存地址,程序是通过内存地址来访问数据的。 -- 数据结构主要可以从逻辑结构和物理结构两个角度进行分类。逻辑结构反映了数据中元素之间的逻辑关系,物理结构反映了数据在计算机内存中的存储形式。 -- 常见的逻辑结构有线性、树状、网状等。我们一般根据逻辑结构将数据结构分为线性(数组、链表、栈、队列)和非线性(树、图、堆)两种。根据实现方式的不同,哈希表可能是线性或非线性。 -- 物理结构主要有两种,分别是连续空间存储(数组)和离散空间存储(链表),所有的数据结构都是由数组、或链表、或两者组合实现的。 +- 计算机中的基本数据类型包括整数 byte, short, int, long 、浮点数 float, double 、字符 char 和布尔 boolean ,它们的取值范围取决于占用空间大小和表示方式。 +- 当程序运行时,数据被存储在计算机内存中。每个内存空间都拥有对应的内存地址,程序通过这些内存地址访问数据。 +- 数据结构可以从逻辑结构和物理结构两个角度进行分类。逻辑结构描述了数据元素之间的逻辑关系,而物理结构描述了数据在计算机内存中的存储方式。 +- 常见的逻辑结构包括线性、树状和网状等。通常我们根据逻辑结构将数据结构分为线性(数组、链表、栈、队列)和非线性(树、图、堆)两种。哈希表的实现可能同时包含线性和非线性结构。 +- 物理结构主要分为连续空间存储(数组)和离散空间存储(链表)。所有数据结构都是由数组、链表或两者的组合实现的。 diff --git a/index.md b/index.md index ef5ffc52b..a7327d67b 100644 --- a/index.md +++ b/index.md @@ -74,11 +74,11 @@ hide: