Hello 算法 1.2.0 繁体中文 TypeScript 版內的展示效果有限,可訪問 www.hello‑algo.com 網頁版以獲得更佳的閱讀體驗。 推薦語 “一本通俗易懂的資料結構與演算法入門書,引導讀者手腦並用地學習,強烈推薦演算法初學者閱讀!” ——鄧俊輝,清華大學計算機系教授 “如果我當年學資料結構與演算法時有《Hello 演算法》,學起來應該會簡單 10 倍!” ——李沐,亞馬遜資深首席科學家 電腦的出現為世界帶來了巨大的變革,它憑藉高速的運算能力與卓越的可程式化特性,成為執行演算法 。從巧奪天工的匠人 技藝、到解放生產力的工業產品、再到宇宙運行的科學規律,幾乎每一件平凡或令人驚嘆的事物背後,都隱 藏著精妙的演算法思想。 同樣,資料結構無處不在:大到社會網絡,小到地鐵路線,許多系統都可以建模為“圖”;大到一個國家,小 到一個家庭,社會的主要組織形式呈現出“樹”的特徵;冬天的衣服就像“堆疊”,最先穿上的最後才能脫下; 羽毛球筒則如同“佇列”,一端放入、一端取出;字典就像一個“雜湊表”,能夠快速查找目標詞條。 貨幣找零過程 在以上步驟中,我們每一步都採取當前看來最好的選擇(儘可能用大面額的貨幣),最終得到了可行的找零方 案。從資料結構與演算法的角度看,這種方法本質上是“貪婪”演算法。 小到烹飪一道菜,大到星際航行,幾乎所有問題的解決都離不開演算法。計算機的出現使得我們能夠透過程 式設計將資料結構儲存在記憶體中,同時編寫程式碼呼叫 CPU 和 GPU 執行演算法。這樣一來,我們就能把 生活中的問題0 码力 | 384 页 | 18.80 MB | 10 月前3
Hello 算法 1.1.0 TypeScript版杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 为渐近复杂度分析(asymptotic complexity analysis),简称复杂度分析。 复杂度分析能够体现算法运行所需的时间和空间资源与输入数据大小之间的关系。它描述了随着输入数据大 小的增加,算法执行所需时间和空间的增长趋势。这个定义有些拗口,我们可以将其分为三个重点来理解。 ‧“时间和空间资源”分别对应时间复杂度(time complexity)和空间复杂度(space complexity)。0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.2.0 简体中文 TypeScript 版杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。 同样,数据结构无处不在:大到社会网络,小到地铁线路,许多系统都可以建模为“图”;大到一个国家,小 到一个家庭,社会的主要组织形式呈现出“树”的特征;冬天的衣服就像“栈”,最先穿上的最后才能脱下; 羽毛球筒则如同“队列”,一端放入、另一端取出;字典就像一个“哈希表”,能够快速查找目标词条。 1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 为渐近复杂度分析(asymptotic complexity analysis),简称复杂度分析。 复杂度分析能够体现算法运行所需的时间和空间资源与输入数据大小之间的关系。它描述了随着输入数据大 小的增加,算法执行所需时间和空间的增长趋势。这个定义有些拗口,我们可以将其分为三个重点来理解。 ‧“时间和空间资源”分别对应时间复杂度(time complexity)和空间复杂度(space complexity)。0 码力 | 383 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0b5 TypeScript 版1‑3 货币找零过程 在以上步骤中,我们每一步都采取当前看来最好的选择(尽可能用大面额的货币),最终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使我们能够通过编程将 数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题转 移到计算机上,以更高效的方式解决各种复杂问题。 “计算操作的运行时间的统计”简化为“计算操作的数量的统计”,这样以来估算难度就大大降低了。 ‧ 时间复杂度也存在一定的局限性。例如,尽管算法 A 和 C 的时间复杂度相同,但实际运行时间差别很 大。同样,尽管算法 B 的时间复杂度比 C 高,但在输入数据大小 ? 较小时,算法 B 明显优于算法 C 。在 这些情况下,我们很难仅凭时间复杂度判断算法效率的高低。当然,尽管存在上述问题,复杂度分析仍 ,则以上函数的的操作数量为: ?(?) = 3 + 2? ?(?) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。 我们将线性阶的时间复杂度记为 ?(?) ,这个数学符号称为「大 ? 记号 big‑? notation」,表示函数 ?(?) 的「渐近上界 asymptotic upper bound」。 时间复杂度分析本质上是计算“操作数量函数 ?(?)”的渐近上界,其具有明确的数学定义。0 码力 | 378 页 | 30.70 MB | 1 年前3
Hello 算法 1.0.0b1 TypeScript 版查字典这个小学生的标配技能,实际上就是大名鼎鼎的「二分查找」。从数据结构角度,我们可以将字典看作 是一个已排序的「数组」;而从算法角度,我们可将上述查字典的一系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 更加高效地解决各式各样的复杂问题。 的对应方法。 ‧ 算法是数据结构发挥的舞台。数据结构仅存储数据信息,结合算法才可解决特定问题。 ‧ 算法有对应最优的数据结构。给定算法,一般可基于不同的数据结构实现,而最终执行效率往往相差很 大。 Figure 1‑2. 数据结构与算法的关系 如果将「LEGO 乐高」类比到「数据结构与算法」,那么可以得到下表所示的对应关系。 数据结构与算法 LEGO 乐高 输入数据 未拼装的积木 数据结构 我们可以简单地将所有计算操作的执行时间统一看作是相同的“单位时间”,这样的简化做法大大降低了估算 难度。 时间复杂度也存在一定的局限性。比如,虽然算法 A 和 C 的时间复杂度相同,但是实际的运行时间有非常大的 差别。再比如,虽然算法 B 比 C 的时间复杂度要更高,但在输入数据大小 ? 比较小时,算法 B 是要明显优于算 法 C 的。对于以上情况,我们很难仅凭时间复杂度来判定算法效率高低。然而,即使存在这些问题,复杂度分0 码力 | 186 页 | 14.71 MB | 1 年前3
TypeScript 4.0 使用手册
TypeScript支持类型,是 JavaScript的超集且可以编译成纯JavaScript代码。 ✔ TypeScript兼容所有浏览器,所有宿主 环境,所有操作系统。 ✔ TypeScript是开源的。 一大波新的快速开始指南:React,Angular,Nodejs,ASP.NET Core,React Native, Vue,Glimmer,WeChat,Dojo2,Knockout等 如果觉得不错可以微信打赏哟 ),并且有一个可选数量的感叹号做为结尾(通过 enthusiasmLevel )。 若我们这样写,这个组件大至会渲染 成 Hello Daniel!!!。 如果没指定 enthusiasmLevel ,组件将默认显示一个感叹 号。 若 enthusiasmLevel 为 0 (其 它语言中也一样)。 1. let isDone: boolean = false; 和JavaScript一样,TypeScript里的所有数字都是浮点数或者大整数 。 这些浮点数的类型 是 number , 而大整数的类型则是 bigint 。 除了支持十进制和十六进制字面量, TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。 1. let0 码力 | 683 页 | 6.27 MB | 1 年前3
TypeScript Handbook(中文版)
),并且有一个可选数量的感叹号做为结尾(通 过 enthusiasmLevel )。 若我们这样写,这个组件大 至会渲染成 Hello Daniel!!!。 如果没指定 enthusiasmLevel , 组件将默认显示一个感叹号。 若 enthusiasmLevel 为 0 让我们看一些例子。 外部模块 在Node.js里大部分工作是通过加载一个或多个模块实现的。 我们可以使用顶级 的 export 声明来为每个模块都定义一个 .d.ts 文件,但最好还是写在一个大 的 .d.ts 文件里。 我们使用与构造一个外部命名空间相似的方法,但是这里使 用 module 关键字并且把名字用引号括起来,方便之后 import 。 例如: node.d.ts (simplified getObject(done: (data: any, elapsedTime?: number) => void): void } 这里有一种特殊的意义: done 回调函数可能以1个参数或2个参数调用。 代码大 概的意思是说这个回调函数不在乎是否有 elapsedTime 参数, 但是不需要把这个 参数当成可选参数来达到此目的 -- 因为总是允许提供一个接收较少参数的回调函 数。 应该写出回调函数的非可选参数:0 码力 | 557 页 | 7.48 MB | 1 年前3
共 7 条
- 1













