Hello 算法 1.2.0 繁体中文 TypeScript 版的方法是找一臺計算機,執行這兩個演算法,並監控記錄它們的執行時間和記憶體佔用情況。這種評估方式 能夠反映真實情況,但也存在較大的侷限性。 一方面,難以排除測試環境的干擾因素。硬體配置會影響演算法的效能表現。比如一個演算法的並行度較高, 那麼它就更適合在多核 CPU 上執行,一個演算法的記憶體操作密集,那麼它在高效能記憶體上的表現就會 更好。也就是說,演算法在不同的機器上的測試結果可能是不一致的。這意味著我們需要在各種機器上進行 複雜度分析為我們提供了一把評估演算法效率的“標尺”,使我們可以衡量執行某個演算法所需的時間和空 間資源,對比不同演算法之間的效率。 複雜度是個數學概念,對於初學者可能比較抽象,學習難度相對較高。從這個角度看,複雜度分析可能不太 適合作為最先介紹的內容。然而,當我們討論某個資料結構或演算法的特點時,難以避免要分析其執行速度 和空間使用情況。 綜上所述,建議你在深入學習資料結構與演算法之 表 2‑1 迭代與遞迴特點對比 迭代 遞迴 實現方 式 迴圈結構 函式呼叫自身 第 2 章 複雜度分析 www.hello‑algo.com 27 迭代 遞迴 時間效 率 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 性好 適0 码力 | 384 页 | 18.80 MB | 10 月前3
Hello 算法 1.1.0 TypeScript版“计算操作运行时间统计”简化为“计算操作数量统计”,这样一来估算难度就大大降低了。 ‧ 时间复杂度也存在一定的局限性。例如,尽管算法 A 和 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。在 这些情况下,我们很难仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分析仍 然是评判算法效率最有效且常用的方法。 (?2) ?3 + 10000?2 ?(?3) 2? + 10000?10000 ?(2?) 2.3.4 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型如图 2‑9 所示(按照从低到高的顺序排列)。 ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < recur() 在运行过程中会同时存在 ? 个未返回的 recur() ,从而占用 ?(?) 的栈帧空间。 2.4.3 常见类型 设输入数据大小为 ? ,图 2‑16 展示了常见的空间复杂度类型(从低到高排列)。 ?(1) < ?(log ?) < ?(?) < ?(?2) < ?(2?) 常数阶 < 对数阶 < 线性阶 < 平方阶 < 指数阶 图 2‑16 常见的空间复杂度类型 1. 常数阶0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.2.0 简体中文 TypeScript 版“计算操作运行时间统计”简化为“计算操作数量统计”,这样一来估算难度就大大降低了。 ‧ 时间复杂度也存在一定的局限性。例如,尽管算法 A 和 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。对 于此类情况,我们时常难以仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分 析仍然是评判算法效率最有效且常用的方法。 (?2) ?3 + 10000?2 ?(?3) 2? + 10000?10000 ?(2?) 2.3.4 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型如图 2‑9 所示(按照从低到高的顺序排列)。 ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < recur() 在运行过程中会同时存在 ? 个未返回的 recur() ,从而占用 ?(?) 的栈帧空间。 2.4.3 常见类型 设输入数据大小为 ? ,图 2‑16 展示了常见的空间复杂度类型(从低到高排列)。 ?(1) < ?(log ?) < ?(?) < ?(?2) < ?(2?) 常数阶 < 对数阶 < 线性阶 < 平方阶 < 指数阶 图 2‑16 常见的空间复杂度类型 1. 常数阶0 码力 | 383 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0b5 TypeScript 版的数量的统计”,这样以来估算难度就大大降低了。 ‧ 时间复杂度也存在一定的局限性。例如,尽管算法 A 和 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。在 这些情况下,我们很难仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分析仍 然是评判算法效率最有效且常用的方法。 (?2) ?3 + 10000?2 ?(?3) 2? + 10000?10000 ?(2?) 2.3.4 常见类型 设输入数据大小为 ? ,常见的时间复杂度类型如图 2‑9 所示(按照从低到高的顺序排列)。 ?(1) < ?(log ?) < ?(?) < ?(? log ?) < ?(?2) < ?(2?) < ?(?!) 常数阶 < 对数阶 < 线性阶 < 线性对数阶 < 平方阶 < void { if (n === 1) return; return recur(n - 1); } 2.4.3 常见类型 设输入数据大小为 ? ,图 2‑16 展示了常见的空间复杂度类型(从低到高排列)。 ?(1) < ?(log ?) < ?(?) < ?(?2) < ?(2?) 常数阶 < 对数阶 < 线性阶 < 平方阶 < 指数阶 图 2‑16 常见的空间复杂度类型 第 2 章 复杂度分析0 码力 | 378 页 | 30.70 MB | 1 年前3
Hello 算法 1.0.0b1 TypeScript 版: ‧ 问题是明确的,需要拥有明确的输入和输出定义。 ‧ 解具有确定性,即给定相同输入时,输出一定相同。 ‧ 具有可行性,可在有限步骤、有限时间、有限内存空间下完成。 ‧ 独立于编程语言,即可用多种语言实现。 1.2.2. 数据结构定义 「数据结构 Data Structure」是在计算机中组织与存储数据的方式。为了提高数据存储和操作性能,数据结构 的设计原则有: ‧ 空间占用尽可能小,节省计算机内存。 算法有对应最优的数据结构。给定算法,一般可基于不同的数据结构实现,而最终执行效率往往相差很 大。 Figure 1‑2. 数据结构与算法的关系 如果将「LEGO 乐高」类比到「数据结构与算法」,那么可以得到下表所示的对应关系。 数据结构与算法 LEGO 乐高 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 1 ‧ 算法是在有限时间内解决特定问题的一组指令或操作步骤,数据结构是在计算机中组织与存储数据的方 式。 ‧ 数据结构与算法两者紧密联系。数据结构是算法的底座,算法是发挥数据结构的舞台。 ‧ 乐高积木对应数据,积木形状和连接形式对应数据结构,拼装积木的流程步骤对应算法。 12 2. 复杂度分析 2.1. 算法效率评估 2.1.1. 算法评价维度 在开始学习算法之前,我们首先要想清楚算0 码力 | 186 页 | 14.71 MB | 1 年前3
TypeScript Handbook(中文版)
React和React-DOM的npm 包里包含了独立的 .js 文件,你可以在页面上引入它们,这里我们为了快捷就直 接引用了。 可以随意地将它们拷贝到其它目录下,或者从CDN上引用。 Facebook 在CND上提供了一系列可用的React版本,你可以在这里查看更多内容。 创建一个webpack配置文件 在工程根目录下创建一个 webpack.config.js 文件。 TypeScript Handbook(中文版) avaScript,你可以使用 noEmitOnError 选 项。 从某种意义上来讲,TypeScript具有一个调整它的严格性的刻度盘,你可以将 指针拔动到你想要的位置。 如果你计划使用可用的高度严格的设置,最好现在就启用它们(查看启用严格检 查)。 比如,如果你不想让TypeScript将没有明确指定的类型默默地推断 为 any 类型,可以在修改文件之前启用 noImplicitAny define(...args: any[]): any; 最好是避免使用这些调用而改用TypeScript的导入语法。 首先,你要使用TypeScript的 module 标记来启用一些模块系统。 可用的选项 有 commonjs , amd , system ,and umd 。 如果代码里存在下面的Node/CommonJS代码: var foo = require("foo");0 码力 | 557 页 | 7.48 MB | 1 年前3
TypeScript 4.0 使用手册
React和React-DOM的npm包里包含了独立 的 .js 文件,你可以在页面上引入它们,这里我们为了快捷就直接引用了。 可以随意地将它们拷贝 到其它目录下,或者从CDN上引用。 Facebook在CND上提供了一系列可用的React版本,你可以在这 里查看更多内容。 React与webpack - 56 - 本文档使用 书栈网 · BookStack.CN 构建 在工程根目录下创建一个 webpack.config TypeScript还会被编译成JavaScript,你可以使用 noEmitOnError 选项。 从某种意义上来讲, TypeScript具有一个调整它的严格性的刻度盘,你可以将指针拔动到你想要的位置。 如果你计划使用可用的高度严格的设置,最好现在就启用它们(查看启用严格检查)。 比如,如果你 不想让TypeScript将没有明确指定的类型默默地推断为 any 类型,可以在修改文件之前启 用 noImplicitAny 从JavaScript迁移到TypeScript - 78 - 本文档使用 书栈网 · BookStack.CN 构建 首先,你要使用TypeScript的 module 标记来启用一些模块系统。 可用的选项 有 commonjs , amd , system ,and umd 。 如果代码里存在下面的Node/CommonJS代码: 1. var foo = require("foo");0 码力 | 683 页 | 6.27 MB | 1 年前3
TypeScript 类型系统类型声明空间 11 类型声明空间里包含用来当做类型注解的内容 类型不能赋给一个变量,也不能作为值进行传递(class除外) TypeScript 变量声明空间(值空间) 12 变量声明空间包含可用作变量的内容 class既属于类型声明空间,也属于变量声明空间 普通的变量/常量不能用作类型注解 TypeScript 函数重载 13 1. TypeScript类型信息只存在于编译期,不会带到运行期0 码力 | 25 页 | 1.27 MB | 1 年前3
TypeScript的发展历程Flow Type ●JS+类型标注 ●工具相对完善 ●上手容易 ●与TS设计相似* 比较 类型系统 难度 工具链 CoffeeScript 动态 低 差 BuckleScript 很强 高 较好 FlowType 强 较低 较好 TypeScript 强 低 很好 TS发展史 ●简单易用,不求完美 ●原汁原味,贴合JS ●从简单到强大 TS发展史 Pre 1.0 ●简单0 码力 | 64 页 | 6.17 MB | 1 年前3
共 9 条
- 1













