Hello 算法 1.0.0b1 TypeScript 版。 在正式介绍算法之前,我想告诉你一件有趣的事:其实,你在过去已经学会了很多算法,并且已经习惯将它们 应用到日常生活中。接下来,我将介绍两个具体例子来佐证。 例一:拼积木。一套积木,除了有许多部件之外,还会附送详细的拼装说明书。我们按照说明书上一步步操作, 即可拼出复杂的积木模型。 如果从数据结构与算法的角度看,大大小小的「积木」就是数据结构,而「拼装说明书」上的一系列步骤就是 算法。 独立于编程语言,即可用多种语言实现。 1.2.2. 数据结构定义 「数据结构 Data Structure」是在计算机中组织与存储数据的方式。为了提高数据存储和操作性能,数据结构 的设计原则有: ‧ 空间占用尽可能小,节省计算机内存。 ‧ 数据操作尽量快,包括数据访问、添加、删除、更新等。 1. 引言 hello‑algo.com 10 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构的设计 定的误导性。反之,「最差时间复杂度」最为实用,因为它给出了一个“效率安全值”,让我们 可以放心地使用算法。 从上述示例可以看出,最差或最佳时间复杂度只出现在“特殊分布的数据”中,这些情况的出现概率往往很 小,因此并不能最真实地反映算法运行效率。相对地,「平均时间复杂度」可以体现算法在随机输入数据下的 运行效率,用 Θ 记号(Theta Notation)来表示。 对于部分算法,我们可以简单地推算出随0 码力 | 186 页 | 14.71 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 TypeScript 版技藝、到解放生產力的工業產品、再到宇宙運行的科學規律,幾乎每一件平凡或令人驚嘆的事物背後,都隱 藏著精妙的演算法思想。 同樣,資料結構無處不在:大到社會網絡,小到地鐵路線,許多系統都可以建模為“圖”;大到一個國家,小 到一個家庭,社會的主要組織形式呈現出“樹”的特徵;冬天的衣服就像“堆疊”,最先穿上的最後才能脫下; 羽毛球筒則如同“佇列”,一端放入、一端取出;字典就像一個“雜湊表”,能夠快速查找目標詞條。 . 2 0.2 如何使用本書 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 0.3 小結 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 第 1 章 初識演算法 11 1.2 演算法是什麼 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.3 小結 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 第 2 章 複雜度分析0 码力 | 384 页 | 18.80 MB | 10 月前3
Hello 算法 1.1.0 TypeScript版到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 为渐近复杂度分析(asymptotic complexity analysis),简称复杂度分析。 复杂度分析能够体现算法运行所需的时间和空间资源与输入数据大小之间的关系。它描述了随着输入数据大 小的增加,算法执行所需时间和空间的增长趋势。这个定义有些拗口,我们可以将其分为三个重点来理解。 ‧“时间和空间资源”分别对应时间复杂度(time complexity)和空间复杂度(space complexity)。 当算法程序运行时,正在处理的数据主要存储在内存中。图 3‑2 展示了一个计算机内存条,其中每个黑色方 块都包含一块内存空间。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大 小的数据。 第 3 章 数据结构 hello‑algo.com 53 系统通过内存地址来访问目标位置的数据。如图 3‑2 所示,计算机根据特定规则为表格中的每个单元格分配 编号,确保每个内存空间都0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.2.0 简体中文 TypeScript 版到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 为渐近复杂度分析(asymptotic complexity analysis),简称复杂度分析。 复杂度分析能够体现算法运行所需的时间和空间资源与输入数据大小之间的关系。它描述了随着输入数据大 小的增加,算法执行所需时间和空间的增长趋势。这个定义有些拗口,我们可以将其分为三个重点来理解。 ‧“时间和空间资源”分别对应时间复杂度(time complexity)和空间复杂度(space complexity)。 当算法程序运行时,正在处理的数据主要存储在内存中。图 3‑2 展示了一个计算机内存条,其中每个黑色方 块都包含一块内存空间。我们可以将内存想象成一个巨大的 Excel 表格,其中每个单元格都可以存储一定大 小的数据。 第 3 章 数据结构 www.hello‑algo.com 53 系统通过内存地址来访问目标位置的数据。如图 3‑2 所示,计算机根据特定规则为表格中的每个单元格分配 编号,确保每个内0 码力 | 383 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0b5 TypeScript 版string>(); /* 添加操作 */ // 在哈希表中添加键值对 (key, value) map.set(12836, '小哈'); map.set(15937, '小啰'); map.set(16750, '小算'); map.set(13276, '小法'); map.set(10583, '小鸭'); console.info('\n添加完成后,哈希表为\nKey -> Value'); max heap」:任意节点的值 ≥ 其子节点的值。 ‧「小顶堆 min heap」:任意节点的值 ≤ 其子节点的值。 图 8‑1 小顶堆与大顶堆 堆作为完全二叉树的一个特例,具有以下特性。 ‧ 最底层节点靠左填充,其他层的节点都被填满。 ‧ 我们将二叉树的根节点称为“堆顶”,将底层最靠右的节点称为“堆底”。 ‧ 对于大顶堆(小顶堆),堆顶元素(即根节点)的值分别是最大(最小)的。 8 堆常用操作 需要指出的是,许多编程语言提供的是「优先队列 priority queue」,这是一种抽象数据结构,定义为具有优 先级排序的队列。 实际上,堆通常用作实现优先队列,大顶堆相当于元素按从大到小顺序出队的优先队列。从使用角度来看, 我们可以将“优先队列”和“堆”看作等价的数据结构。因此,本书对两者不做特别区分,统一使用“堆“来 命名。 堆的常用操作见表 8‑1 ,方法名需要根据编程语言来确定。0 码力 | 378 页 | 30.70 MB | 1 年前3
TypeScript 多场景设计方案及应用实践
⽤用习惯,虽然业务不不同,但是业务的代码量量依旧可观。 为什什么需要框架 TS Midway-FaaS ⽬目标: 1、体验⼀一致,⽅方便便代码模块迁移 2、跨平台发布 实现⼩小⽽而美 TS Midway-FaaS 实现⼩小⽽而美 Midway For Egg 600 line 符合全栈场景的框架, ⽀支持 egg 插件体系的完 整版本。 Midway For Koa 220line FaaS 240line ⽀支持 express 作为基础框 架,包含最简单单进程场 景的 midway 适配版本。 120line 极简的 for FaaS 场景 的⽀支持 IoC 的最⼩小框架 版本。 Selected TS 从 Web 到 FaaS ⾸首先是⼊入⼝口的变化,装饰器器的不不同 @func,⽤用⽼老老办法处理理。 场景切换,代码⼀一致 TS 从 Web 到0 码力 | 95 页 | 8.28 MB | 1 年前3
TypeScript 4.0 使用手册
run test ,这 样你就可以在预览的同时进行测试。 在使用 npm run start 运行工程的时候,我们并没有生成一个优化过的版本。 通常我们想给用户一 个运行的尽可能快并在体积上尽可能小的代码。 像压缩这样的优化方法可以做到这一点,但是总是要 耗费更多的时间。 我们把这样的构建版本称做“生产环境”版本(与开发版本相对)。 要执行生产环境的构建,可以运行如下命令: 运行工程 测试工程 要小心使用解构。 从前面的例子可以看出,就算是最简单的解构表达式也是难以理解的。 尤其当存在 深层嵌套解构的时候,就算这时没有堆叠在一起的重命名,默认值和类型注解,也是令人难以理解的。 解构表达式要尽量保持小而简单。 你自己也可以直接使用解构将会生成的赋值表达式。 函数声明 变量声明 - 105 - 本文档使用 书栈网 · BookStack.CN 构建 展开操作符正与解构相反。 它允许你将一个数 prepend - 因为这会改善构建时间并结省I/O。 TypeScript项目本身是一个好的参照 - 我们有一些“library”的工程和一些“endpoint”工程,“endpoint”工程会确保足够小并仅仅导入它 们需要的“library”。 指导 整体结构 相对模块的结构 outFile 的结构 工程引用 - 345 - 本文档使用 书栈网 · BookStack.CN 构建 NPM包的类型0 码力 | 683 页 | 6.27 MB | 1 年前3
TypeScript Handbook(中文版)
,这样你就可以在预览的同时进行测试。 生成生产环境的构建版本 在使用 npm run start 运行工程的时候,我们并没有生成一个优化过的版本。 通 常我们想给用户一个运行的尽可能快并在体积上尽可能小的代码。 像压缩这样的优 化方法可以做到这一点,但是总是要耗费更多的时间。 我们把这样的构建版本称 做“生产环境”版本(与开发版本相对)。 要执行生产环境的构建,可以运行如下命令: npm run 以前有两个选择: 1. 在每一个需要辅助库的文件都注入辅助库或者 2. 使用 --noEmitHelpers 编译参数完全不使用辅助库。 这两项还有待改进。将帮助文件捆绑在每个文件中对于试图保持其包尺寸小的客户 而言是一个痛点。不使用辅助库,那么客户就必须自己维护辅助库。 TypeScript 2.1 允许这些辅助库作为单独的模块一次性添加到项目中,并且编译器 根据需求导入它们。 首先,安装 要小心使用解构。 从前面的例子可以看出,就算是最简单的解构表达式也是难以理 解的。 尤其当存在深层嵌套解构的时候,就算这时没有堆叠在一起的重命名,默认 值和类型注解,也是令人难以理解的。 解构表达式要尽量保持小而简单。 你自己 也可以直接使用解构将会生成的赋值表达式。 展开 TypeScript Handbook(中文版) 243 变量声明 展开操作符正与解构相反。 它允许你将一个数组展开为另一个数组,或将一个对象0 码力 | 557 页 | 7.48 MB | 1 年前3
共 8 条
- 1













