Hello 算法 1.0.0b1 Python版0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。 省略所有系数。例如,循环 2? 次、5? + 1 次、⋯⋯,都可以化简记为 ? 次,因为 ? 前面的系数对时间 复杂度也不产生影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别套 用上述 1. 和 2. 技巧。 以下示例展示了使用上述技巧前、后的统计结果。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = 2 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将处于主导作用, 其它项的影响都可以被忽略。 以下表格给出了一些例子,其中有一些夸张的值,是想要向大家强调 系数无法撼动阶数 这一结论。在 ? 趋于 无穷大时,这些常数都是“浮云”。 2. 复杂度分析 hello‑algo.com 18 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3?0 码力 | 178 页 | 14.67 MB | 1 年前3
Hello 算法 1.0.0b2 Python版0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ZIP”直接下载代码压缩包,本地解压即可。 省略所有系数。例如,循环 2? 次、5? + 1 次、⋯⋯,都可以化简记为 ? 次,因为 ? 前面的系数对时间 复杂度也不产生影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别套 用上述 1. 和 2. 技巧。 以下示例展示了使用上述技巧前、后的统计结果。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = 2 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将处于主导作用, 其它项的影响都可以被忽略。 以下表格给出了一些例子,其中有一些夸张的值,是想要向大家强调 系数无法撼动阶数 这一结论。在 ? 趋于 无穷大时,这些常数都是“浮云”。 2. 复杂度分析 hello‑algo.com 18 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3?0 码力 | 186 页 | 15.69 MB | 1 年前3
Hello 算法 1.0.0b4 Python版。与仅阅读 代码相比,编写代码的过程往往能带来更多收获。 Figure 0‑3. 运行代码示例 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用上述 1. 和 2. 技巧。 以下示例展示了使用上述技巧前、后的统计结果。 ?(?) = 2?(? + 1) + (5? + 1) + 2 完整统计 (‑.‑|||) = 时间复杂度由多项式 ?(?) 中最高阶的项来决定。这是因为在 ? 趋于无穷大时,最高阶的项将发挥主导作用, 其他项的影响都可以被忽略。 以下表格展示了一些例子,其中一些夸张的值是为了强调“系数无法撼动阶数”这一结论。当 ? 趋于无穷大 时,这些常数变得无足轻重。 操作数量 ?(?) 时间复杂度 ?(?(?)) 100000 ?(1) 3? + 2 ?(?) 2?2 + 3? + 2 ?(?2)0 码力 | 329 页 | 27.34 MB | 1 年前3
Hello 算法 1.0.0b5 Python版与阅读代码相比,编写代码的过程往往能带来更多收获。动手学,才是真的学。 图 0‑3 运行代码示例 运行代码的前置工作主要分为三步。 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以在图 0‑4 所示的位置,点击“Download ”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无需继续执行其他 操作,因此系统无需保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归。0 码力 | 361 页 | 30.64 MB | 1 年前3
Flask入门教程框里,再填一个标题,比如“My PC”,最后点击“Add SSH key”按钮保存。 创建远程仓库 访问新建仓库页面(导航栏“+” - New repository),在“Repository name”处填写仓 库名称,这里填“watchlist”即可,接着选择仓库类型(公开或私有)等选项,最后 点击“Create repository”按钮创建仓库。 因为我们已经提前创建了本地仓库,所以需要指定仓库的远程仓库地址(如果还没 变量,这里也要一并传 入。现在访问一个不存在的 URL,会显示我们自定义的错误页面: 编写完这部分代码后,你会发现两个问题: 错误页面和主页都需要使用 user 变量,所以在对应的处理函数里都要查询数 据库并传入 user 变量。因为每一个页面都需要获取用户名显示在页面顶部, 如果有更多的页面,那么每一个对应的视图函数都要重复传入这个变量。 错误页面模板和主页模板有大量重复的代码,比如 户的账号和密码就会被直接泄露。更保险的方式是对每个密码进行计算生成独一无 二的密码散列值,这样即使攻击者拿到了散列值,也几乎无法逆向获取到密码。 Flask 的依赖 Werkzeug 内置了用于生成和验证密码散列值的函 数, werkzeug.security.generate_password_hash() 用来为给定的密码生成 密码散列值,而 werkzeug.security.check_password_hash()0 码力 | 127 页 | 7.62 MB | 1 年前3
Hello 算法 1.1.0 Python版“如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机问世之前,算法 ”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归:0 码力 | 364 页 | 18.42 MB | 1 年前3
Hello 算法 1.0.0 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 码力 | 362 页 | 17.54 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Python 版“如果我当年学数据结构与算法的时候有《Hello 算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 计算机的出现给世界带来了巨大变革,它凭借高速的计算能力和出色的可编程性,成为了执行算法与处理数 据的理想媒介。无论是电子游戏的逼真画面、自动驾驶的智能决策,还是 AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机问世之前,算法 ”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归:0 码力 | 364 页 | 18.43 MB | 10 月前3
Python3 基础教程 - 廖雪峰Java(针对 Android);写 3D 游戏,最好用 C 或 C++。 如果你是小白用户,满足以下条件: 会使用电脑,但从来没写过程序; 还记得初中数学学的方程式和一点点代数知识; 想从编程小白变成专业的软件架构师; 每天能抽出半个小时学习。 不要再犹豫了,这个教程就是为你准备的! 准备好了吗? Python3 基础教程【完整版】 http://www 数据类型,我们后面会继续讲到。 变量 变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序 中,变量不仅可以是数字,还可以是任意数据类型。 变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数 字和_的组合,且不能用数字开头,比如: a = 1 变量 a 是一个整数。 t_007 = 'T007' 变量 t_007 是一个字符串。 Answer = True 变量 43/531 字符串和编码 字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的 是还有一个编码问题。 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数 字才能处理。最早的计算机在设计时采用 8 个比特(bit)作为一个字节 (byte),所以,一个字节能表示的最大的整数就是 255(二进制 11111111=十进制 255),如果要表示更大的整数,就必须用更多的字0 码力 | 531 页 | 5.15 MB | 1 年前3
Django、Vue 和Element UI 前后端原理论述IntelliJ、PyCharm 等平台,响应速度也非常好。最关键的是,它免费!免费!免费!(重 要的事情说三遍) 工欲善其事,必先利其器。好的工具能够提升我们的工作效率,让我们能够专注上 层设计。仔细想想,AI 的出现不就是为了帮助我们改善工作方式和提高效率吗?只有好 好的运用 AI 工具,我们才能拥抱变化,不惧未来。 拓展学习 [3] X-GPT 带飞代码 0 代码基础的你做自动化! 。 一般来讲,测试数据准备有“造”数和“找”数两种方式。“造”数主要是通过某种 方式模拟实际业务的运行逻辑生成测试数据,一种方法是通过 GUI 构造测试数据,这是 最常见、最可靠的方式,直接通过客户端或界面完成数据构造,缺点是成本高、效率低; 另一种方法是通过数据库构造数据,缺点是直接修改数据库容易产生脏数据,全量导入 数据有评估和操作成本。“找”数是通过某种方式去查找已经存在的测试数据,一种方法 《51 测试天地》七十四 www.51testing.com 各自模块,沟通成本高。这两种方式无疑都能够满足基本测试数据准备需要,但往往都 伴随着“造”数难和“找”数难的问题,而对于信贷业务来说,其长链路的特点使得“造” 数更难和“找”数更难,如何快速构造测试数据就成为了影响测试进度及质效的关键。 三、方法探索 在对当前信贷长链路业务测试数据准备过程中的相关现状进行分析梳理并总结归纳 后,我们发现主要有以下特点:0 码力 | 61 页 | 6.84 MB | 1 年前3
共 151 条
- 1
- 2
- 3
- 4
- 5
- 6
- 16













