diff --git a/404.html b/404.html index c4d9c74e3..058b2413c 100644 --- a/404.html +++ b/404.html @@ -871,6 +871,8 @@ + + @@ -979,12 +981,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_appendix/contribution/index.html b/chapter_appendix/contribution/index.html index 5bcf815e8..4061ed120 100644 --- a/chapter_appendix/contribution/index.html +++ b/chapter_appendix/contribution/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_appendix/index.html b/chapter_appendix/index.html index 28f998f04..419b4594d 100644 --- a/chapter_appendix/index.html +++ b/chapter_appendix/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_appendix/installation/index.html b/chapter_appendix/installation/index.html index fc2679a0b..717fc466e 100644 --- a/chapter_appendix/installation/index.html +++ b/chapter_appendix/installation/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_appendix/terminology/index.html b/chapter_appendix/terminology/index.html index b34db8d4c..ff7945655 100644 --- a/chapter_appendix/terminology/index.html +++ b/chapter_appendix/terminology/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_array_and_linkedlist/array/index.html b/chapter_array_and_linkedlist/array/index.html index 7dce851b2..e48588058 100644 --- a/chapter_array_and_linkedlist/array/index.html +++ b/chapter_array_and_linkedlist/array/index.html @@ -895,6 +895,8 @@ + + @@ -1119,12 +1121,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 @@ -3779,7 +3809,7 @@
    array.swift
    /* 在数组的索引 index 处插入元素 num */
     func insert(nums: inout [Int], num: Int, index: Int) {
         // 把索引 index 以及之后的所有元素向后移动一位
    -    for i in sequence(first: nums.count - 1, next: { $0 > index + 1 ? $0 - 1 : nil }) {
    +    for i in nums.indices.dropFirst(index).reversed() {
             nums[i] = nums[i - 1]
         }
         // 将 num 赋给 index 处元素
    @@ -3921,12 +3951,11 @@
     
    array.swift
    /* 删除索引 index 处元素 */
     func remove(nums: inout [Int], index: Int) {
    -    let count = nums.count
    -    // 把索引 index 之后的所有元素向前移动一位
    -    for i in sequence(first: index, next: { $0 < count - 1 - 1 ? $0 + 1 : nil }) {
    -        nums[i] = nums[i + 1]
    -    }
    -}
    +    // 把索引 index 之后的所有元素向前移动一位
    +    for i in nums.indices.dropFirst(index).dropLast() {
    +        nums[i] = nums[i + 1]
    +    }
    +}
     
    diff --git a/chapter_array_and_linkedlist/index.html b/chapter_array_and_linkedlist/index.html index c82a0b620..00e67985e 100644 --- a/chapter_array_and_linkedlist/index.html +++ b/chapter_array_and_linkedlist/index.html @@ -895,6 +895,8 @@ + + @@ -1003,12 +1005,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 @@ -3302,7 +3332,8 @@
  • 4.1   数组
  • 4.2   链表
  • 4.3   列表
  • -
  • 4.4   小结
  • +
  • 4.4   内存与缓存 *
  • +
  • 4.5   小结
  • diff --git a/chapter_array_and_linkedlist/linked_list/index.html b/chapter_array_and_linkedlist/linked_list/index.html index 3cb91c84f..5fef0f80d 100644 --- a/chapter_array_and_linkedlist/linked_list/index.html +++ b/chapter_array_and_linkedlist/linked_list/index.html @@ -895,6 +895,8 @@ + + @@ -1112,12 +1114,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 @@ -4433,19 +4463,14 @@ 分散内存空间 -缓存局部性 -友好 -不友好 - - 容量扩展 长度不可变 可灵活扩展 内存效率 -占用内存少、浪费部分空间 -占用内存多 +元素占用内存少、但可能浪费空间 +元素占用内存多 访问元素 diff --git a/chapter_array_and_linkedlist/list/index.html b/chapter_array_and_linkedlist/list/index.html index 39dde77b2..164e2e5b0 100644 --- a/chapter_array_and_linkedlist/list/index.html +++ b/chapter_array_and_linkedlist/list/index.html @@ -18,7 +18,7 @@ - + @@ -895,6 +895,8 @@ + + @@ -1105,12 +1107,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 @@ -3499,7 +3529,7 @@
    list_test.go
    /* 初始化列表 */
     // 无初始值
    -nums1 := []int
    +nums1 := []int{}
     // 有初始值
     nums := []int{1, 3, 2, 5, 4}
     
    @@ -5449,9 +5479,9 @@ aria-label="页脚"
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + @@ -1017,7 +1047,7 @@ - 4.4   小结 + 4.5   小结 @@ -1028,7 +1058,7 @@ - 4.4   小结 + 4.5   小结 @@ -3351,7 +3381,7 @@ -

    4.4   小结

    +

    4.5   小结

    1.   重点回顾

    • 数组和链表是两种基本的数据结构,分别代表数据在计算机内存中的两种存储方式:连续空间存储和分散空间存储。两者的特点呈现出互补的特性。
    • @@ -3360,6 +3390,9 @@
    • 常见的链表类型包括单向链表、循环链表、双向链表,它们分别具有各自的应用场景。
    • 列表是一种支持增删查改的元素有序集合,通常基于动态数组实现,其保留了数组的优势,同时可以灵活调整长度。
    • 列表的出现大幅地提高了数组的实用性,但可能导致部分内存空间浪费。
    • +
    • 程序运行时,数据主要存储在内存中。数组提供更高的内存空间效率,而链表则在内存使用上更加灵活。
    • +
    • 缓存通过缓存行、预取机制以及空间和时间局部性等数据加载机制,为 CPU 提供快速数据访问,显著提升程序的执行效率。
    • +
    • 由于数组具有更高的缓存命中率,因此它通常比链表更高效。在选择数据结构时,应根据具体需求和场景做出恰当选择。

    2.   Q & A

    @@ -3445,9 +3478,9 @@ aria-label="页脚" @@ -3571,7 +3604,7 @@ aria-label="页脚"
    -

    根据以上方法,可以得到算法运行时间为 \(6n + 12\) ns :

    +

    根据以上方法,可以得到算法运行时间为 \((6n + 12)\) ns :

    \[ 1 + 1 + 10 + (1 + 5) \times n = 6n + 12 \]
    diff --git a/chapter_data_structure/basic_data_types/index.html b/chapter_data_structure/basic_data_types/index.html index a9bd34fb2..59bbc755c 100644 --- a/chapter_data_structure/basic_data_types/index.html +++ b/chapter_data_structure/basic_data_types/index.html @@ -905,6 +905,8 @@ + + @@ -1013,12 +1015,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 @@ -3469,7 +3499,7 @@
    // 使用多种基本数据类型来初始化数组
     let numbers: Vec<i32> = vec![0; 5];
    -let decimals: Vec<float> = vec![0.0, 5];
    +let decimals: Vec<f32> = vec![0.0, 5];
     let characters: Vec<char> = vec!['0'; 5];
     let bools: Vec<bool> = vec![false; 5];
     
    diff --git a/chapter_data_structure/character_encoding/index.html b/chapter_data_structure/character_encoding/index.html index c0745265d..2c5455225 100644 --- a/chapter_data_structure/character_encoding/index.html +++ b/chapter_data_structure/character_encoding/index.html @@ -970,6 +970,8 @@ + + @@ -1078,12 +1080,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_data_structure/classification_of_data_structure/index.html b/chapter_data_structure/classification_of_data_structure/index.html index 1c5b9f2a3..b3491079f 100644 --- a/chapter_data_structure/classification_of_data_structure/index.html +++ b/chapter_data_structure/classification_of_data_structure/index.html @@ -949,6 +949,8 @@ + + @@ -1057,12 +1059,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 @@ -3370,14 +3400,17 @@
  • 网状结构:图,元素之间是多对多的关系。
  • 3.1.2   物理结构:连续与分散

    -

    在计算机中,内存和硬盘是两种主要的存储硬件设备。硬盘主要用于长期存储数据,容量较大(通常可达到 TB 级别)、速度较慢。内存用于运行程序时暂存数据,速度较快,但容量较小(通常为 GB 级别)。

    -

    在算法运行过程中,相关数据都存储在内存中。图 3-2 展示了一个计算机内存条,其中每个黑色方块都包含一块内存空间。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大小的数据,在算法运行时,所有数据都被存储在这些单元格中。

    +

    当算法程序运行时,正在处理的数据主要被存储在内存中。图 3-2 展示了一个计算机内存条,其中每个黑色方块都包含一块内存空间。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大小的数据。

    系统通过内存地址来访问目标位置的数据。如图 3-2 所示,计算机根据特定规则为表格中的每个单元格分配编号,确保每个内存空间都有唯一的内存地址。有了这些地址,程序便可以访问内存中的数据。

    内存条、内存空间、内存地址

    图 3-2   内存条、内存空间、内存地址

    +
    +

    Note

    +

    值得说明的是,将内存比作 Excel 表格是一个简化的类比,实际内存的工作机制比较复杂,涉及到地址空间、内存管理、缓存机制、虚拟和物理内存等概念。

    +

    内存是所有程序的共享资源,当某块内存被某个程序占用时,则无法被其他程序同时使用了。因此在数据结构与算法的设计中,内存资源是一个重要的考虑因素。比如,算法所占用的内存峰值不应超过系统剩余空闲内存;如果缺少连续大块的内存空间,那么所选用的数据结构必须能够存储在分散的内存空间内。

    -

    如图 3-3 所示,物理结构反映了数据在计算机内存中的存储方式,可分为连续空间存储(数组)和分散空间存储(链表)。物理结构从底层决定了数据的访问、更新、增删等操作方法,同时在时间效率和空间效率方面呈现出互补的特点。

    +

    如图 3-3 所示,物理结构反映了数据在计算机内存中的存储方式,可分为连续空间存储(数组)和分散空间存储(链表)。物理结构从底层决定了数据的访问、更新、增删等操作方法,在时间效率和空间效率方面呈现出互补的特点。

    连续空间存储与分散空间存储

    图 3-3   连续空间存储与分散空间存储

    diff --git a/chapter_data_structure/index.html b/chapter_data_structure/index.html index f93868f71..7c7686f3a 100644 --- a/chapter_data_structure/index.html +++ b/chapter_data_structure/index.html @@ -895,6 +895,8 @@ + + @@ -1003,12 +1005,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_data_structure/number_encoding/index.html b/chapter_data_structure/number_encoding/index.html index 27b77fb3a..fece376b9 100644 --- a/chapter_data_structure/number_encoding/index.html +++ b/chapter_data_structure/number_encoding/index.html @@ -949,6 +949,8 @@ + + @@ -1057,12 +1059,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_data_structure/summary/index.html b/chapter_data_structure/summary/index.html index d14b97d5b..997b44c57 100644 --- a/chapter_data_structure/summary/index.html +++ b/chapter_data_structure/summary/index.html @@ -949,6 +949,8 @@ + + @@ -1057,12 +1059,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_divide_and_conquer/binary_search_recur/index.html b/chapter_divide_and_conquer/binary_search_recur/index.html index 6bf1ce4e4..ff58990d3 100644 --- a/chapter_divide_and_conquer/binary_search_recur/index.html +++ b/chapter_divide_and_conquer/binary_search_recur/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_divide_and_conquer/build_binary_tree_problem/index.html b/chapter_divide_and_conquer/build_binary_tree_problem/index.html index 0bcefde73..c99567695 100644 --- a/chapter_divide_and_conquer/build_binary_tree_problem/index.html +++ b/chapter_divide_and_conquer/build_binary_tree_problem/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_divide_and_conquer/divide_and_conquer/index.html b/chapter_divide_and_conquer/divide_and_conquer/index.html index cd39d48a2..28e444dd9 100644 --- a/chapter_divide_and_conquer/divide_and_conquer/index.html +++ b/chapter_divide_and_conquer/divide_and_conquer/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_divide_and_conquer/hanota_problem/index.html b/chapter_divide_and_conquer/hanota_problem/index.html index 700ce85a1..f9661754f 100644 --- a/chapter_divide_and_conquer/hanota_problem/index.html +++ b/chapter_divide_and_conquer/hanota_problem/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_divide_and_conquer/index.html b/chapter_divide_and_conquer/index.html index 7fd0495e7..aafa09a06 100644 --- a/chapter_divide_and_conquer/index.html +++ b/chapter_divide_and_conquer/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_divide_and_conquer/summary/index.html b/chapter_divide_and_conquer/summary/index.html index d2d90a947..f155a774c 100644 --- a/chapter_divide_and_conquer/summary/index.html +++ b/chapter_divide_and_conquer/summary/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_dynamic_programming/dp_problem_features/index.html b/chapter_dynamic_programming/dp_problem_features/index.html index d162ce8fb..fd93dbbe3 100644 --- a/chapter_dynamic_programming/dp_problem_features/index.html +++ b/chapter_dynamic_programming/dp_problem_features/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_dynamic_programming/dp_solution_pipeline/index.html b/chapter_dynamic_programming/dp_solution_pipeline/index.html index 79d5f8e00..f42b08e87 100644 --- a/chapter_dynamic_programming/dp_solution_pipeline/index.html +++ b/chapter_dynamic_programming/dp_solution_pipeline/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_dynamic_programming/edit_distance_problem/index.html b/chapter_dynamic_programming/edit_distance_problem/index.html index bc18dd126..d961b23eb 100644 --- a/chapter_dynamic_programming/edit_distance_problem/index.html +++ b/chapter_dynamic_programming/edit_distance_problem/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_dynamic_programming/index.html b/chapter_dynamic_programming/index.html index 57eb9d76b..b88b20e1c 100644 --- a/chapter_dynamic_programming/index.html +++ b/chapter_dynamic_programming/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_dynamic_programming/intro_to_dynamic_programming/index.html b/chapter_dynamic_programming/intro_to_dynamic_programming/index.html index 2bc84fb75..322edb3b4 100644 --- a/chapter_dynamic_programming/intro_to_dynamic_programming/index.html +++ b/chapter_dynamic_programming/intro_to_dynamic_programming/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_dynamic_programming/knapsack_problem/index.html b/chapter_dynamic_programming/knapsack_problem/index.html index db415da41..62d708a42 100644 --- a/chapter_dynamic_programming/knapsack_problem/index.html +++ b/chapter_dynamic_programming/knapsack_problem/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_dynamic_programming/summary/index.html b/chapter_dynamic_programming/summary/index.html index 555fd88fe..c96ca0963 100644 --- a/chapter_dynamic_programming/summary/index.html +++ b/chapter_dynamic_programming/summary/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_dynamic_programming/unbounded_knapsack_problem/index.html b/chapter_dynamic_programming/unbounded_knapsack_problem/index.html index 8ac491135..2522d689d 100644 --- a/chapter_dynamic_programming/unbounded_knapsack_problem/index.html +++ b/chapter_dynamic_programming/unbounded_knapsack_problem/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_graph/graph/index.html b/chapter_graph/graph/index.html index 8f3c76c27..c7bfdd497 100644 --- a/chapter_graph/graph/index.html +++ b/chapter_graph/graph/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_graph/graph_operations/index.html b/chapter_graph/graph_operations/index.html index 549143a56..d219fd2e4 100644 --- a/chapter_graph/graph_operations/index.html +++ b/chapter_graph/graph_operations/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_graph/graph_traversal/index.html b/chapter_graph/graph_traversal/index.html index 2f7ffd3a7..b274bd252 100644 --- a/chapter_graph/graph_traversal/index.html +++ b/chapter_graph/graph_traversal/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_graph/index.html b/chapter_graph/index.html index 86fc824e1..4f58edd56 100644 --- a/chapter_graph/index.html +++ b/chapter_graph/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_graph/summary/index.html b/chapter_graph/summary/index.html index a0fe45a73..1d902b7ee 100644 --- a/chapter_graph/summary/index.html +++ b/chapter_graph/summary/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_greedy/fractional_knapsack_problem/index.html b/chapter_greedy/fractional_knapsack_problem/index.html index 4532ca862..14481b531 100644 --- a/chapter_greedy/fractional_knapsack_problem/index.html +++ b/chapter_greedy/fractional_knapsack_problem/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_greedy/greedy_algorithm/index.html b/chapter_greedy/greedy_algorithm/index.html index 2b824a3ac..256857a81 100644 --- a/chapter_greedy/greedy_algorithm/index.html +++ b/chapter_greedy/greedy_algorithm/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_greedy/index.html b/chapter_greedy/index.html index 6d161fb46..12e45f133 100644 --- a/chapter_greedy/index.html +++ b/chapter_greedy/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_greedy/max_capacity_problem/index.html b/chapter_greedy/max_capacity_problem/index.html index 70169610d..e363f1409 100644 --- a/chapter_greedy/max_capacity_problem/index.html +++ b/chapter_greedy/max_capacity_problem/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_greedy/max_product_cutting_problem/index.html b/chapter_greedy/max_product_cutting_problem/index.html index 524eedcc9..0126b4057 100644 --- a/chapter_greedy/max_product_cutting_problem/index.html +++ b/chapter_greedy/max_product_cutting_problem/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_greedy/summary/index.html b/chapter_greedy/summary/index.html index ef4b1ee36..c9c7d2867 100644 --- a/chapter_greedy/summary/index.html +++ b/chapter_greedy/summary/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_hashing/hash_algorithm/index.html b/chapter_hashing/hash_algorithm/index.html index 2c7f3739a..5c78d4dc5 100644 --- a/chapter_hashing/hash_algorithm/index.html +++ b/chapter_hashing/hash_algorithm/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_hashing/hash_collision/index.html b/chapter_hashing/hash_collision/index.html index 8791cfa7e..6f68e0238 100644 --- a/chapter_hashing/hash_collision/index.html +++ b/chapter_hashing/hash_collision/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_hashing/hash_map/index.html b/chapter_hashing/hash_map/index.html index af2aa8c2b..2ec6a26ce 100644 --- a/chapter_hashing/hash_map/index.html +++ b/chapter_hashing/hash_map/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_hashing/index.html b/chapter_hashing/index.html index 1904fea30..845d456bf 100644 --- a/chapter_hashing/index.html +++ b/chapter_hashing/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_hashing/summary/index.html b/chapter_hashing/summary/index.html index df80ed1f8..68a4d632d 100644 --- a/chapter_hashing/summary/index.html +++ b/chapter_hashing/summary/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_heap/build_heap/index.html b/chapter_heap/build_heap/index.html index 6526ffe11..2daa5c504 100644 --- a/chapter_heap/build_heap/index.html +++ b/chapter_heap/build_heap/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_heap/heap/index.html b/chapter_heap/heap/index.html index 25a31ef8c..78a58670e 100644 --- a/chapter_heap/heap/index.html +++ b/chapter_heap/heap/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_heap/index.html b/chapter_heap/index.html index 0008af111..66bee422e 100644 --- a/chapter_heap/index.html +++ b/chapter_heap/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_heap/summary/index.html b/chapter_heap/summary/index.html index f0acecd47..ce0337f90 100644 --- a/chapter_heap/summary/index.html +++ b/chapter_heap/summary/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_heap/top_k/index.html b/chapter_heap/top_k/index.html index 295e549e5..35884d16b 100644 --- a/chapter_heap/top_k/index.html +++ b/chapter_heap/top_k/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_introduction/algorithms_are_everywhere/index.html b/chapter_introduction/algorithms_are_everywhere/index.html index 25319a30c..2305fd312 100644 --- a/chapter_introduction/algorithms_are_everywhere/index.html +++ b/chapter_introduction/algorithms_are_everywhere/index.html @@ -905,6 +905,8 @@ + + @@ -1013,12 +1015,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_introduction/index.html b/chapter_introduction/index.html index 011fabe83..098519aaf 100644 --- a/chapter_introduction/index.html +++ b/chapter_introduction/index.html @@ -895,6 +895,8 @@ + + @@ -1003,12 +1005,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_introduction/summary/index.html b/chapter_introduction/summary/index.html index aa69c34d2..b29714417 100644 --- a/chapter_introduction/summary/index.html +++ b/chapter_introduction/summary/index.html @@ -905,6 +905,8 @@ + + @@ -1013,12 +1015,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_introduction/what_is_dsa/index.html b/chapter_introduction/what_is_dsa/index.html index b6b8656c5..55d49d952 100644 --- a/chapter_introduction/what_is_dsa/index.html +++ b/chapter_introduction/what_is_dsa/index.html @@ -956,6 +956,8 @@ + + @@ -1064,12 +1066,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_preface/about_the_book/index.html b/chapter_preface/about_the_book/index.html index de355d41b..5cb1b49f8 100644 --- a/chapter_preface/about_the_book/index.html +++ b/chapter_preface/about_the_book/index.html @@ -956,6 +956,8 @@ + + @@ -1064,12 +1066,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_preface/index.html b/chapter_preface/index.html index 79ca50430..7ad183ff8 100644 --- a/chapter_preface/index.html +++ b/chapter_preface/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_preface/suggestions/index.html b/chapter_preface/suggestions/index.html index 9905c0d94..067f32d33 100644 --- a/chapter_preface/suggestions/index.html +++ b/chapter_preface/suggestions/index.html @@ -970,6 +970,8 @@ + + @@ -1078,12 +1080,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_preface/summary/index.html b/chapter_preface/summary/index.html index a547b8061..ba1e71d28 100644 --- a/chapter_preface/summary/index.html +++ b/chapter_preface/summary/index.html @@ -905,6 +905,8 @@ + + @@ -1013,12 +1015,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_reference/index.html b/chapter_reference/index.html index 39cc1e21c..f097ae035 100644 --- a/chapter_reference/index.html +++ b/chapter_reference/index.html @@ -891,6 +891,8 @@ + + @@ -999,12 +1001,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_searching/binary_search/index.html b/chapter_searching/binary_search/index.html index ae24af8d9..506c49fa8 100644 --- a/chapter_searching/binary_search/index.html +++ b/chapter_searching/binary_search/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_searching/binary_search_edge/index.html b/chapter_searching/binary_search_edge/index.html index 34b7f84bb..c55fcc9c0 100644 --- a/chapter_searching/binary_search_edge/index.html +++ b/chapter_searching/binary_search_edge/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_searching/binary_search_insertion/index.html b/chapter_searching/binary_search_insertion/index.html index 580cd8e54..8737a5792 100644 --- a/chapter_searching/binary_search_insertion/index.html +++ b/chapter_searching/binary_search_insertion/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_searching/index.html b/chapter_searching/index.html index 15e52c442..3846904f5 100644 --- a/chapter_searching/index.html +++ b/chapter_searching/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_searching/replace_linear_by_hashing/index.html b/chapter_searching/replace_linear_by_hashing/index.html index 5b111812d..d85460eb7 100644 --- a/chapter_searching/replace_linear_by_hashing/index.html +++ b/chapter_searching/replace_linear_by_hashing/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_searching/searching_algorithm_revisited/index.html b/chapter_searching/searching_algorithm_revisited/index.html index 69703e0b1..4242961d8 100644 --- a/chapter_searching/searching_algorithm_revisited/index.html +++ b/chapter_searching/searching_algorithm_revisited/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_searching/summary/index.html b/chapter_searching/summary/index.html index 09b4b0bc7..ba0e5cfd3 100644 --- a/chapter_searching/summary/index.html +++ b/chapter_searching/summary/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/bubble_sort/index.html b/chapter_sorting/bubble_sort/index.html index 1aea9af61..f02e6a1d3 100644 --- a/chapter_sorting/bubble_sort/index.html +++ b/chapter_sorting/bubble_sort/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/bucket_sort/index.html b/chapter_sorting/bucket_sort/index.html index 407cb1bf3..c77cbb2ee 100644 --- a/chapter_sorting/bucket_sort/index.html +++ b/chapter_sorting/bucket_sort/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/counting_sort/index.html b/chapter_sorting/counting_sort/index.html index be96b6042..cd98eb9c6 100644 --- a/chapter_sorting/counting_sort/index.html +++ b/chapter_sorting/counting_sort/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/heap_sort/index.html b/chapter_sorting/heap_sort/index.html index d4a3cae57..e6eefcfdb 100644 --- a/chapter_sorting/heap_sort/index.html +++ b/chapter_sorting/heap_sort/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/index.html b/chapter_sorting/index.html index dc1038535..14bdfae4f 100644 --- a/chapter_sorting/index.html +++ b/chapter_sorting/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/insertion_sort/index.html b/chapter_sorting/insertion_sort/index.html index 17e2f0969..36c7d7cdd 100644 --- a/chapter_sorting/insertion_sort/index.html +++ b/chapter_sorting/insertion_sort/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/merge_sort/index.html b/chapter_sorting/merge_sort/index.html index 4eb0da0ee..d5a58b436 100644 --- a/chapter_sorting/merge_sort/index.html +++ b/chapter_sorting/merge_sort/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/quick_sort/index.html b/chapter_sorting/quick_sort/index.html index 286aa9cc2..89955d956 100644 --- a/chapter_sorting/quick_sort/index.html +++ b/chapter_sorting/quick_sort/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 @@ -4378,7 +4408,7 @@

    11.5.5   尾递归优化

    -

    在某些输入下,快速排序可能占用空间较多。以完全倒序的输入数组为例,由于每轮哨兵划分后右子数组长度为 \(0\) ,递归树的高度会达到 \(n - 1\) ,此时需要占用 \(O(n)\) 大小的栈帧空间。

    +

    在某些输入下,快速排序可能占用空间较多。以完全倒序的输入数组为例,设递归中的子数组长度为 \(m\) ,每轮哨兵划分操作都将产生长度为 \(0\) 的左子数组和长度为 \(m - 1\) 的右子数组,这意味着每一层递归调用减少的问题规模非常小(只减少一个元素),递归树的高度会达到 \(n - 1\) ,此时需要占用 \(O(n)\) 大小的栈帧空间。

    为了防止栈帧空间的累积,我们可以在每轮哨兵排序完成后,比较两个子数组的长度,仅对较短的子数组进行递归。由于较短子数组的长度不会超过 \(n / 2\) ,因此这种方法能确保递归深度不超过 \(\log n\) ,从而将最差空间复杂度优化至 \(O(\log n)\)

    diff --git a/chapter_sorting/radix_sort/index.html b/chapter_sorting/radix_sort/index.html index 8eec36c49..d73918b5c 100644 --- a/chapter_sorting/radix_sort/index.html +++ b/chapter_sorting/radix_sort/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/selection_sort/index.html b/chapter_sorting/selection_sort/index.html index 266e6d2f5..ddb263961 100644 --- a/chapter_sorting/selection_sort/index.html +++ b/chapter_sorting/selection_sort/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/sorting_algorithm/index.html b/chapter_sorting/sorting_algorithm/index.html index 59df5e29a..441157546 100644 --- a/chapter_sorting/sorting_algorithm/index.html +++ b/chapter_sorting/sorting_algorithm/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_sorting/summary/index.html b/chapter_sorting/summary/index.html index 6473b8255..e534f5e73 100644 --- a/chapter_sorting/summary/index.html +++ b/chapter_sorting/summary/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_stack_and_queue/deque/index.html b/chapter_stack_and_queue/deque/index.html index 0479e8097..425a41bc1 100644 --- a/chapter_stack_and_queue/deque/index.html +++ b/chapter_stack_and_queue/deque/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 diff --git a/chapter_stack_and_queue/index.html b/chapter_stack_and_queue/index.html index b7467be4b..0a7264ad7 100644 --- a/chapter_stack_and_queue/index.html +++ b/chapter_stack_and_queue/index.html @@ -893,6 +893,8 @@ + + @@ -1001,12 +1003,40 @@ +
  • + + + + + 4.4   内存与缓存 * + + + + + + + + + + + + +
  • + + + + + + + + +
  • - 4.4   小结 + 4.5   小结 @@ -3328,7 +3358,7 @@ aria-label="页脚" @@ -3452,7 +3482,7 @@ aria-label="页脚"