Hello 算法 1.2.0 繁体中文 TypeScript 版如果把具體的工作技能比作是武功的“招式”的話,那麼基礎科目應該更像是“內功”。 我認為學演算法(以及其他基礎科目)的意義不是在於在工作中從零實現它,而是基於學到的知識,在解決 問題時能夠作出專業的反應和判斷,從而提升工作的整體質量。舉一個簡單例子,每種程式語言都內建了排 序函式: ‧ 如果我們沒有學過資料結構與演算法,那麼給定任何資料,我們可能都塞給這個排序函式去做了。執行 順暢、效能不錯,看上去並沒有什麼問題。 可接受的,通常需要使用動態規劃或貪婪演算法等來解決。 5. 對數階 ?(log ?) 與指數階相反,對數階反映了“每輪縮減到一半”的情況。設輸入資料大小為 ? ,由於每輪縮減到一半,因 此迴圈次數是 log2 ? ,即 2? 的反函式。 圖 2‑12 和以下程式碼模擬了“每輪縮減到一半”的過程,時間複雜度為 ?(log2 ?) ,簡記為 ?(log ?) : // === File: time_complexity.ts === hello‑algo.com 56 3.3.1 原碼、一補數和二補數 在上一節的表格中我們發現,所有整數型別能夠表示的負數都比正數多一個,例如 byte 的取值範圍是 [−128, 127] 。這個現象比較反直覺,它的內在原因涉及原碼、一補數、二補數的相關知識。 首先需要指出,數字是以“二補數”的形式儲存在計算機中的。在分析這樣做的原因之前,首先給出三者的 定義。 ‧ 原碼:我們將數字的二進位制表示的最高位視為符號位,其中0 码力 | 384 页 | 18.80 MB | 10 月前3
Hello 算法 1.1.0 TypeScript版hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 这里,建议有兴趣的读者进一步深入了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.2.0 简体中文 TypeScript 版hello‑algo.com 56 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,首先给出三者的定 义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 这里,建议有兴趣的读者进一步深入了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 字节,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1 所示的公式计算得到该元素的内存地址,从而直接 访问该元素。 第 4 章 数组与链表 www.hello‑algo.com 68 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引为 0 是 合理的。 在数组中访问元素非常高效,我们可以在0 码力 | 383 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0b5 TypeScript 版hello‑algo.com 53 3.3.1 原码、反码和补码 在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 byte 的取值范围是 [−128, 127] 。这个现象比较反直觉,它的内在原因涉及到原码、反码、补码的相关知识。 首先需要指出,数字是以“补码”的形式存储在计算机中的。在分析这样做的原因之前,我们首先给出三者 的定义。 ‧ 原码:我们将数字的二进制表示的最高位视为符号位,其中 建议有兴趣的读者进一步深度了解。 3.3.2 浮点数编码 细心的你可能会发现:int 和 float 长度相同,都是 4 bytes,但为什么 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32‑bit 长度的二进制数为: ?31?30?29 … ?2 所示的公式计算得到该元素的内存地址,从而直 接访问此元素。 第 4 章 数组与链表 hello‑algo.com 64 图 4‑2 数组元素的内存地址计算 观察图 4‑2 ,我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。但从地 址计算公式的角度看,索引的含义本质上是内存地址的偏移量。首个元素的地址偏移量是 0 ,因此它的索引 为 0 也是合理的。 在数组中访问元素是非常高效的,我们可以在0 码力 | 378 页 | 30.70 MB | 1 年前3
Hello 算法 1.0.0b1 TypeScript 版矩阵、张量(维度 ≥ 3 的数组)等; ‧ 基于链表可实现:栈、队列、哈希表、树、堆、图等; 基于数组实现的数据结构也被称为「静态数据结构」,这意味着该数据结构在在被初始化后,长度不可变。相 反地,基于链表实现的数据结构被称为「动态数据结构」,该数据结构在被初始化后,我们也可以在程序运行 中修改其长度。 � 数组与链表是其他所有数据结构的“底层积木”,建议读者一定要多花些时间了解。 3 当然,由于结点需要额外存储指针,因此 链表结点比数组元素占用更大。 综上,我们不能简单地确定哪种实现更加省内存,需要 case‑by‑case 地分析。 5.1.4. 栈典型应用 ‧ 浏览器中的后退与前进、软件中的撤销与反撤销。每当我们打开新的网页,浏览器就将上一个网页执行 入栈,这样我们就可以通过「后退」操作来回到上一页面,后退操作实际上是在执行出栈。如果要同时 支持后退和前进,那么则需要两个栈来配合实现。 ‧0 码力 | 186 页 | 14.71 MB | 1 年前3
TypeScript 4.0 使用手册
) 表示字符串。 1. let name: string = "bob"; 2. name = "smith"; 你还可以使用_模版字符串_,它可以定义多行文本和内嵌表达式。 这种字符串是被反引号包围 (````` ),并且以 ${ expr } 这种形式嵌入表达式 基础类型 介绍 Boolean Number String 基础类型 - 85 - 本文档使用 书栈网 · 来避免完全构建。 想了解更多细节,你可以 去原始的 PR 查看这些改动。 我们强烈建议使用者尝试 useDefineForClassFields ,并在 issues 或下面的评论区域中提供反 馈。 应该碰到编译选项在使用难度上的反馈,这样我们就能够了解如何使迁移变得更容易。 TypeScript 的项目引用功能,为我们提供了一种简单的方法来分解代码库,从而使编译速度更快。 遗憾的是0 码力 | 683 页 | 6.27 MB | 1 年前3
TypeScript Handbook(中文版)
Handbook(中文版) 221 基础类型 let name: string = "bob"; name = "smith"; 你还可以使用模版字符串,它可以定义多行文本和内嵌表达式。 这种字符串是被反 引号包围( ` ),并且以 ${ expr } 这种形式嵌入表达式 let name: string = `Gene`; let age: number = 37; let sentence:0 码力 | 557 页 | 7.48 MB | 1 年前3
共 7 条
- 1













