Hello 算法 1.0.0b1 Swift版行文风格约定 标题后标注 * 的是选读章节,内容相对较难。如果你的时间有限,建议可以先跳过。 文章中的重要名词会用「括号」 标注,例如「数组 Array」 。建议记住这些名词,包括英文翻译,以便后续阅 读文献时使用。 重点内容、总起句、总结句会被 加粗,此类文字值得特别关注。 专有名词和有特指含义的词句会使用“双引号” 标注,以避免歧义。 0. 写在前面 hello‑algo.com 4 本书 本书的配套代码托管在GitHub 仓库,源代码包含详细注释,配有测试样例,可以直接运行。 ‧ 若学习时间紧张,建议至少将所有代码通读并运行一遍。 ‧ 若时间允许,强烈建议对照着代码自己敲一遍。相比于读代码,写代码的过程往往能带来新的收获。 0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 = firtstElementAddr + elementLength * elementIndex 为什么数组元素索引从 0 开始编号?根据地址计算公式,索引本质上表示的是内存地址偏移量,首个元素的地 址偏移量是 0 ,那么索引是 0 也就很自然了。 访问元素的高效性带来了许多便利。例如,我们可以在 ?(1) 时间内随机获取一个数组中的元素。 // === File: array.swift0 码力 | 190 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Swift版行文风格约定 标题后标注 * 的是选读章节,内容相对较难。如果你的时间有限,建议可以先跳过。 文章中的重要名词会用「括号」 标注,例如「数组 Array」 。建议记住这些名词,包括英文翻译,以便后续阅 读文献时使用。 重点内容、总起句、总结句会被 加粗,此类文字值得特别关注。 专有名词和有特指含义的词句会使用“双引号” 标注,以避免歧义。 0. 写在前面 hello‑algo.com 4 本书 本书的配套代码托管在GitHub 仓库,源代码包含详细注释,配有测试样例,可以直接运行。 ‧ 若学习时间紧张,建议至少将所有代码通读并运行一遍。 ‧ 若时间允许,强烈建议对照着代码自己敲一遍。相比于读代码,写代码的过程往往能带来新的收获。 0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 = firtstElementAddr + elementLength * elementIndex 为什么数组元素索引从 0 开始编号?根据地址计算公式,索引本质上表示的是内存地址偏移量,首个元素的地 址偏移量是 0 ,那么索引是 0 也就很自然了。 访问元素的高效性带来了许多便利。例如,我们可以在 ?(1) 时间内随机获取一个数组中的元素。 // === File: array.swift0 码力 | 199 页 | 15.72 MB | 1 年前3
Hello 算法 1.1.0 Swift版Array(repeating: false, count: 5) 3.3 数字编码 * Note 在本书中,标题带有 * 符号的是选读章节。如果你时间有限或感到理解困难,可以先跳过,等学完必 读章节后再单独攻克。 第 3 章 数据结构 hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在 ?(1) 时间内随机访问数组中的任意一个元素。 // === File: array.swift === 据,例如 int、double、 string、object 等。 相对地,数组元素则必须是相同类型的,这样才能通过计算偏移量来获取对应元素位置。例如,数组同时包 含 int 和 long 两种类型,单个元素分别占用 4 字节 和 8 字节,此时就不能用以下公式计算偏移量了,因为 数组中包含了两种“元素长度”。 # 元素内存地址 = 数组内存地址(首元素内存地址) + 元素长度 * 元素索引0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Swift 版Array(repeating: false, count: 5) 3.3 数字编码 * Tip 在本书中,标题带有 * 符号的是选读章节。如果你时间有限或感到理解困难,可以先跳过,等学完必 读章节后再单独攻克。 第 3 章 数据结构 www.hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在 ?(1) 时间内随机访问数组中的任意一个元素。 // === File: array.swift === 据,例如 int、double、 string、object 等。 相对地,数组元素则必须是相同类型的,这样才能通过计算偏移量来获取对应元素位置。例如,数组同时包 含 int 和 long 两种类型,单个元素分别占用 4 字节和 8 字节,此时就不能用以下公式计算偏移量了,因为数 组中包含了两种“元素长度”。 # 元素内存地址 = 数组内存地址(首元素内存地址) + 元素长度 * 元素索引0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b5 Swift版数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引的含义本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引 为 0 也是合理的。 在数组中访问元素是非常高效的,我们可以在 ?(1) 时间内随机访问数组中的任意一个元素。 // === File: array.swift int、double、string、object 等。 相对地,数组元素则必须是相同类型的,这样才能通过计算偏移量来获取对应元素位置。例 如,如果数组同时包含 int 和 long 两种类型,单个元素分别占用 4 bytes 和 8 bytes ,那么此 时就不能用以下公式计算偏移量了,因为数组中包含了两种长度的元素。 # 元素内存地址 = 数组内存地址 + 元素长度 * 元素索引 �0 码力 | 376 页 | 30.70 MB | 1 年前3
Hello 算法 1.0.0 Swift版4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在 ?(1) 时间内随机访问数组中的任意一个元素。 // === File: array.swift === 据,例如 int、double、 string、object 等。 相对地,数组元素则必须是相同类型的,这样才能通过计算偏移量来获取对应元素位置。例如,数组同时包 含 int 和 long 两种类型,单个元素分别占用 4 字节 和 8 字节,此时就不能用以下公式计算偏移量了,因为 数组中包含了两种“元素长度”。 # 元素内存地址 = 数组内存地址(首元素内存地址) + 元素长度 * 元素索引0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Swift 版4‑2 陣列元素的記憶體位址計算 觀察圖 4‑2 ,我們發現陣列首個元素的索引為 0 ,這似乎有些反直覺,因為從 1 開始計數會更自然。但從位 址計算公式的角度看,索引本質上是記憶體位址的偏移量。首個元素的位址偏移量是 0 ,因此它的索引為 0 是合理的。 在陣列中訪問元素非常高效,我們可以在 ?(1) 時間內隨機訪問陣列中的任意一個元素。 // === File: array.swift === ,例如 int、double、 string、object 等。 相對地,陣列元素則必須是相同型別的,這樣才能透過計算偏移量來獲取對應元素位置。例如,陣列同時包 含 int 和 long 兩種型別,單個元素分別佔用 4 位元組和 8 位元組,此時就不能用以下公式計算偏移量了,因 為陣列中包含了兩種“元素長度”。 # 元素記憶體位址 = 陣列記憶體位址(首元素記憶體位址) + 元素長度 *0 码力 | 379 页 | 18.79 MB | 10 月前3
共 7 条
- 1













