Hello 算法 1.1.0 TypeScript版仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” ——邓俊辉,清华大学计算机系教授 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 初识算法 hello‑algo.com 15 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.2.0 简体中文 TypeScript 版仍有许多错误,恳请各位老师和同学批评 指正。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。 动画在 PDF 内的展示效果受限,可访问 www.hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读!” ——邓俊辉,清华大学计算机系教授 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 初识算法 www.hello‑algo.com 15 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为拼装积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。0 码力 | 383 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0b5 TypeScript 版你可以更加自如地应对刷题和阅读文献,逐步构建起完整的知识体系。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo 仓库。动画在 PDF 内的 展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 推荐语 “一本通俗易懂的数据结构与算法入门书,引导读者手脑并用地学习,强烈推荐算法初学者阅读。” ——邓俊辉,清华大学计算机系教授 hello‑algo.com 13 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便使得算法高效运行。 数据结构设计是一个充满权衡的过程。如果想要在某方面取得提升,往往需要在另一方面作出妥协。下面举 两个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 章 初识算法 hello‑algo.com 14 图 1‑5 拼装积木 两者的详细对应关系如表 1‑1 所示。 表 1‑1 将数据结构与算法类比为积木 数据结构与算法 拼装积木 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供多种编程语言的实现。0 码力 | 378 页 | 30.70 MB | 1 年前3
TypeScript 4.0 使用手册
不需要改变就可以移植到浏览器里。 首先,安装Browserify,tsify和vinyl-source-stream。 tsify是Browserify的一个插件, 就像gulp-typescript一样,它能够访问TypeScript编译器。 vinyl-source-stream会将 Browserify的输出文件适配成gulp能够解析的格式,它叫做vinyl。 1. npm install --save-dev ; 8. export type DECREMENT_ENTHUSIASM = typeof DECREMENT_ENTHUSIASM; 这里的 const / type 模式允许我们以容易访问和重构的方式使用TypeScript的字符串字面量类 型。 接下来,我们创建一些actions以及创建这些actions的函数, src/actions/index.tsx 。 1. import 类型的东西,你将不能够在其上调用 toLowerCase() 。 越普通意味着更少的利用类型,但是 any 比较特殊,它是最普通的类型但是允许你在上面做任何事 情。 也就是说你可以在上面调用,构造它,访问它的属性等等。 记住,当你使用 any 时,你会失 去大多数TypeScript提供的错误检查和编译器支持。 如果你还是决定使用 Object 和 {} ,你应该选择 {} 。 虽说它们基本一样,但是从技术角度上0 码力 | 683 页 | 6.27 MB | 1 年前3
TypeScript Handbook(中文版)
js的设置不需要改变就可以移植到浏览器里。 首先,安装Browserify,tsify和vinyl-source-stream。 tsify是Browserify的一个插 件,就像gulp-typescript一样,它能够访问TypeScript编译器。 vinyl-source-stream 会将Browserify的输出文件适配成gulp能够解析的格式,它叫做vinyl。 npm install --save-dev DECREMENT_ENTHUSIASM = typeof DECREMENT_ENTHUSIASM; TypeScript Handbook(中文版) 79 React 这里的 const / type 模式允许我们以容易访问和重构的方式使用TypeScript的字 符串字面量类型。 接下来,我们创建一些actions以及创建这些actions的函 数, src/actions/index.tsx 。 import 类型的东西,你将不能够在其上调用 toLowerCase() 。 越普通意味着更少的利用类型,但是 any 比较特殊,它是最普通的类型但是允许 你在上面做任何事情。 也就是说你可以在上面调用,构造它,访问它的属性等等。 记住,当你使用 any 时,你会失去大多数TypeScript提供的错误检查和编译器支 持。 如果你还是决定使用 Object 和 {} ,你应该选择 {} 。 虽说它们基本一样,但0 码力 | 557 页 | 7.48 MB | 1 年前3
Hello 算法 1.0.0b1 TypeScript 版空间占用尽可能小,节省计算机内存。 ‧ 数据操作尽量快,包括数据访问、添加、删除、更新等。 1. 引言 hello‑algo.com 10 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构的设计是一个充满权衡的过程,这意味着如果获得某方面的优势,则往往需要在另一方面做出妥协。 例如,链表相对于数组,数据添加删除操作更加方便,但牺牲了数据的访问速度;图相对于链表,提供了更多 的逻辑信息,但需要占用更多的内存空间。 往相差很 大。 Figure 1‑2. 数据结构与算法的关系 如果将「LEGO 乐高」类比到「数据结构与算法」,那么可以得到下表所示的对应关系。 数据结构与算法 LEGO 乐高 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 1. 引言 hello‑algo.com 11 � 约定俗成的简称 ,每轮中的 function() 都返回并释放了栈帧空间,因此空间复杂度仍为 ?(1) 。而递归函数 recur() 在运行中会同时存 2. 复杂度分析 hello‑algo.com 29 在 ? 个未返回的 recur() ,从而使用 ?(?) 的栈帧空间。 function constFunc(): number { // do something return 0; } /* 循环 O(1)0 码力 | 186 页 | 14.71 MB | 1 年前3
TypeScript 类型系统我目前的研究方向 24 目标:基于静态分析寻找脆弱的Node.js代码 需要做的: 1. 改造TypeScript编译器 2. 搭建TypeScript静态分析框架 3. 设计实现基于静态污点分析的漏洞检测技术 4. 设计实现面向Node.js应用的安全测试框架 Q & A0 码力 | 25 页 | 1.27 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 TypeScript 版www.hello‑algo.com 15 圖 1‑5 拼裝積木 兩者的詳細對應關係如表 1‑1 所示。 表 1‑1 將資料結構與演算法類比為拼裝積木 資料結構與演算法 拼裝積木 輸入資料 未拼裝的積木 資料結構 積木組織形式,包括形狀、大小、連線方式等 演算法 把積木拼成目標形態的一系列操作步驟 輸出資料 積木模型 值得說明的是,資料結構與演算法是獨立於程式語言的。正因如此,本書得以提供基於多種程式語言的實 至函式返回後才會被釋放。因此, 遞迴通常比迭代更加耗費記憶體空間。 ‧ 遞迴呼叫函式會產生額外的開銷。因此遞迴通常比迴圈的時間效率更低。 如圖 2‑4 所示,在觸發終止條件前,同時存在 ? 個未返回的遞迴函式,遞迴深度為 ? 。 第 2 章 複雜度分析 www.hello‑algo.com 24 圖 2‑4 遞迴呼叫深度 在實際中,程式語言允許的遞迴深度通常是有限的,過深的遞迴可能導致堆疊溢位錯誤。 bubbleSort(nums: number[]): number { let count = 0; // 計數器 // 外迴圈:未排序區間為 [0, i] for (let i = nums.length - 1; i > 0; i--) { // 內迴圈:將未排序區間 [0, i] 中的最大元素交換至該區間的最右端 for (let j = 0; j < i; j++) { if (nums[j]0 码力 | 384 页 | 18.80 MB | 10 月前3
共 8 条
- 1













