Hello 算法 1.1.0 TypeScript版
10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述求和函数为例,设问题 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在循环中模拟求和过程,从 1 遍历到 ? ,每轮执行求和操作,即可求得 ?(?) 。 ‧ 递归:将问题分解为子问题 ?(?) = ?+?(?−1)0 码力 | 383 页 | 18.49 MB | 1 年前3Hello 算法 1.2.0 简体中文 TypeScript 版
10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 10.5 重识搜索算法 . . . 时间效率:算法运行时间的长短。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样,我们才能将各种算法进行对比,进而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述求和函数为例,设问题 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在循环中模拟求和过程,从 1 遍历到 ? ,每轮执行求和操作,即可求得 ?(?) 。 ‧ 递归:将问题分解为子问题 ?(?) = ?+?(?−1)0 码力 | 383 页 | 18.49 MB | 9 月前3Hello 算法 1.0.0b5 TypeScript 版
10.3 二分查找边界 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 10.4 哈希优化策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.5 重识搜索算法 . . . 时间效率:算法运行速度的快慢。 ‧ 空间效率:算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。而有效地评估算法效率至关重要,因为只有 这样我们才能将各种算法进行对比,从而指导算法设计与优化过程。 效率评估方法主要分为两种:实际测试、理论估算。 2.1.1 实际测试 假设我们现在有算法 A 和算法 B ,它们都能解决同一问题,现在需要对比这两个算法的效率。最直接的方法 是找一台 递归:“自上而下”地解决问题。将原问题分解为更小的子问题,这些子问题和原问题具有相同的形式。 接下来将子问题继续分解为更小的子问题,直到基本情况时停止(基本情况的解是已知的)。 以上述的求和函数为例,设问题 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在循环中模拟求和过程,从 1 遍历到 ? ,每轮执行求和操作,即可求得 ?(?) 。 ‧ 递归:将问题分解为子问题 ?(?) = ?+?(?−1)0 码力 | 378 页 | 30.70 MB | 1 年前3Hello 算法 1.0.0b1 TypeScript 版
如果从数据结构与算法的角度看,大大小小的「积木」就是数据结构,而「拼装说明书」上的一系列步骤就是 算法。 例二:查字典。在字典中,每个汉字都有一个对应的拼音,而字典是按照拼音的英文字母表顺序排列的。假设 需要在字典中查询任意一个拼音首字母为 ? 的字,一般我们会这样做: 1. 打开字典大致一半页数的位置,查看此页的首字母是什么(假设为 ? ); 2. 由于在英文字母表中 ? 在 ? 的后面,因此应排除字典前半部分,查找范围仅剩后半部分; 时间效率,即算法的运行速度的快慢。 ‧ 空间效率,即算法占用的内存空间大小。 数据结构与算法追求“运行速度快、占用内存少”,而如何去评价算法效率则是非常重要的问题,因为只有知 道如何评价算法,才能去做算法之间的对比分析,以及优化算法设计。 2.1.2. 效率评估方法 实际测试 假设我们现在有算法 A 和 算法 B ,都能够解决同一问题,现在需要对比两个算法之间的效率。我们能够想到 的最直接的方式,就是找一台计算机, ,即对应字符串长度为 log10 ? ,因 此空间复杂度为 ?(log10 ?) = ?(log ?) 。 2.4. 权衡时间与空间 理想情况下,我们希望算法的时间复杂度和空间复杂度都能够达到最优,而实际上,同时优化时间复杂度和空 间复杂度是非常困难的。 2. 复杂度分析 hello‑algo.com 34 降低时间复杂度,往往是以提升空间复杂度为代价的,反之亦然。我们把牺牲内存空间来提升算法运行速度的0 码力 | 186 页 | 14.71 MB | 1 年前3TypeScript 4.0 使用手册
start 和 npm run test ,这 样你就可以在预览的同时进行测试。 在使用 npm run start 运行工程的时候,我们并没有生成一个优化过的版本。 通常我们想给用户一 个运行的尽可能快并在体积上尽可能小的代码。 像压缩这样的优化方法可以做到这一点,但是总是要 耗费更多的时间。 我们把这样的构建版本称做“生产环境”版本(与开发版本相对)。 要执行生产环境的构建,可以运行如下命令: 要执行生产环境的构建,可以运行如下命令: 运行工程 测试工程 生成生产环境的构建版本 React - 60 - 本文档使用 书栈网 · BookStack.CN 构建 1. npm run build 这会相应地创建优化过的JS和CSS文件, ./build/static/js 和 ./build/static/css 。 大多数情况下你不需要生成生产环境的构建版本, 但它可以帮助你衡量应用最终版本的体积大小。 组件的行为 编写测试。 默认地,我们的应用包含了一个叫做jsdom的库,它允许我们模拟DOM以及在非浏览器的环 境下测试运行时的行为。 Enzyme与此类似,但是是基于jsdom的,并且方便我们查询组件。 让我们把它安装为开发依赖项。 1. npm install -D enzyme @types/enzyme enzyme-adapter-react-16 @types/enzyme-0 码力 | 683 页 | 6.27 MB | 1 年前3TypeScript Handbook(中文版)
User"; document.body.innerHTML = greeter(user); 类型注解 TypeScript里的类型注解是一种轻量级的为函数或变量添加约束的方式。 在这个例 子里,我们希望 greeter 函数接收一个字符串参数。 然后尝试把 greeter 的调 用改成传入一个数组: function greeter(person: string) { return start 运行工程的时候,我们并没有生成一个优化过的版本。 通 常我们想给用户一个运行的尽可能快并在体积上尽可能小的代码。 像压缩这样的优 化方法可以做到这一点,但是总是要耗费更多的时间。 我们把这样的构建版本称 做“生产环境”版本(与开发版本相对)。 要执行生产环境的构建,可以运行如下命令: npm run build 这会相应地创建优化过的JS和CSS文 件, ./build/static/js 了针对组件的行为编写测试。 默认地,我们的应用包含了一个叫做jsdom的库,它 允许我们模拟DOM以及在非浏览器的环境下测试运行时的行为。 Enzyme与此类 似,但是是基于jsdom的,并且方便我们查询组件。 让我们把它安装为开发依赖项。 TypeScript Handbook(中文版) 75 React npm install -D enzyme @types/enzyme react-addons-test-utils0 码力 | 557 页 | 7.48 MB | 1 年前3Hello 算法 1.2.0 繁体中文 TypeScript 版
遞迴:“自上而下”地解決問題。將原問題分解為更小的子問題,這些子問題和原問題具有相同的形式。 接下來將子問題繼續分解為更小的子問題,直到基本情況時停止(基本情況的解是已知的)。 以上述求和函式為例,設問題 ?(?) = 1 + 2 + ⋯ + ? 。 ‧ 迭代:在迴圈中模擬求和過程,從 1 走訪到 ? ,每輪執行求和操作,即可求得 ?(?) 。 ‧ 遞迴:將問題分解為子問題 ?(?) = ?+?(?−1) 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適用於子問題分解,如樹、圖、分治、回溯等,程式碼結構簡潔、 清晰 Tip 如果感覺以下內容理解困難,可以在讀完“堆疊”章節後再來複習。 那麼,迭代和遞迴具有什麼內在關聯呢?以上述遞迴函式為例,求和操作在遞迴的“迴”階段進行。這意味 串列容量 private _size: number = 0; // 串列長度(當前元素數量) private extendRatio: number = 2; // 每次串列擴容的倍數 /* 建構子 */ constructor() { this.arr = new Array(this._capacity); } /* 獲取串列長度(當前元素數量)*/ public size(): number0 码力 | 384 页 | 18.80 MB | 9 月前3TypeScript 多场景设计方案及应用实践
BFF 场景,⽽而淘宝有不不少全栈场景 除了了明确意义的 controller service 承载了了太多的职能。 TS 场景不不同 Egg 解决的是 BFF 场景,⽽而淘宝有不不少全栈场景 ⼦子⽬目录缺乏⽀支持 TS 体验不不同 我们希望引⼊入 TypeScript 原⽣生的体验 TS ├── src │ ├── app.ts │ ├── app.js │ ├── app0 码力 | 95 页 | 8.28 MB | 1 年前3TypeScript的发展历程
●渐进定型: Flow Type CoffeeScript ●纯语法糖,动态类型 ●上手简单 ●工具不良 ●与新标准有冲突 BuckleScript ●脱胎于OCaml ●类型系统强大 ●编译高度优化 ●语义语法疏远,上手难* Flow Type ●JS+类型标注 ●工具相对完善 ●上手容易 ●与TS设计相似* 比较 类型系统 难度 工具链 CoffeeScript 动态 低 差 BuckleScript0 码力 | 64 页 | 6.17 MB | 1 年前3
共 9 条
- 1