Hello 算法 1.1.0 TypeScript版4.3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.5 小结 . . . 到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感 问题是明确的,包含清晰的输入和输出定义。 ‧ 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.2.0 简体中文 TypeScript 版4.3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.5 小结 . . . 到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 数据结构(data structure)是组织和存储数据的方式,涵盖数据内容、数据之间关系和数据操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可0 码力 | 383 页 | 18.49 MB | 10 月前3
Hello 算法 1.0.0b5 TypeScript 版终得到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使我们能够通过编程将 数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题转 移到计算机上,以更高效的方式解决各种复杂问题。 � 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,这本书 问题是明确的,包含清晰的输入和输出定义。 ‧ 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 「数据结构 data structure」是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量减少,节省计算机内存。 第 1 章 初识算法 hello‑algo.com 13 ‧ 数据操 取得提升,往往需要在另一方面作出妥协。下面举 两个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 1.2.3 数据结构与算法的关系 如图 1‑4 所示,数据结构与算法高度相关、紧密结合,具体表现以下三个方面。 ‧ 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及用于操作数据的方法。0 码力 | 378 页 | 30.70 MB | 1 年前3
Hello 算法 1.0.0b1 TypeScript 版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3. 数据结构简介 37 3.1. 数据与内存 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.2. 数据结构分类 . 内容结构 本书主要内容有: ‧ 复杂度分析:数据结构与算法的评价维度、算法效率的评估方法。时间复杂度、空间复杂度,包括推算 方法、常见类型、示例等。 ‧ 数据结构:常用的基本数据类型,数据在内存中的存储方式、数据结构分类方法。数组、链表、栈、队列、 散列表、树、堆、图等数据结构,内容包括定义、优劣势、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:查找算法、排序算法、搜索与回溯、 是一个已排序的「数组」;而从算法角度,我们可将上述查字典的一系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 更加高效地解决各式各样的复杂问题。 � 读到这里,如果你感到对数据结构、算法、数组、二分查找等此类概念一知半解,那么就太好0 码力 | 186 页 | 14.71 MB | 1 年前3
TypeScript 4.0 使用手册
更普通。 TypeScript提供了一些检查来保证安全以及帮助分析你的程序。 当你将代码转换为了TypeScript 后,你可以启用这些检查来帮助你获得高度安全性。 在某些情况下TypeScript没法确定某些值的类型。 那么TypeScript会使用 any 类型代替。 这 对代码转换来讲是不错,但是使用 any 意味着失去了类型安全保障,并且你得不到工具的支持。 你 可以使用 noImplicitAny as 语法断言是被允许的。 你可能已经注意到了,我们使用 let 关键字来代替大家所熟悉的JavaScript关键字 var 。 let 是ES2015引入的关键字,它比 var 更加安全,因此被看做是声明变量的标准方式。 我们会 在以后详细介绍它,很多常见的问题都可以通过使用 let 来解决,所以尽可能地使用 let 来代 替 var 吧。 我们很容易会认为 Number 因为JavaScript里广 泛地使用匿名对象,例如函数表达式和对象字面量,所以使用结构类型系统来描述这些类型比使用名义 类型系统更好。 TypeScript的类型系统允许某些在编译阶段无法确认其安全性的操作。当一个类型系统具此属性时, 被当做是“不可靠”的。TypeScript允许这种不可靠行为的发生是经过仔细考虑的。通过这篇文章,我 们会解释什么时候会发生这种情况和其有利的一面。 Ty0 码力 | 683 页 | 6.27 MB | 1 年前3
TypeScript Handbook(中文版)
TypeScript提供了一些检查来保证安全以及帮助分析你的程序。 当你将代码转换为 了TypeScript后,你可以启用这些检查来帮助你获得高度安全性。 没有隐式的 any 在某些情况下TypeScript没法确定某些值的类型。 那么TypeScript会使用 any 类型 代替。 这对代码转换来讲是不错,但是使用 any 意味着失去了类型安全保障,并 且你得不到工具的支持。 你可以使用 这意味着虽然程序会检查类型,但是你却可以使用 y 做 任何事情,就比如: let f:(x: T) => T = y => y() + y.foo.bar; 这个例子实际上并不是类型安全的。 在TypeScript 2.4里,右手边的函数会隐式地获得类型参数,并且 y 的类型会被推 断为那个类型参数的类型。 TypeScript Handbook(中文版) 103 TypeScript TypeScript加入的新检查项为了避免不兼容现有项目通常都是默认关闭的。虽然避 免不兼容是好事,但这个策略的一个弊端则是使配置最高类型安全越来越复杂,这 么做每次TypeScript版本发布时都需要显示地加入新选项。有了 --strict 编译选 项,就可以选择最高级别的类型安全(了解随着更新版本的编译器增加了增强的类 型检查特性可能会报新的错误)。 新的 --strict 编译器选项包含了一些建议配置的类型检查选项。具体来说,指 0 码力 | 557 页 | 7.48 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 TypeScript 版} } return -1; } 值得說明的是,我們在實際中很少使用最佳時間複雜度,因為通常只有在很小機率下才能達到,可能會帶來 一定的誤導性。而最差時間複雜度更為實用,因為它給出了一個效率安全值,讓我們可以放心地使用演算 法。 從上述示例可以看出,最差時間複雜度和最佳時間複雜度只出現於“特殊的資料分佈”,這些情況的出現機率 可能很小,並不能真實地反映演算法執行效率。相比之下,平均時間複雜度可以體現演算法在隨機輸入資料 (nums[i] === target) { return i; } } return -1; } 7. 擴容陣列 在複雜的系統環境中,程式難以保證陣列之後的記憶體空間是可用的,從而無法安全地擴展陣列容量。因此 在大多數程式語言中,陣列的長度是不可變的。 如果我們希望擴容陣列,則需重新建立一個更大的陣列,然後把原陣列元素依次複製到新陣列。這是一個 ?(?) 的操作,在陣列很大的情況下非常耗時。程式碼如下所示: P 已經從鏈結串列中刪除了,此時節點 P 指向哪裡都不會對該鏈結串列產生影響。 從資料結構與演算法(做題)的角度看,不斷開沒有關係,只要保證程式的邏輯是正確的就行。從標準庫的 角度看,斷開更加安全、邏輯更加清晰。如果不斷開,假設被刪除節點未被正常回收,那麼它會影響後繼節 點的記憶體回收。 Q:在鏈結串列中插入和刪除操作的時間複雜度是 ?(1) 。但是增刪之前都需要 ?(?) 的時間查詢元素,那0 码力 | 384 页 | 18.80 MB | 10 月前3
TypeScript 类型系统js代码 需要做的: 1. 改造TypeScript编译器 2. 搭建TypeScript静态分析框架 3. 设计实现基于静态污点分析的漏洞检测技术 4. 设计实现面向Node.js应用的安全测试框架 Q & A0 码力 | 25 页 | 1.27 MB | 1 年前3
共 8 条
- 1













