Hello 算法 1.1.0 Python版我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention.”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github ”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归:0 码力 | 364 页 | 18.42 MB | 1 年前3
 Hello 算法 1.0.0 Python版我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention.”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请 各位老师和同学批评指正。 本书中的代码附有可一键运行的源文件,托管于 github ”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归:0 码力 | 362 页 | 17.54 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Python 版我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention.”从这个意义上看,这本 书并非完全“免费”。为了不辜负你为本书所付出的宝贵“注意力”,我会竭尽所能,投入最大的“注意力” 来完成本书的创作。 本人自知学疏才浅,书中内容虽然已经过一段时间的打磨,但一定仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github ”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归:0 码力 | 364 页 | 18.43 MB | 10 月前3
 5 刘知杭 静态类型的Python 3107增加了对函数定义各部分上的任意注释的支持。尽管没有为注释指定任何 含义,但始终存在一个隐式目标,即将它们用于类型提示。 该PEP旨在为类型注释提供标准语法,开放Python代码以简化静态分析和重构,潜 在的运行时类型检查,以及(可能在某些情况下)利用类型信息生成代码。 在这些目标中,静态分析是最重要的。这包括对类型检查器(如mypy)的支持, 以及提供可由IDE实现的代码重构操作。 虽然这些注释可以在运行时通过0 码力 | 42 页 | 6.87 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Python 版我深深認同費曼教授所言:“Knowledge isn’t free. You have to pay attention.”從這個意義上看,這本 書並非完全“免費”。為了不辜負你為本書所付出的寶貴“注意力”,我會竭盡所能,投入最大的“注意力” 來完成本書的創作。 本人自知學疏才淺,書中內容雖然已經過一段時間的打磨,但一定仍有許多錯誤,懇請各位老師與同學批評 指正。 本書中的程式碼附有可一鍵執行的原始檔,託管於 github capacity 觀察以上公式,當雜湊表容量 capacity 固定時,雜湊演算法 hash() 決定了輸出值,進而決定了鍵值對在雜 湊表中的分佈情況。 這意味著,為了降低雜湊衝突的發生機率,我們應當將注意力集中在雜湊演算法 hash() 的設計上。 第 6 章 雜湊表 www.hello‑algo.com 123 6.3.1 雜湊演算法的目標 為了實現“既快又穩”的雜湊表資料結構,雜湊演算法應具備以下特點。 left subtree 左子树 左子樹 right subtree 右子树 右子樹 root node 根节点 根節點 leaf node 叶节点 葉節點 edge 边 邊 level 层 層 degree 度 度 height 高度 高度 depth 深度 深度 perfect binary tree 完美二叉树 完美二元樹 complete binary tree 完全二叉树0 码力 | 364 页 | 18.74 MB | 10 月前3
 Hello 算法 1.0.0b4 Python版省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用上述 1. 和 2. 技巧。 以下示例展示了使用上述技巧前、后的统计结果。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = return 0 return log_recur(n / 2) + 1 2. 复杂度 hello‑algo.com 24 线性对数阶 ?(? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为 ?(log ?) 和 ?(?) 。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 # === File: time_complexity 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ × 2 × 1 阶乘通常使用递归实现。例如以下代码,第一层分裂出 ? 个,第二层分裂出 ? − 1 个,以此类推,直至第 ? 层时终止分裂。 2. 复杂度 hello‑algo.com 25 # === File: time_complexity.py === def factorial_recur(n:0 码力 | 329 页 | 27.34 MB | 1 年前3
 Hello 算法 1.0.0b5 Python版”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无需继续执行其他 操作,因此系统无需保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归。 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用第 1. 点和第 2. 点的技巧。 给定一个函数,我们可以用上述技巧来统计操作数量。 def algorithm(n: int): a = 1 # +0(技巧 1) a0 码力 | 361 页 | 30.64 MB | 1 年前3
 Python3 基础教程 - 廖雪峰http://www.yeayee.com/ 99/531 使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈 (stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层 栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的, 所以,递归调用的次数过多,会导致栈溢出。可以试试 fact(1000): >>> fact(1000) Traceback (most recent % 2 == 0] [4, 16, 36, 64, 100] 还可以使用两层循环,可以生成全排列: >>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ'] 三层和三层以上的循环就很少用到了。 运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的 StopIteration 就退出循环 break 参考源码 do_iter.py 函数式编程 函数是 Python 内建支持的一种封装,我们通过把大段代码拆成函数, 通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种 分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的 基本单元。 而函数式编程(请注意多了一个“式”字)——Functional0 码力 | 531 页 | 5.15 MB | 1 年前3
 Python 标准库参考指南 3.12 影响它旁边 的正则表达式的解释。 重复运算符或数量限定符 (*, +, ?, {m,n} 等) 不能被直接嵌套。这避免了非贪婪修饰符后缀 ? 的歧义,也 避免了其他实现中其他修饰符的歧义。要将第二层重复应用到内层的重复中,可以使用圆括号。例如, 表达式 (?:a{6})* 将匹配六个 'a' 字符的任意多次重复。 特殊字符有: . (点号.)在默认模式下,匹配除换行符以外的任意字符。如果指定了旗标DOTALL,它将匹配包括换 readline.replace_history_item(pos, line) 将 指 定 位 置 上 的 历 史 条 目 替 换 为 line。 条 目 位 置 从 零 开 始。 此 函 数 会 调 用 底 层 库 中 的 replace_history_entry()。 readline.add_history(line) 将 line 添加到历史缓冲区,相当于是最近输入的一行。此函数会调用底层库中的 readline.get_begidx() readline.get_endidx() 获 取 完 全 范 围 的 开 始 和 结 束 索 引 号。 这 些 索 引 号 就 是 传 递 给 下 层 库 的 rl_attempted_completion_function 回 调 的 start 和 end 参 数。 具 体 值 在 同 一 个 输 入 编 辑 场景中可能不同,具体取决于下层的 C0 码力 | 2253 页 | 11.81 MB | 9 月前3
 Python 标准库参考指南 3.12 影响它旁边 的正则表达式的解释。 重复运算符或数量限定符 (*, +, ?, {m,n} 等) 不能被直接嵌套。这避免了非贪婪修饰符后缀 ? 的歧义,也 避免了其他实现中其他修饰符的歧义。要将第二层重复应用到内层的重复中,可以使用圆括号。例如, 表达式 (?:a{6})* 将匹配六个 'a' 字符的任意多次重复。 特殊字符有: . (点号.)在默认模式下,匹配除换行符以外的任意字符。如果指定了旗标DOTALL,它将匹配包括换 readline.replace_history_item(pos, line) 将 指 定 位 置 上 的 历 史 条 目 替 换 为 line。 条 目 位 置 从 零 开 始。 此 函 数 会 调 用 底 层 库 中 的 replace_history_entry()。 readline.add_history(line) 将 line 添加到历史缓冲区,相当于是最近输入的一行。此函数会调用底层库中的 readline.get_begidx() readline.get_endidx() 获 取 完 全 范 围 的 开 始 和 结 束 索 引 号。 这 些 索 引 号 就 是 传 递 给 下 层 库 的 rl_attempted_completion_function 回 调 的 start 和 end 参 数。 具 体 值 在 同 一 个 输 入 编 辑 场景中可能不同,具体取决于下层的 C0 码力 | 2253 页 | 11.81 MB | 9 月前3
共 59 条
- 1
 - 2
 - 3
 - 4
 - 5
 - 6
 













