Hello 算法 1.0.0b4 Python版5.4. 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 6. 散列表 87 6.1. 哈希表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 本书主要内容包括: ‧ 复杂度分析:数据结构和算法的评价维度,算法效率的评估方法。时间复杂度、空间复杂度的推算方 法、常见类型、示例等。 ‧ 数据结构:基本数据类型,数据结构的分类方法。数组、链表、栈、队列、散列表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤、 示例题目等。 等编程语言默认使用 UTF‑16 编码。 3.5.1. Q & A � 为什么哈希表同时包含线性数据结构和非线性数据结构? 哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“拉链法”(后续散列表章节会讲)。 在拉链法中,数组中每个地址(桶)指向一个链表;当这个链表长度超过一定阈值时,又可能 被转化为树(通常为红黑树)。因此,哈希表可能同时包含线性(数组、链表)和非线性(树) 数据结构。0 码力 | 329 页 | 27.34 MB | 1 年前3
Flask入门教程SQLAlchemy——一个 Python 数据库工具 (ORM,即对象关系映射)。借助 SQLAlchemy,你可以通过定义 Python 类来表 示数据库里的一张表(类属性表示表中的字段 / 列),通过对这个类进行各种操作 来代替写 SQL 语句。这个类我们称之为模型类,类中的属性我们将称之为字段。 Flask 有大量的第三方扩展,这些扩展可以简化和第三方库的集成工作。我们下面 将使用一个叫做 二的密码散列值,这样即使攻击者拿到了散列值,也几乎无法逆向获取到密码。 Flask 的依赖 Werkzeug 内置了用于生成和验证密码散列值的函 数, werkzeug.security.generate_password_hash() 用来为给定的密码生成 密码散列值,而 werkzeug.security.check_password_hash() 则用来检查给 定的散列值和密码是否对应。使用示例如下所示: 为密码 dog 生成密码 散列值 >>> pw_hash # 查看密码散列值 'pbkdf2:sha256:50000$mm9UPTRI$ee68ebc71434a4405a28d34ae3f170757f b424663dc0ca15198cb881edc0978f' >>> check_password_hash(pw_hash, 'dog') # 检查散列值是否对应密码 dog True0 码力 | 127 页 | 7.62 MB | 1 年前3
Hello 算法 1.0.0b2 Python版4. 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 6. 散列表 76 6.1. 哈希表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 复杂度分析:数据结构与算法的评价维度、算法效率的评估方法。时间复杂度、空间复杂度,包括推算 方法、常见类型、示例等。 ‧ 数据结构:常用的基本数据类型,数据在内存中的存储方式、数据结构分类方法。数组、链表、栈、队列、 散列表、树、堆、图等数据结构,内容包括定义、优劣势、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:查找算法、排序算法、搜索与回溯、动态规划、分治算法,内容包括定义、使用场景、优劣势、时 空效率、实现方法、示例题目等。 且可以灵活地修改长度;但结点访问效率低、占用 内存多。常见的链表类型有单向链表、循环链表、双向链表。 ‧ 列表又称动态数组,是基于数组实现的一种数据结构,其保存了数组的优势,且可以灵活改变长度。列 表的出现大大提升了数组的实用性,但副作用是会造成部分内存空间浪费。 ‧ 下表总结对比了数组与链表的各项特性。 数组 链表 存储方式 连续内存空间 离散内存空间 数据结构长度 长度不可变 长度可变0 码力 | 186 页 | 15.69 MB | 1 年前3
Hello 算法 1.0.0b1 Python版4. 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 6. 散列表 76 6.1. 哈希表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 复杂度分析:数据结构与算法的评价维度、算法效率的评估方法。时间复杂度、空间复杂度,包括推算 方法、常见类型、示例等。 ‧ 数据结构:常用的基本数据类型,数据在内存中的存储方式、数据结构分类方法。数组、链表、栈、队列、 散列表、树、堆、图等数据结构,内容包括定义、优劣势、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:查找算法、排序算法、搜索与回溯、动态规划、分治算法,内容包括定义、使用场景、优劣势、时 空效率、实现方法、示例题目等。 且可以灵活地修改长度;但结点访问效率低、占用 内存多。常见的链表类型有单向链表、循环链表、双向链表。 ‧ 列表又称动态数组,是基于数组实现的一种数据结构,其保存了数组的优势,且可以灵活改变长度。列 表的出现大大提升了数组的实用性,但副作用是会造成部分内存空间浪费。 ‧ 下表总结对比了数组与链表的各项特性。 数组 链表 存储方式 连续内存空间 离散内存空间 数据结构长度 长度不可变 长度可变0 码力 | 178 页 | 14.67 MB | 1 年前3
Python 标准库参考指南 3.7.13 encoding 。有关支持的编码列表,请参阅codecs 模块。 errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。 可以使用各种标准错误处理程序(列在错误处理方案 ),但是使用codecs.register_error() 注册的任何错误处理名称也是有效的。标准名称包括: • 如果存在编码错误,'strict' 会引发ValueError 异常。默认值 Reference, 发布 3.7.13 4.7 文本序列类型 --- str 在 Python 中处理文本数据是使用str 对象,也称为 字符串。字符串是由 Unicode 码位构成的不可变序 列。字符串字面值有多种不同的写法: • 单引号: ' 允许包含有" 双" 引号' • 双引号: " 允许包含有 ' 单' 引号"。 • 三重引号: ''' 三重单引号''', """ 三重双引号""" expandtabs(tabsize=8) 返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的 制表符宽度。每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。 要展开字符串,当前列将被设为零并逐一检查字符串中的每个字符。如果字符为制表符 (\t),则会 在结果中插入一个或多个空格符,直到当前列等于下一个制表位。(制表符本身不会被复制。)如果0 码力 | 1846 页 | 9.09 MB | 9 月前3
Python 标准库参考指南 3.7.13 encoding 。 有关支持的编码列表,请参阅codecs 模块。 errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。可 以使用各种标准错误处理程序(列在错误处理方案 ),但是使用codecs.register_error() 注册 的任何错误处理名称也是有效的。标准名称包括: • 如果存在编码错误,'strict' 会引发ValueError 异常。默认值 中的项求和并返回总计值。start 默认为 0。iterable 的项通常为数字,开 始值则不允许为字符串。 对 某 些 用 例 来 说, 存 在sum() 的 更 好 替 代。 拼 接 字 符 串 序 列 的 更 好 更 快 方 式 是 调 用 ''. join(sequence)。要以扩展精度对浮点值求和,请参阅math.fsum()。要拼接一系列可迭代对 象,请考虑使用itertools.chain()。 expandtabs(tabsize=8) 返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制 表符宽度。每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。要展 开字符串,当前列将被设为零并逐一检查字符串中的每个字符。如果字符为制表符 (\t),则会在结果 中插入一个或多个空格符,直到当前列等于下一个制表位。(制表符本身不会被复制。)如果字符为换0 码力 | 1961 页 | 9.14 MB | 9 月前3
Python 标准库参考指南 3.8.20 encoding 。有关支持的编码列表,请参阅codecs 模块。 errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。 可以使用各种标准错误处理程序(列在错误处理方案 ),但是使用codecs.register_error() 注册的任何错误处理名称也是有效的。标准名称包括: • 如果存在编码错误,'strict' 会引发ValueError 异常。默认值 Reference, 发布 3.8.20 4.7 文本序列类型 --- str 在 Python 中处理文本数据是使用str 对象,也称为 字符串。字符串是由 Unicode 码位构成的不可变序 列。字符串字面值有多种不同的写法: • 单引号: '允许包含有" 双" 引号' • 双引号: " 允许包含有 '单' 引号"。 • 三重引号: '''三重单引号''', """ 三重双引号""" expandtabs(tabsize=8) 返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的 制表符宽度。每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。 要展开字符串,当前列将被设为零并逐一检查字符串中的每个字符。如果字符为制表符 (\t),则会 在结果中插入一个或多个空格符,直到当前列等于下一个制表位。(制表符本身不会被复制。)如果0 码力 | 1927 页 | 9.69 MB | 9 月前3
Python 标准库参考指南 3.8.20 encoding 。有关支持的编码列表,请参阅codecs 模块。 errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。 可以使用各种标准错误处理程序(列在错误处理方案 ),但是使用codecs.register_error() 注册的任何错误处理名称也是有效的。标准名称包括: • 如果存在编码错误,'strict' 会引发ValueError 异常。默认值 Reference, 发布 3.8.20 4.7 文本序列类型 --- str 在 Python 中处理文本数据是使用str 对象,也称为 字符串。字符串是由 Unicode 码位构成的不可变序 列。字符串字面值有多种不同的写法: • 单引号: '允许包含有" 双" 引号' • 双引号: " 允许包含有 '单' 引号"。 • 三重引号: '''三重单引号''', """ 三重双引号""" expandtabs(tabsize=8) 返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的 制表符宽度。每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。 要展开字符串,当前列将被设为零并逐一检查字符串中的每个字符。如果字符为制表符 (\t),则会 在结果中插入一个或多个空格符,直到当前列等于下一个制表位。(制表符本身不会被复制。)如果0 码力 | 1927 页 | 9.69 MB | 9 月前3
Python 标准库参考指南 3.8.20 encoding 。 有关支持的编码列表,请参阅codecs 模块。 errors 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。可 以使用各种标准错误处理程序(列在错误处理方案 ),但是使用codecs.register_error() 注册 的任何错误处理名称也是有效的。标准名称包括: • 如果存在编码错误,'strict' 会引发ValueError 异常。默认值 iterable 的项求和并返回总计值。iterable 的项通常为数字,而 start 值则不允许 为字符串。 对 某 些 用 例 来 说, 存 在sum() 的 更 好 替 代。 拼 接 字 符 串 序 列 的 更 好 更 快 方 式 是 调 用 ''. join(sequence)。要以扩展精度对浮点值求和,请参阅math.fsum()。要拼接一系列可迭代对 象,请考虑使用itertools.chain()。 expandtabs(tabsize=8) 返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制 表符宽度。每 tabsize 个字符设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。要展 开字符串,当前列将被设为零并逐一检查字符串中的每个字符。如果字符为制表符 (\t),则会在结果 中插入一个或多个空格符,直到当前列等于下一个制表位。(制表符本身不会被复制。)如果字符为换0 码力 | 2052 页 | 9.74 MB | 9 月前3
Hello 算法 1.1.0 Python版在计算机世界中,哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号,从而可以快速找到目标图书。 第 6 章 哈希表 hello‑algo.com 109 6.1 哈希表 哈希表(hash table),又称散列表,它通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具体而 言,我们向哈希表中输入一个键 key ,则可以在 ?(1) 时间内获取对应的值 value 。 如图 6‑1 所示,给定的哈希值为 274267521 在许多编程语言中,只有不可变对象才可作为哈希表的 key 。假如我们将列表(动态数组)作为 key ,当列 表的内容发生变化时,它的哈希值也随之改变,我们就无法在哈希表中查询到原先的 value 了。 虽然自定义对象(比如链表节点)的成员变量是可变的,但它是可哈希的。这是因为对象的哈希值通常是基 于 完美二叉树是一个特例,在二叉树的中间层通常存在许多 None 。由于层序遍历序列并不包含这些 None ,因 此我们无法仅凭该序列来推测 None 的数量和分布位置。这意味着存在多种二叉树结构都符合该层序遍历序 列。 如图 7‑13 所示,给定一棵非完美二叉树,上述数组表示方法已经失效。 第 7 章 树 hello‑algo.com 141 图 7‑13 层序遍历序列对应多种二叉树可能性 为了解决此问题 0 码力 | 364 页 | 18.42 MB | 1 年前3
共 111 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12













