Hello 算法 1.0.0b2 Python版时间复杂度也存在一定的局限性。比如,虽然算法 A 和 C 的时间复杂度相同,但是实际的运行时间有非常大的 差别。再比如,虽然算法 B 比 C 的时间复杂度要更高,但在输入数据大小 ? 比较小时,算法 B 是要明显优于算 法 C 的。对于以上情况,我们很难仅凭时间复杂度来判定算法效率高低。然而,即使存在这些问题,复杂度分 析仍然是评判算法效率的最有效且常用的方法。 2.2.3. 函数渐近上界 设算法「计算操作数量」为 度。 ‧ 我们可以通过实际测试来评估算法效率,但难以排除测试环境的干扰,并且非常耗费计算资源。 ‧ 复杂度分析克服了实际测试的弊端,分析结果适用于所有运行平台,并且可以体现不同数据大小下的算 法效率。 时间复杂度 ‧ 时间复杂度统计算法运行时间随着数据量变大时的增长趋势,可以有效评估算法效率,但在某些情况下 可能失效,比如在输入数据量较小或时间复杂度相同时,无法精确对比算法效率的优劣性。 ‧「浮点数」代表小数,根据长度分为 float, double ,同样根据算法的实际需求选用; ‧「字符」在计算机中是以字符集的形式保存的,char 的值实际上是数字,代表字符集中的编号,计算机 通过字符集查表来完成编号到字符的转换。占用空间通常为 2 bytes 或 1 byte ; ‧「布尔」代表逻辑中的“是”与“否”,其占用空间需根据编程语言确定,通常为 1 byte 或 1 bit ; 类别 符号0 码力 | 186 页 | 15.69 MB | 1 年前3
Hello 算法 1.0.0b1 Python版时间复杂度也存在一定的局限性。比如,虽然算法 A 和 C 的时间复杂度相同,但是实际的运行时间有非常大的 差别。再比如,虽然算法 B 比 C 的时间复杂度要更高,但在输入数据大小 ? 比较小时,算法 B 是要明显优于算 法 C 的。对于以上情况,我们很难仅凭时间复杂度来判定算法效率高低。然而,即使存在这些问题,复杂度分 析仍然是评判算法效率的最有效且常用的方法。 2.2.3. 函数渐近上界 设算法「计算操作数量」为 ‧「浮点数」代表小数,根据长度分为 float, double ,同样根据算法的实际需求选用; ‧「字符」在计算机中是以字符集的形式保存的,char 的值实际上是数字,代表字符集中的编号,计算机 通过字符集查表来完成编号到字符的转换。占用空间与具体编程语言有关,通常为 2 bytes 或 1 byte ; ‧「布尔」代表逻辑中的“是”与“否”,其占用空间需要具体根据编程语言确定,通常为 1 byte 或 216 − 1 0 布尔 bool 1 byte / 1 bit true 或 false false � 以上表格中,加粗项在「算法题」中最为常用。此表格无需硬背,大致理解即可,需要时可以 通过查表来回忆。 整数表示方式 整数的取值范围取决于变量使用的内存长度,即字节(或比特)数。在计算机中,1 字节 (byte) = 8 比特 (bit) , 1 比特即 1 个二进制位。以 int 类型为例:0 码力 | 178 页 | 14.67 MB | 1 年前3
Python3 基础教程 - 廖雪峰可以处理任意大小的整数,当然包括负整数,在程序中的表示方 法和数学上的写法一模一样,例如:1,100,-8080,0,等等。 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便, 十六进制用 0x 前缀和 0-9,a-f 表示,例如:0xff00,0xa5b4c3d2,等等。 浮点数 浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时, 一个浮点数的小数点位置是可变的,比如,1 一个浮点数的小数点位置是可变的,比如,1.23x109 和 12.3x108 是完全 相等的。浮点数可以用数学写法,如 1.23,3.14,-9.01,等等。但是对 于很大或很小的浮点数,就必须用科学计数法表示,把 10 用 e 替代, 1.23x109 就是 1.23e9,或者 12.3e8,0.000012 可以写成 1.2e-5,等等。 整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确 的(除法难道 Python 中,有两种除 法,一种除法是/: >>> 10 / 3 3.3333333333333335 /除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数: >>> 9 / 3 3.0 还有一种除法是//,称为地板除,两个整数的除法仍然是整数: >>> 10 // 3 3 你没有看错,整数的地板除//永远是整数,即使除不尽。要做精确的除 法,使用/就可以。0 码力 | 531 页 | 5.15 MB | 1 年前3
Hello 算法 1.0.0b4 Python版您需要至少具备任一语言的编程基础,能够阅读和编写简单代码。 0.1.2. 内容结构 本书主要内容包括: ‧ 复杂度分析:数据结构和算法的评价维度,算法效率的评估方法。时间复杂度、空间复杂度的推算方 法、常见类型、示例等。 ‧ 数据结构:基本数据类型,数据结构的分类方法。数组、链表、栈、队列、散列表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜 # 1 ns print(0) # 5 ns 2. 复杂度 hello‑algo.com 15 然而实际上,统计算法的运行时间既不合理也不现实。首先,我们不希望预估时间和运行平台绑定,因为算 法需要在各种不同的平台上运行。其次,我们很难获知每种操作的运行时间,这给预估过程带来了极大的难 度。 2.2.2. 统计时间增长趋势 「时间复杂度分析」采取了一种不同的方法,其统计的不是算法运行时间,而是算法运行时间随着数据量变大 ‧ 整数类型 int 占用 4 bytes = 32 bits ,可以表示 232 个数字。 下表列举了各种基本数据类型的占用空间、取值范围和默认值。此表格无需硬背,大致理解即可,需要时可 以通过查表来回忆。 类型 符号 占用空间 最小值 最大值 默认值 整数 byte 1 byte −27 (−128) 27 − 1 (127) 0 short 2 bytes −215 215 − 1 00 码力 | 329 页 | 27.34 MB | 1 年前3
Hello 算法 1.0.0b5 Python版适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习数据结构与算法之前,先对复杂度分析建立初步的了解,以便能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在数据结构与算法中,重复执行某个任务是很常见的,其与算法的复杂度密切相关。而要重复执行某个任务, 我们通常会选用两种基本的程序结构:迭代和递归。 2.2.1 6? + 12 ns : 1 + 1 + 10 + (1 + 5) × ? = 6? + 12 但实际上,统计算法的运行时间既不合理也不现实。首先,我们不希望将预估时间和运行平台绑定,因为算 法需要在各种不同的平台上运行。其次,我们很难获知每种操作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。 hello‑algo.com 34 if n == 1: return 1 return exp_recur(n - 1) + exp_recur(n - 1) + 1 指数阶增长非常迅速,在穷举法(暴力搜索、回溯等)中比较常见。对于数据规模较大的问题,指数阶是不 可接受的,通常需要使用动态规划或贪心等算法来解决。 5. 对数阶 ?(log ?) 与指数阶相反,对数阶反映了“每轮缩减到一半”的情况。设输入数据大小为0 码力 | 361 页 | 30.64 MB | 1 年前3
Hello 算法 1.1.0 Python版适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习数据结构与算法之前,先对复杂度分析建立初步的了解,以便能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 对于某些复杂问题,模拟系统调用栈的行为可能非常困难。 第 2 章 复杂度分析 hello‑algo.com 28 总之,选择迭代还是递归取决于特定问题的性质。在编程实践中,权衡两者的优劣并根据情境选择合适的方 法至关重要。 2.3 时间复杂度 运行时间可以直观且准确地反映算法的效率。如果我们想准确预估一段代码的运行时间,应该如何操作呢? 1. 确定运行平台,包括硬件配置、编程语言、系统环境等,这些因素都会影响代码的运行效率。 (6? + 12) ns : 1 + 1 + 10 + (1 + 5) × ? = 6? + 12 但实际上,统计算法的运行时间既不合理也不现实。首先,我们不希望将预估时间和运行平台绑定,因为算 法需要在各种不同的平台上运行。其次,我们很难获知每种操作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。0 码力 | 364 页 | 18.42 MB | 1 年前3
Hello 算法 1.0.0 Python版适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习数据结构与算法之前,先对复杂度分析建立初步的了解,以便能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 复杂度分析 hello‑algo.com 28 ‧ 对于某些复杂问题,模拟系统调用栈的行为可能非常困难。 总之,选择迭代还是递归取决于特定问题的性质。在编程实践中,权衡两者的优劣并根据情境选择合适的方 法至关重要。 2.3 时间复杂度 运行时间可以直观且准确地反映算法的效率。如果我们想准确预估一段代码的运行时间,应该如何操作呢? 1. 确定运行平台,包括硬件配置、编程语言、系统环境等,这些因素都会影响代码的运行效率。 (6? + 12) ns : 1 + 1 + 10 + (1 + 5) × ? = 6? + 12 但实际上,统计算法的运行时间既不合理也不现实。首先,我们不希望将预估时间和运行平台绑定,因为算 法需要在各种不同的平台上运行。其次,我们很难获知每种操作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。0 码力 | 362 页 | 17.54 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Python 版統計時間增長趨勢 時間複雜度分析統計的不是演算法執行時間,而是演算法執行時間隨著資料量變大時的增長趨勢。 “時間增長趨勢”這個概念比較抽象,我們透過一個例子來加以理解。假設輸入資料大小為 ? ,給定三個演算 法 A、B 和 C : # 演算法 A 的時間複雜度:常數階 def algorithm_A(n: int): print(0) # 演算法 B 的時間複雜度:線性階 def algorithm_B(n: 第二步:判斷漸近上界 時間複雜度由 ?(?) 中最高階的項來決定。這是因為在 ? 趨於無窮大時,最高階的項將發揮主導作用,其他 項的影響都可以忽略。 表 2‑2 展示了一些例子,其中一些誇張的值是為了強調“係數無法撼動階數”這一結論。當 ? 趨於無窮大時, 這些常數變得無足輕重。 第 2 章 複雜度分析 www.hello‑algo.com 32 表 2‑2 不同操作數量對應的時間複雜度 操作數量 ?( """ 指數階(遞迴實現)""" if n == 1: return 1 return exp_recur(n - 1) + exp_recur(n - 1) + 1 指數階增長非常迅速,在窮舉法(暴力搜尋、回溯等)中比較常見。對於資料規模較大的問題,指數階是不 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為0 码力 | 364 页 | 18.74 MB | 10 月前3
Hello 算法 1.2.0 简体中文 Python 版适合作为最先介绍的内容。然而,当我们讨论某个数据结构或算法的特点时,难以避免要分析其运行速度和 空间使用情况。 综上所述,建议你在深入学习数据结构与算法之前,先对复杂度分析建立初步的了解,以便能够完成简单算 法的复杂度分析。 2.2 迭代与递归 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 对于某些复杂问题,模拟系统调用栈的行为可能非常困难。 第 2 章 复杂度分析 www.hello‑algo.com 28 总之,选择迭代还是递归取决于特定问题的性质。在编程实践中,权衡两者的优劣并根据情境选择合适的方 法至关重要。 2.3 时间复杂度 运行时间可以直观且准确地反映算法的效率。如果我们想准确预估一段代码的运行时间,应该如何操作呢? 1. 确定运行平台,包括硬件配置、编程语言、系统环境等,这些因素都会影响代码的运行效率。 (6? + 12) ns : 1 + 1 + 10 + (1 + 5) × ? = 6? + 12 但实际上,统计算法的运行时间既不合理也不现实。首先,我们不希望将预估时间和运行平台绑定,因为算 法需要在各种不同的平台上运行。其次,我们很难获知每种操作的运行时间,这给预估过程带来了极大的难 度。 2.3.1 统计时间增长趋势 时间复杂度分析统计的不是算法运行时间,而是算法运行时间随着数据量变大时的增长趋势。0 码力 | 364 页 | 18.43 MB | 10 月前3
Python 标准库参考指南 3.8.20 __index__() 方法。一些例子: >>> hex(255) '0xff' >>> hex(-42) '-0x2a' 如果要将整数转换为大写或小写的十六进制字符串,并可选择有无“0x”前缀,则可以使用如下方 法: >>> '%#x' % 255, '%x' % 255, '%X' % 255 ('0xff', 'ff', 'FF') >>> format(255, '#x'), format(255, 'x') 整数类型定义请参阅数字类型 --- int, float, complex 。 在 3.4 版更改: 如果 base 不是int 的实例,但 base 对象有 base.__index__ 方法,则会调用该方 法来获取进制数。以前的版本使用 base.__int__ 而不是 base.__index__。 在 3.6 版更改: 您可以使用下划线将代码文字中的数字进行分组。 在 3.7 版更改: x 现在只能作为位置参数。 newline 为 None,则写入的任何 '\n' 字符都将转换为系统默认行分 隔符os.linesep。如果 newline 是 '' 或 '\n',则不进行翻译。如果 newline 是任何其他合 法值,则写入的任何 '\n' 字符将被转换为给定的字符串。 如果 closefd 是 False 并且给出了文件描述符而不是文件名,那么当文件关闭时,底层文件描述符 将保持打开状态。如果给出文件名则 closefd0 码力 | 1927 页 | 9.69 MB | 10 月前3
共 125 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13













