Hello 算法 1.2.0 繁体中文 TypeScript 版. . . . . . . . . . . . 372 1 第 0 章 前言 Abstract 演算法猶如美妙的交響樂,每一行程式碼都像韻律般流淌。 願這本書在你的腦海中輕輕響起,留下獨特而深刻的旋律。 第 0 章 前言 www.hello‑algo.com 2 0.1 關於本書 本專案旨在建立一本開源、免費、對新手友好的資料結構與演算法入門教程。 ‧ 全書採用動畫圖解,內容清 有限,可以先跳過。 ‧ 專業術語會使用黑體(紙質版和 PDF 版)或新增下劃線(網頁版),例如陣列(array)。建議記住它們, 以便閱讀文獻。 ‧ 重點內容和總結性語句會 加粗,這類文字值得特別關注。 ‧ 有特指含義的詞句會使用“引號”標註,以避免歧義。 ‧ 當涉及程式語言之間不一致的名詞時,本書均以 Python 為準,例如使用 None 來表示“空”。 ‧ 本書部分放棄了程式語言 享你的見解,幫助他人進步。 圖 0‑7 評論區示例 0.2.5 演算法學習路線 從總體上看,我們可以將學習資料結構與演算法的過程劃分為三個階段。 1. 階段一:演算法入門。我們需要熟悉各種資料結構的特點和用法,學習不同演算法的原理、流程、用途 和效率等方面的內容。 2. 階段二:刷演算法題。建議從熱門題目開刷,先積累至少 100 道題目,熟悉主流的演算法問題。初次刷 題時,“知識遺忘”可能是0 码力 | 384 页 | 18.80 MB | 10 月前3
TypeScript Handbook(中文版)
currentValue(); TypeScript Handbook(中文版) 183 TypeScript 1.7 这已经不再是问题 - TypeScript 现在在类的实例方法中, 会将 this 推断为一个特 殊的叫做 this 的类型. this 类型也就写作 this , 可以大致理解为 "方法调 用时点左边的类型". this 类型在描述一些使用了 mixin 风格继承的库 (比如 的灵活性不仅仅局限于其指定了要在逻辑上合并的物理目录列表。它提 供的数组可以包含任意数量的任何名字的目录,不论它们是否存在。这允许编译器 以类型安全的方式处理复杂捆绑(bundles)和运行时的特性,比如条件引入和工程特 定的加载器插件。 设想这样一个国际化的场景,构建工具自动插入特定的路径记号来生成针对不同区 域的捆绑,比如将 #{locale} 做为相对模块路径 ./#{locale}/messages baseCtor.prototype[name]; }); }); } 理解这个例子 代码里首先定义了两个类,它们将做为mixins。 可以看到每个类都只定义了一个特 定的行为或功能。 稍后我们使用它们来创建一个新类,同时具有这两种功能。 TypeScript Handbook(中文版) 429 混入 // Disposable Mixin class Disposable0 码力 | 557 页 | 7.48 MB | 1 年前3
Hello 算法 1.1.0 TypeScript版hello‑algo.com 87 2. Q & A Q:数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响? 存储在栈上和堆上的数组都被存储在连续内存空间内,数据操作效率基本一致。然而,栈和堆具有各自的特 点,从而导致以下不同点。 1. 分配和释放效率:栈是一块较小的内存,分配由编译器自动完成;而堆内存相对更大,可以在代码中动 态分配,更容易碎片化。因此,堆上的分配和释放操作通常比栈上的慢。 2 于扩容是低频操作,因此平均效率更高。 ‧ 基于链表实现的栈可以提供更加稳定的效率表现。 空间效率 在初始化列表时,系统会为列表分配“初始容量”,该容量可能超出实际需求;并且,扩容机制通常是按照特 定倍率(例如 2 倍)进行扩容的,扩容后的容量也可能超出实际需求。因此,基于数组实现的栈可能造成一 定的空间浪费。 然而,由于链表节点需要额外存储指针,因此链表节点占用的空间相对较大。 综上 都需要进行多个步骤的节点操作。 Q:为什么 DFS 遍历二叉树有前、中、后三种顺序,分别有什么用呢? 与顺序和逆序遍历数组类似,前序、中序、后序遍历是三种二叉树遍历方法,我们可以使用它们得到一个特 定顺序的遍历结果。例如在二叉搜索树中,由于节点大小满足 左子节点值 < 根节点值 < 右子节点值 ,因此 我们只要按照“左 → 根 → 右”的优先级遍历树,就可以获得有序的节点序列。 Q:右旋操作是处理失衡节点0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.2.0 简体中文 TypeScript 版hello‑algo.com 87 2. Q & A Q:数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响? 存储在栈上和堆上的数组都被存储在连续内存空间内,数据操作效率基本一致。然而,栈和堆具有各自的特 点,从而导致以下不同点。 1. 分配和释放效率:栈是一块较小的内存,分配由编译器自动完成;而堆内存相对更大,可以在代码中动 态分配,更容易碎片化。因此,堆上的分配和释放操作通常比栈上的慢。 2 于扩容是低频操作,因此平均效率更高。 ‧ 基于链表实现的栈可以提供更加稳定的效率表现。 空间效率 在初始化列表时,系统会为列表分配“初始容量”,该容量可能超出实际需求;并且,扩容机制通常是按照特 定倍率(例如 2 倍)进行扩容的,扩容后的容量也可能超出实际需求。因此,基于数组实现的栈可能造成一 定的空间浪费。 然而,由于链表节点需要额外存储指针,因此链表节点占用的空间相对较大。 综上 都需要进行多个步骤的节点操作。 Q:为什么 DFS 遍历二叉树有前、中、后三种顺序,分别有什么用呢? 与顺序和逆序遍历数组类似,前序、中序、后序遍历是三种二叉树遍历方法,我们可以使用它们得到一个特 定顺序的遍历结果。例如在二叉搜索树中,由于节点大小满足 左子节点值 < 根节点值 < 右子节点值 ,因此 我们只要按照“左 → 根 → 右”的优先级遍历树,就可以获得有序的节点序列。 Q:右旋操作是处理失衡节点0 码力 | 383 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0b5 TypeScript 版个字节表示。对于 2 字节的字符,UTF‑16 编码与 Unicode 码点相等。 ‧ UTF‑32 编码:每个字符都使用 4 个字节。这意味着 UTF‑32 会比 UTF‑8 和 UTF‑16 更占用空间,特 别是对于 ASCII 字符占比较高的文本。 第 3 章 数据结构 hello‑algo.com 60 从存储空间的角度看,使用 UTF‑8 表示英文字符非常高效,因为它仅需 1 个字节;使用 UTF‑16 于扩容是低频操作,因此平均效率更高。 ‧ 基于链表实现的栈可以提供更加稳定的效率表现。 空间效率 在初始化列表时,系统会为列表分配“初始容量”,该容量可能超过实际需求。并且,扩容机制通常是按照特 定倍率(例如 2 倍)进行扩容,扩容后的容量也可能超出实际需求。因此,基于数组实现的栈可能造成一定 的空间浪费。 然而,由于链表节点需要额外存储指针,因此链表节点占用的空间相对较大。 第 50 码力 | 378 页 | 30.70 MB | 1 年前3
Hello 算法 1.0.0b1 TypeScript 版链表实现的栈可以提供 更加稳定的效率表现; 5. 栈与队列 hello‑algo.com 64 空间效率 在初始化列表时,系统会给列表分配“初始容量”,该容量可能超过我们的需求。并且扩容机制一般是按照特 定倍率(比如 2 倍)进行扩容,扩容后的容量也可能超出我们的需求。因此,数组实现栈会造成一定的空间浪 费。 当然,由于结点需要额外存储指针,因此 链表结点比数组元素占用更大。 综上,我们不能简单地确定哪种实现更加省内存,需要0 码力 | 186 页 | 14.71 MB | 1 年前3
TypeScript 4.0 使用手册
sideLength = 10; 16. square.penWidth = 5.0; 先前我们提过,接口能够描述 JavaScript 里丰富的类型。 因为 JavaScript 其动态灵活的特 点,有时你会希望一个对象可以同时具有上面提到的多种类型。 一个例子就是,一个对象可以同时做为函数和对象使用,并带有额外的属性。 1. interface Counter { 2. (start: return new File(zipContents, name); 5. } 许多bundlers工具已经支持依照这些 import 表达式自动地分割输出,因此可以考虑使用这个新特 性并把输出模块目标设置为 esnext 。 TypeScript 2.4现在支持枚举成员变量包含字符串构造器。 1. enum Colors { 2. Red = "RED", 30 码力 | 683 页 | 6.27 MB | 1 年前3
共 7 条
- 1













