Hello 算法 1.0.0b1 Python版散列表、树、堆、图等数据结构,内容包括定义、优劣势、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:查找算法、排序算法、搜索与回溯、动态规划、分治算法,内容包括定义、使用场景、优劣势、时 空效率、实现方法、示例题目等。 0. 写在前面 hello‑algo.com 2 Figure 0‑1. Hello 算法内容结构 0.1.3. 致谢 本书的成书过程中,我获得了许多人的帮助,包括但不限于: 2. 复杂度分析 hello‑algo.com 27 def __init__(self, x): self.val = x # 结点值 self.next = None # 指向下一结点的指针(引用) """ 函数 """ def function(): # do something... return 0 def algorithm(n): # 输入数据 b = 0 # 暂存数据(变量) ,因 此空间复杂度为 ?(log10 ?) = ?(log ?) 。 2.4. 权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能够达到最优,而实际上,同时优化时间复杂度和空 间复杂度是非常困难的。 降低时间复杂度,往往是以提升空间复杂度为代价的,反之亦然。我们把牺牲内存空间来提升算法运行速度的 思路称为「以空间换时间」;反之,称之为「以时间换空间」。选择哪种思路取决于我们更看重哪个方面。0 码力 | 178 页 | 14.67 MB | 1 年前3
Hello 算法 1.0.0b2 Python版散列表、树、堆、图等数据结构,内容包括定义、优劣势、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:查找算法、排序算法、搜索与回溯、动态规划、分治算法,内容包括定义、使用场景、优劣势、时 空效率、实现方法、示例题目等。 0. 写在前面 hello‑algo.com 2 Figure 0‑1. Hello 算法内容结构 0.1.3. 致谢 本书的成书过程中,我获得了许多人的帮助,包括但不限于: 27 def __init__(self, x: int): self.val: int = x # 结点值 self.next: Optional[Node] = None # 指向下一结点的指针(引用) """ 函数 """ def function() -> int: # do something... return 0 def algorithm(n) -> int: # 输入数据 ,因 此空间复杂度为 ?(log10 ?) = ?(log ?) 。 2.4. 权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能够达到最优,而实际上,同时优化时间复杂度和空 间复杂度是非常困难的。 降低时间复杂度,往往是以提升空间复杂度为代价的,反之亦然。我们把牺牲内存空间来提升算法运行速度的 思路称为「以空间换时间」;反之,称之为「以时间换空间」。选择哪种思路取决于我们更看重哪个方面。0 码力 | 186 页 | 15.69 MB | 1 年前3
Hello 算法 1.0.0b4 Python版表示重点内容或总结性语句,这类文字值得特别关注。 ‧ 专有名词和有特指含义的词句会使用“双引号” 标注,以避免歧义。 ‧ 涉及到编程语言之间不一致的名词,本书均以 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 """ 标题注释,用于标注函数、类、测试样例等""" # 内容注释,用于详解代码 类""" def __init__(self, x: int): self.val: int = x # 节点值 self.next: Optional[Node] = None # 指向下一节点的指针(引用) 2. 复杂度 hello‑algo.com 28 def function() -> int: """ 函数""" # do something... return 0 def List」是一种线性数据结构,其每个元素都是一个节点对象,各个节点之间通过指针连接,从 当前节点通过指针可以访问到下一个节点。由于指针记录了下个节点的内存地址,因此无需保证内存地址的 连续性,从而可以将各个节点分散存储在内存各处。 链表「节点 Node」包含两项数据,一是节点「值 Value」,二是指向下一节点的「指针 Pointer」,或称「引 用 Reference」。 Figure0 码力 | 329 页 | 27.34 MB | 1 年前3
Hello 算法 1.1.0 Python版重点内容和总结性语句会 加粗,这类文字值得特别关注。 ‧ 有特指含义的词句会使用“引号”标注,以避免歧义。 ‧ 当涉及编程语言之间不一致的名词时,本书均以 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 第 0 章 前言 hello‑algo.com 5 """ 标题注释,用于标注函数、类、测试样例等""" 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归: 链表的首个节点被称为“头节点”,最后一个节点被称为“尾节点”。 ‧ 尾节点指向的是“空”,它在 Java、C++ 和 Python 中分别被记为 null、nullptr 和 None 。 ‧ 在 C、C++、Go 和 Rust 等支持指针的语言中,上述“引用”应被替换为“指针”。 如以下代码所示,链表节点 ListNode 除了包含值,还需额外保存一个引用(指针)。因此在相同数据量下,链 表比数组占用更多的内存空间。0 码力 | 364 页 | 18.42 MB | 1 年前3
Hello 算法 1.0.0 Python版专有名词和有特指含义的词句会使用“引号” 标注,以避免歧义。 ‧ 重要名词、重点内容和总结性语句会 加粗,这类文字值得特别关注。 ‧ 当涉及编程语言之间不一致的名词时,本书均以 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 """ 标题注释,用于标注函数、类、测试样例等""" # 内容注释,用于详解代码 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归 链表的首个节点被称为“头节点”,最后一个节点被称为“尾节点”。 ‧ 尾节点指向的是“空”,它在 Java、C++ 和 Python 中分别被记为 null、nullptr 和 None 。 ‧ 在 C、C++、Go 和 Rust 等支持指针的语言中,上述“引用”应被替换为“指针”。 如以下代码所示,链表节点 ListNode 除了包含值,还需额外保存一个引用(指针)。因此在相同数据量下,链 表比数组占用更多的内存空间。0 码力 | 362 页 | 17.54 MB | 1 年前3
Hello 算法 1.0.0b5 Python版。建议记住它们,以便阅读文献。 ‧ 加粗的文字 表示重点内容或总结性语句,这类文字值得特别关注。 ‧ 当涉及到编程语言之间不一致的名词时,本书均以 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 """ 标题注释,用于标注函数、类、测试样例等""" # 内容注释,用于详解代码 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出报错。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归 链表的首个节点被称为“头节点”,最后一个节点被称为“尾节点”。 ‧ 尾节点指向的是“空”,它在 Java、C++ 和 Python 中分别被记为 null、nullptr 和 None 。 ‧ 在 C、C++、Go 和 Rust 等支持指针的语言中,上述的“引用”应被替换为“指针”。 如以下代码所示,链表节点 ListNode 除了包含值,还需额外保存一个引用(指针)。因此在相同数据量下,链 表比数组占用更多的内存空间。0 码力 | 361 页 | 30.64 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Python 版重点内容和总结性语句会 加粗,这类文字值得特别关注。 ‧ 有特指含义的词句会使用“引号”标注,以避免歧义。 ‧ 当涉及编程语言之间不一致的名词时,本书均以 Python 为准,例如使用 None 来表示“空”。 ‧ 本书部分放弃了编程语言的注释规范,以换取更加紧凑的内容排版。注释主要分为三种类型:标题注 释、内容注释、多行注释。 第 0 章 前言 www.hello‑algo.com 5 """ 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归: 链表的首个节点被称为“头节点”,最后一个节点被称为“尾节点”。 ‧ 尾节点指向的是“空”,它在 Java、C++ 和 Python 中分别被记为 null、nullptr 和 None 。 ‧ 在 C、C++、Go 和 Rust 等支持指针的语言中,上述“引用”应被替换为“指针”。 如以下代码所示,链表节点 ListNode 除了包含值,还需额外保存一个引用(指针)。因此在相同数据量下,链 表比数组占用更多的内存空间。0 码力 | 364 页 | 18.43 MB | 10 月前3
Python 标准库参考指南 3.7.13 iterable 的所有元素为真(或迭代器为空),返回 True 。等价于: def all(iterable): for element in iterable: if not element: return False return True any(iterable) 如果 iterable 的任一元素为真则返回 True。如果迭代器为空,返回 False。等价于: def any(iterable): type(value).__format__(value, format_spec) ,所以实例字典中的 __format__() 方法将不会调用。如果方法搜索回 退到object 类但 format_spec 不为空,或者如果 format_spec 或返回值不是字符串,则会触 发TypeError 异常。 在 3.4 版更改: 当 format_spec 不是空字符串时,object().__format__(format_spec) 返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。 如果只提供了一个位置参数,它必须是非空iterable,返回可迭代对象中最大的元素;如果提供了两 个及以上的位置参数,则返回最大的位置参数。 有两个可选只能用关键字的实参。key 实参指定排序函数用的参数,如传给list.sort() 的。 default 实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 default ,则会触 发ValueError。0 码力 | 1846 页 | 9.09 MB | 10 月前3
Python 标准库参考指南 3.7.13 iterable 的所有元素为真(或迭代器为空),返回 True 。等价于: def all(iterable): for element in iterable: if not element: return False return True any(iterable) 如果 iterable 的任一元素为真则返回 True。如果迭代器为空,返回 False。等价于: 5 The format_spec) , 所 以 实 例 字 典 中 的 __format__() 方 法 将 不 会 调 用。 如 果 方 法 搜 索 回 退 到object 类但 format_spec 不为空,或者如果 format_spec 或返回值不是字符串,则会触发TypeError 异常。 在 3.4 版更改: 当 format_spec 不是空字符串时,object().__format__(format_spec) 返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。 如果只提供了一个位置参数,它必须是非空iterable,返回可迭代对象中最大的元素;如果提供了两个 及以上的位置参数,则返回最大的位置参数。 有两个可选只能用关键字的实参。key 实参指定排序函数用的参数,如传给list.sort() 的。default 实 参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 default ,则会触发ValueError。0 码力 | 1961 页 | 9.14 MB | 10 月前3
Python 标准库参考指南 3.8.20 iterable 的所有元素均为真值(或可迭代对象为空)则返回 True 。等价于: def all(iterable): for element in iterable: if not element: return False return True any(iterable) 如果 iterable 的任一元素为真值则返回 True。如果可迭代对象为空,返回 False。等价于: def any(iterable): type(value).__format__(value, format_spec) ,所以实例字典中的 __format__() 方法将不会调用。如果方法搜索回 退到object 类但 format_spec 不为空,或者如果 format_spec 或返回值不是字符串,则会触 发TypeError 异常。 在 3.4 版更改: 当 format_spec 不是空字符串时,object().__format__(format_spec) 返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。 如果只提供了一个位置参数,它必须是非空iterable,返回可迭代对象中最大的元素;如果提供了两 个及以上的位置参数,则返回最大的位置参数。 有两个可选只能用关键字的实参。key 实参指定排序函数用的参数,如传给list.sort() 的。 default 实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 default ,则会触 发ValueError。0 码力 | 1927 页 | 9.69 MB | 10 月前3
共 126 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13













