Hello 算法 1.1.0 Go版一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的0 码力 | 383 页 | 18.48 MB | 1 年前3
Hello 算法 1.0.0 Golang版间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 「数据结构 data structure」是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 � 约定俗成的简称 在实际讨论时,我们通常会将“数 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内可靠地求得问题的正确解。 2. 寻求最优解法:同一个问题可能存在多种解法,我们希望找到尽可能高效的算法。 也就是说,在能够解决问题的前提下,算法效率已成为衡量算法优劣的主要评价指标,它包括以下两个维 度。 ‧ 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省0 码力 | 382 页 | 17.60 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版各步骤都有确定的含义,相同的输入和运行条件下,输出始终相同。 1.2.2. 数据结构定义 「数据结构 Data Structure」是计算机中组织和存储数据的方式。为了提高数据存储和操作性能,数据结构 的设计目标包括: ‧ 空间占用尽量减少,节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 1. 初识算法 hello‑algo.com 10 ‧ 提供简洁的数据表示和逻辑信息,以便使得算法高效运行。 Figure 1‑5. 拼装积木 两者的详细对应关系如下表所示。 数据结构与算法 LEGO 乐高 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得注意的是,数据结构与算法独立于编程语言。正因如此,本书得以提供多种编程语言的实现。 � 约定俗成的简称 在实际讨论时,我们通常会将「数据结构与算法」简称为「算法」。例如,众所周知的 从总体上看,算法设计追求以下两个层面的目标: 1. 找到问题解法。算法需要在规定的输入范围内,可靠地求得问题的正确解。 2. 寻求最优解法。同一个问题可能存在多种解法,我们希望找到尽可能高效的算法。 因此,在能够解决问题的前提下,算法效率成为主要的评价维度,主要包括: ‧ 时间效率,即算法运行速度的快慢。 ‧ 空间效率,即算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构0 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.0.0b5 Golang版具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 「数据结构 data structure」是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量减少,节省计算机内存。 第 1 章 初识算法 hello‑algo.com 13 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便使得算法高效运行。 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供多种编程语言的实现。 � 约定俗成的简称 在实际讨论时,我们通常会将“数据结 在算法设计中,我们先后追求以下两个层面的目标。 1. 找到问题解法:算法需要在规定的输入范围内,可靠地求得问题的正确解。 2. 寻求最优解法:同一个问题可能存在多种解法,我们希望找到尽可能高效的算法。 也就是说,在能够解决问题的前提下,算法效率已成为衡量算法优劣的主要评价指标,它包括以下两个维 度。 ‧ 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又0 码力 | 379 页 | 30.70 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Go 版一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 本书旨在通过清晰易懂的动画图解和可运行的代码示例,使读者理解算法和数据结构的核心概念,并能够通 过编程来实现它们。在此基础上,本书致力于揭示算法在复杂世界中的生动体现,展现算法之美。希望本书 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的0 码力 | 384 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0b1 Golang版乐高」类比到「数据结构与算法」,那么可以得到下表所示的对应关系。 数据结构与算法 LEGO 乐高 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 1. 引言 hello‑algo.com 11 � 约定俗成的简称 在实际讨论中,我们通常会将「数据结构与算法」直接简称为「算法」。例如,我们熟称的 的流程步骤对应算法。 12 2. 复杂度分析 2.1. 算法效率评估 2.1.1. 算法评价维度 在开始学习算法之前,我们首先要想清楚算法的设计目标是什么,或者说,如何来评判算法的好与坏。整体上 看,我们设计算法时追求两个层面的目标。 1. 找到问题解法。算法需要能够在规定的输入范围下,可靠地求得问题的正确解。 2. 寻求最优解法。同一个问题可能存在多种解法,而我们希望算法效率尽可能的高。 * 以 LeetCode 全站第一题 两数之和 为例。 2. 复杂度分析 hello‑algo.com 35 � 两数之和 给定一个整数数组 nums 和一个整数目标值 target ,请你在该数组中找出“和”为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 「暴力枚举」和「辅助哈希表」分别对应0 码力 | 190 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 Golang版乐高」类比到「数据结构与算法」,那么可以得到下表所示的对应关系。 数据结构与算法 LEGO 乐高 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 1. 引言 hello‑algo.com 11 � 约定俗成的简称 在实际讨论中,我们通常会将「数据结构与算法」直接简称为「算法」。例如,我们熟称的 的流程步骤对应算法。 12 2. 复杂度分析 2.1. 算法效率评估 2.1.1. 算法评价维度 在开始学习算法之前,我们首先要想清楚算法的设计目标是什么,或者说,如何来评判算法的好与坏。整体上 看,我们设计算法时追求两个层面的目标。 1. 找到问题解法。算法需要能够在规定的输入范围下,可靠地求得问题的正确解。 2. 寻求最优解法。同一个问题可能存在多种解法,而我们希望算法效率尽可能的高。 * 以 LeetCode 全站第一题 两数之和 为例。 2. 复杂度分析 hello‑algo.com 35 � 两数之和 给定一个整数数组 nums 和一个整数目标值 target ,请你在该数组中找出“和”为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 「暴力枚举」和「辅助哈希表」分别对应0 码力 | 202 页 | 15.73 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a结果为complex128类型的1.0+0.0i。虚部被舍入了。 complex128(1 + -1e-1000i) // 结果为float32类型的0.5。这里也舍入了。 float32(0.49999999) // 只要目标类型不是整数类型,舍入都是允许的。 float32(17000000000000000) float32(123) uint(1.0) int8(-123) int16(6+0i) complex128(789) 个空标识符。 内存地址(以及指针)和映射将在以后的文章中介绍。 常量是不可改变的(不可寻址的),所以常量不能做为目标值出现在纯赋值语 句的左边,而只能出现在右边用做源值。 变量既可以出现在纯赋值语句的左 边用做目标值,也可以出现在右边用做源值。 空标识符也可以出现在纯赋值语句的左边,表示不关心对应的目标值。 空标 识符不可被用做源值。 一个包含了很多(合法或者不合法的)纯赋值语句的例子: 1| const 每个局部声明的变量至少要被有效使用一次 注意,当使用目前的主流Go编译器编译Go代码时,一个局部变量被声明之后 至少要被有效使用一次,否则编译器将报错。 包级变量无此限制。 如果一个 变量总是被当作赋值语句中的目标值,那么我们认为这个变量没有被有效使用 过。 下面这个例子编译不通过。 1| package main 2| 3| var x, y, z = 123, true, "foo" // 包级变量0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a结果为complex128类型的1.0+0.0i。虚部被舍入了。 complex128(1 + -1e-1000i) // 结果为float32类型的0.5。这里也舍入了。 float32(0.49999999) // 只要目标类型不是整数类型,舍入都是允许的。 float32(17000000000000000) float32(123) uint(1.0) int8(-123) int16(6+0i) complex128(789) 个空标识符。 内存地址(以及指针)和映射将在以后的文章中介绍。 常量是不可改变的(不可寻址的),所以常量不能做为目标值出现在纯赋值语 句的左边,而只能出现在右边用做源值。 变量既可以出现在纯赋值语句的左边 用做目标值,也可以出现在右边用做源值。 空标识符也可以出现在纯赋值语句的左边,表示不关心对应的目标值。 空标识 符不可被用做源值。 一个包含了很多(合法或者不合法的)纯赋值语句的例子: const N 每个局部声明的变量至少要被有效使用一次 注意,当使用目前的主流Go编译器编译Go代码时,一个局部变量被声明之后至 少要被有效使用一次,否则编译器将报错。 包级变量无此限制。 如果一个变量 总是被当作赋值语句中的目标值,那么我们认为这个变量没有被有效使用过。 下面这个例子编译不通过。 package main var x, y, z = 123, true, "foo" // 包级变量 func main()0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a0+0.0i。虚部被舍入了。 complex128(1 + -1e-1000i) // 结果为float32类型的0.5。这里也舍入了。 float32(0.49999999) // 只要目标类型不是整数类型,舍入都是允许的。 float32(17000000000000000) float32(123) uint(1.0) int8(-123) int16(6+0i) 标识符。 内存地址(以及指针)和映射将在以后的文章中介绍。 常量是不可改变的(不可寻址的),所以常量不能做为目标值出现在纯赋值语句的 左边,而只能出现在右边用做源值。 变量既可以出现在纯赋值语句的左边用做目标 值,也可以出现在右边用做源值。 空标识符也可以出现在纯赋值语句的左边,表示不关心对应的目标值。 空标识符不 可被用做源值。 一个包含了很多(合法或者不合法的)纯赋值语句的例子: 1| const 每个局部声明的变量至少要被有效使用一次 注意,当使用目前的主流Go编译器编译Go代码时,一个局部变量被声明之后至少要 被有效使用一次,否则编译器将报错。 包级变量无此限制。 如果一个变量总是被 当作赋值语句中的目标值,那么我们认为这个变量没有被有效使用过。 下面这个例子编译不通过。 1| package main 2| 3| var x, y, z = 123, true, "foo" // 包级变量0 码力 | 591 页 | 21.40 MB | 1 年前3
共 33 条
- 1
- 2
- 3
- 4













