 Hello 算法 1.2.0 繁体中文 JavaScript 版你邁入資料結構與演算法的知識殿堂。 1.2 演算法是什麼 1.2.1 演算法定義 演算法(algorithm)是在有限時間內解決特定問題的一組指令或操作步驟,它具有以下特性。 ‧ 問題是明確的,包含清晰的輸入和輸出定義。 ‧ 具有可行性,能夠在有限步驟、時間和記憶體空間下完成。 ‧ 各步驟都有確定的含義,在相同的輸入和執行條件下,輸出始終相同。 1.2.2 資料結構定義 資料結構(data 執行效率可能相差很大,選擇合適的資料結構是關鍵。 圖 1‑4 資料結構與演算法的關係 資料結構與演算法猶如圖 1‑5 所示的拼裝積木。一套積木,除了包含許多零件之外,還附有詳細的組裝說明 書。我們按照說明書一步步操作,就能組裝出精美的積木模型。 第 1 章 初識演算法 www.hello‑algo.com 15 圖 1‑5 拼裝積木 兩者的詳細對應關係如表 1‑1 所示。 表 1‑1 將資料結構與演算法類比為拼裝積木 資料結構與演算法 拼裝積木 輸入資料 未拼裝的積木 資料結構 積木組織形式,包括形狀、大小、連線方式等 演算法 把積木拼成目標形態的一系列操作步驟 輸出資料 積木模型 值得說明的是,資料結構與演算法是獨立於程式語言的。正因如此,本書得以提供基於多種程式語言的實 現。 約定俗成的簡稱 在實際討論時,我們通常會將“資料結構與演算法”簡稱為“演算法”。比如眾所周知的 LeetCode0 码力 | 379 页 | 18.78 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 JavaScript 版你邁入資料結構與演算法的知識殿堂。 1.2 演算法是什麼 1.2.1 演算法定義 演算法(algorithm)是在有限時間內解決特定問題的一組指令或操作步驟,它具有以下特性。 ‧ 問題是明確的,包含清晰的輸入和輸出定義。 ‧ 具有可行性,能夠在有限步驟、時間和記憶體空間下完成。 ‧ 各步驟都有確定的含義,在相同的輸入和執行條件下,輸出始終相同。 1.2.2 資料結構定義 資料結構(data 執行效率可能相差很大,選擇合適的資料結構是關鍵。 圖 1‑4 資料結構與演算法的關係 資料結構與演算法猶如圖 1‑5 所示的拼裝積木。一套積木,除了包含許多零件之外,還附有詳細的組裝說明 書。我們按照說明書一步步操作,就能組裝出精美的積木模型。 第 1 章 初識演算法 www.hello‑algo.com 15 圖 1‑5 拼裝積木 兩者的詳細對應關係如表 1‑1 所示。 表 1‑1 將資料結構與演算法類比為拼裝積木 資料結構與演算法 拼裝積木 輸入資料 未拼裝的積木 資料結構 積木組織形式,包括形狀、大小、連線方式等 演算法 把積木拼成目標形態的一系列操作步驟 輸出資料 積木模型 值得說明的是,資料結構與演算法是獨立於程式語言的。正因如此,本書得以提供基於多種程式語言的實 現。 約定俗成的簡稱 在實際討論時,我們通常會將“資料結構與演算法”簡稱為“演算法”。比如眾所周知的 LeetCode0 码力 | 379 页 | 18.78 MB | 10 月前3
 JavaScript Promiseの本 v1js等JavaScriptでのコールバック関数の第一引数には Error オブジェクトを渡す というルールを用いるケースがあります。 このようにコールバックでの非同期処理もルールが統一されていた場合、コールバック関 数の書き方が明確になります。 しかし、これはあくまでコーディングルールであるため、異な る書き方をしても決して間違いではありません。 Promiseでは、このような非同期に対するオブジェクトとルールを仕様化して、 と、 その promiseオブジェクトの状態はそれ以降変化することはなくなります。 つまり、PromiseはEvent等とは違い、 .then で登録した関数が呼ばれるのは1回限りとい うことが明確になっています。 また、FulfilledとRejectedのどちらかの状態であることをSettled(不変の)と表現することが あります。 Settled resolve(成功) または reject(失敗) Promiseは常に非同期で実行されることが保証されているため、 setTimeout のような明 示的に非同期処理にするためのコードが不要となることが分かります。 Promise#then 先ほどの章でPromiseの基本となるインスタンスメソッドである then と catch の使い方 を説明しました。 その中で .then().catch() とメソッドチェーンで繋げて書いていたことからも分かるよう0 码力 | 115 页 | 1.06 MB | 1 年前3 JavaScript Promiseの本 v1js等JavaScriptでのコールバック関数の第一引数には Error オブジェクトを渡す というルールを用いるケースがあります。 このようにコールバックでの非同期処理もルールが統一されていた場合、コールバック関 数の書き方が明確になります。 しかし、これはあくまでコーディングルールであるため、異な る書き方をしても決して間違いではありません。 Promiseでは、このような非同期に対するオブジェクトとルールを仕様化して、 と、 その promiseオブジェクトの状態はそれ以降変化することはなくなります。 つまり、PromiseはEvent等とは違い、 .then で登録した関数が呼ばれるのは1回限りとい うことが明確になっています。 また、FulfilledとRejectedのどちらかの状態であることをSettled(不変の)と表現することが あります。 Settled resolve(成功) または reject(失敗) Promiseは常に非同期で実行されることが保証されているため、 setTimeout のような明 示的に非同期処理にするためのコードが不要となることが分かります。 Promise#then 先ほどの章でPromiseの基本となるインスタンスメソッドである then と catch の使い方 を説明しました。 その中で .then().catch() とメソッドチェーンで繋げて書いていたことからも分かるよう0 码力 | 115 页 | 1.06 MB | 1 年前3
 JavaScript Promiseの本 v2js等JavaScriptでのコールバック関数の第一引数には Error オブジェクトを渡す というルールを用いるケースがあります。 このようにコールバックでの非同期処理もルールが統一されていた場合、コールバック関 数の書き方が明確になります。 しかし、これはあくまでコーディングルールであるため、異な る書き方をしても決して間違いではありません。 Promiseでは、このような非同期に対するオブジェクトとルールを仕様化して、 と、 その promiseオブジェクトの状態はそれ以降変化することはなくなります。 つまり、PromiseはEvent等とは違い、 .then で登録した関数が呼ばれるのは1回限りとい うことが明確になっています。 また、FulfilledとRejectedのどちらかの状態であることをSettled(不変の)と表現することが あります。 Settled resolve(成功) または reject(失敗) Promiseは常に非同期で実行されることが保証されているため、 setTimeout のような明 示的に非同期処理にするためのコードが不要となることが分かります。 Promise#then 先ほどの章でPromiseの基本となるインスタンスメソッドである then と catch の使い方 を説明しました。 その中で .then().catch() とメソッドチェーンで繋げて書いていたことからも分かるよう0 码力 | 137 页 | 1.17 MB | 1 年前3 JavaScript Promiseの本 v2js等JavaScriptでのコールバック関数の第一引数には Error オブジェクトを渡す というルールを用いるケースがあります。 このようにコールバックでの非同期処理もルールが統一されていた場合、コールバック関 数の書き方が明確になります。 しかし、これはあくまでコーディングルールであるため、異な る書き方をしても決して間違いではありません。 Promiseでは、このような非同期に対するオブジェクトとルールを仕様化して、 と、 その promiseオブジェクトの状態はそれ以降変化することはなくなります。 つまり、PromiseはEvent等とは違い、 .then で登録した関数が呼ばれるのは1回限りとい うことが明確になっています。 また、FulfilledとRejectedのどちらかの状態であることをSettled(不変の)と表現することが あります。 Settled resolve(成功) または reject(失敗) Promiseは常に非同期で実行されることが保証されているため、 setTimeout のような明 示的に非同期処理にするためのコードが不要となることが分かります。 Promise#then 先ほどの章でPromiseの基本となるインスタンスメソッドである then と catch の使い方 を説明しました。 その中で .then().catch() とメソッドチェーンで繋げて書いていたことからも分かるよう0 码力 | 137 页 | 1.17 MB | 1 年前3
 2019-2021 美团技术年货 前端篇public_header_files 和 private_header_ files,相应的头文件都会被设置为 Project 类型。 ● 在 Pods/Headers/Public 中 会 保 存 所 有 被 声 明 为 public_header_ files 的头文件。 ● 在 Pods/Headers/Private 中会保存所有头文件,不论是 public_header_ files 或者 private_header_files 2021年美团技术年货 从预编译的角度理解 Swift 与 Objective-C 及 混编机制 作者:思琦 旭陶 霜叶 写在前面 本文涉及面较广,篇幅较长,阅读完需要耗费一定的时间与精力,如果你带有较为明 确的阅读目的,可以参考以下建议完成阅读: ● 如果你对预编译的理论知识已经了解,可以直接从【原来它是这样的】的章节 开始进行阅读,这会让你对预编译有一个更直观的了解。 ● 如果你对 Search public_header_files 和 private_head- er_files,相应的头文件都会被设置为 Project 类型。 ○ 在 Pods/Headers/Public 中 会 保 存 所 有 被 声 明 为 public_header_ files 的头文件。 ○ 在 Pods/Headers/Private 中 会 保 存 所 有 头 文 件, 不 论 是 public_ header_files0 码力 | 738 页 | 50.29 MB | 1 年前3 2019-2021 美团技术年货 前端篇public_header_files 和 private_header_ files,相应的头文件都会被设置为 Project 类型。 ● 在 Pods/Headers/Public 中 会 保 存 所 有 被 声 明 为 public_header_ files 的头文件。 ● 在 Pods/Headers/Private 中会保存所有头文件,不论是 public_header_ files 或者 private_header_files 2021年美团技术年货 从预编译的角度理解 Swift 与 Objective-C 及 混编机制 作者:思琦 旭陶 霜叶 写在前面 本文涉及面较广,篇幅较长,阅读完需要耗费一定的时间与精力,如果你带有较为明 确的阅读目的,可以参考以下建议完成阅读: ● 如果你对预编译的理论知识已经了解,可以直接从【原来它是这样的】的章节 开始进行阅读,这会让你对预编译有一个更直观的了解。 ● 如果你对 Search public_header_files 和 private_head- er_files,相应的头文件都会被设置为 Project 类型。 ○ 在 Pods/Headers/Public 中 会 保 存 所 有 被 声 明 为 public_header_ files 的头文件。 ○ 在 Pods/Headers/Private 中 会 保 存 所 有 头 文 件, 不 论 是 public_ header_files0 码力 | 738 页 | 50.29 MB | 1 年前3
 [试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础 ECMAScript 变量也可以用“$”或“_”符号开头; � ECMAScript 变量分为全局变量和局部变量,且二者的定义方式、作用域及使用用法 有明显区别。 下 面 , 来 看 一 个 声 明 ECMAScript 变 量 的 代 码 示 例 ( 详 见 源 代 码 ch02 目 录 中 23 第 2 章 ECMAScript 语法基础 ch02-js-variable.html log(v_func_undefined); 32 15 天学会 JavaScript(视频教学版) 04 页 面 效 果 如 图 2.9 所 示 。 当 函 数 未 定 义 明 确 的 返 回 值 时 , 函 数 表 达 式 变 量 (v_func_undefined)获取的返回值也是“undefined”,如图 2.9 中箭头所指的结果所示。 以上就是关于 Undefined0 码力 | 52 页 | 3.83 MB | 1 年前3 [试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础 ECMAScript 变量也可以用“$”或“_”符号开头; � ECMAScript 变量分为全局变量和局部变量,且二者的定义方式、作用域及使用用法 有明显区别。 下 面 , 来 看 一 个 声 明 ECMAScript 变 量 的 代 码 示 例 ( 详 见 源 代 码 ch02 目 录 中 23 第 2 章 ECMAScript 语法基础 ch02-js-variable.html log(v_func_undefined); 32 15 天学会 JavaScript(视频教学版) 04 页 面 效 果 如 图 2.9 所 示 。 当 函 数 未 定 义 明 确 的 返 回 值 时 , 函 数 表 达 式 变 量 (v_func_undefined)获取的返回值也是“undefined”,如图 2.9 中箭头所指的结果所示。 以上就是关于 Undefined0 码力 | 52 页 | 3.83 MB | 1 年前3
 ECMAScript规范 第三版 中文版内置对象指 的是由 ECMAScript 实现提供的,独立于宿主环境的,并在 ECMAScript 程序 刚开始执行时就出现的对象。这篇规范定义了标准内置对象,一个 ECMAScript 实现也可能指 明并定义其它的内置对象。所有的内置对象都是本地对象。 4.3.8 宿主对象 宿主对象指的是由 ECMAScript 实现提供的,使 ECMAScript 的执行环境变得完备的对象。 所有非本地对象都是宿主对象。 this 值。若调用上下文不存在,就把它当作全局对象,进行作用 域链和变量的初始化及 this 值的决定。 • 被创建并初始化的作用域链与调用上下文包含相同的对象,顺序也一样;使用 with 声 明或 catch 语句给调用上下文的作用域链添加的对象也包括在内。 • 进行变量初始化时,使用调用上下文的可变对象,属性特征为空。 • this 值与调用上下文的 this 值相同。 10.20 码力 | 58 页 | 563.06 KB | 1 年前3 ECMAScript规范 第三版 中文版内置对象指 的是由 ECMAScript 实现提供的,独立于宿主环境的,并在 ECMAScript 程序 刚开始执行时就出现的对象。这篇规范定义了标准内置对象,一个 ECMAScript 实现也可能指 明并定义其它的内置对象。所有的内置对象都是本地对象。 4.3.8 宿主对象 宿主对象指的是由 ECMAScript 实现提供的,使 ECMAScript 的执行环境变得完备的对象。 所有非本地对象都是宿主对象。 this 值。若调用上下文不存在,就把它当作全局对象,进行作用 域链和变量的初始化及 this 值的决定。 • 被创建并初始化的作用域链与调用上下文包含相同的对象,顺序也一样;使用 with 声 明或 catch 语句给调用上下文的作用域链添加的对象也包括在内。 • 进行变量初始化时,使用调用上下文的可变对象,属性特征为空。 • this 值与调用上下文的 this 值相同。 10.20 码力 | 58 页 | 563.06 KB | 1 年前3
 廖雪峰JavaScript教程y; 4. alert(x); 5. y = 'Bob'; 6. } 由于JavaScript的这一怪异的“特性”,我们在函数内部定义变量时,请严格遵守“在函数内部首先申 明所有变量”这一规则。最常见的做法是用一个 var 申明函数内部用到的所有变量: 1. function foo() { 2. var 3. x = 1, // x初始化为1 ['JavaScript', 'Java', 'Python', 'Lisp'] 9. }; 10. 11. JSON.stringify(xiaoming); // '{"name":"小 明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript"0 码力 | 264 页 | 2.81 MB | 10 月前3 廖雪峰JavaScript教程y; 4. alert(x); 5. y = 'Bob'; 6. } 由于JavaScript的这一怪异的“特性”,我们在函数内部定义变量时,请严格遵守“在函数内部首先申 明所有变量”这一规则。最常见的做法是用一个 var 申明函数内部用到的所有变量: 1. function foo() { 2. var 3. x = 1, // x初始化为1 ['JavaScript', 'Java', 'Python', 'Lisp'] 9. }; 10. 11. JSON.stringify(xiaoming); // '{"name":"小 明","age":14,"gender":true,"height":1.65,"grade":null,"middle-school":"\"W3C\" Middle School","skills":["JavaScript"0 码力 | 264 页 | 2.81 MB | 10 月前3
 阮一峰 《ECMAScript 6入门》 第三版...; ... } 块级作用域与函数声明 函数能不能在块级作用域之中声明?这是一个相当令人混淆的问题。 ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声 明。 let 和 const 命令 33 // 情况一 if (true) { function f() {} } // 情况二 try { function f() {} } x=1; y=2 let [x = y, y = 1] = []; // ReferenceError 上面最后一个表达式之所以会报错,是因为 x 用到默认值 y 时, y 还没有声 明。 对象的解构赋值 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" }; foo // "aaa" bar // ES5 完全不同。 new Foo(); // ReferenceError class Foo {} 上面代码中, Foo 类使用在前,定义在后,这样会报错,因为 ES6 不会把类的声 明提升到代码头部。这种规定的原因与下文要提到的继承有关,必须保证子类在父 类之后定义。 { let Foo = class {}; class Bar extends Foo { }0 码力 | 679 页 | 2.66 MB | 1 年前3 阮一峰 《ECMAScript 6入门》 第三版...; ... } 块级作用域与函数声明 函数能不能在块级作用域之中声明?这是一个相当令人混淆的问题。 ES5 规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声 明。 let 和 const 命令 33 // 情况一 if (true) { function f() {} } // 情况二 try { function f() {} } x=1; y=2 let [x = y, y = 1] = []; // ReferenceError 上面最后一个表达式之所以会报错,是因为 x 用到默认值 y 时, y 还没有声 明。 对象的解构赋值 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" }; foo // "aaa" bar // ES5 完全不同。 new Foo(); // ReferenceError class Foo {} 上面代码中, Foo 类使用在前,定义在后,这样会报错,因为 ES6 不会把类的声 明提升到代码头部。这种规定的原因与下文要提到的继承有关,必须保证子类在父 类之后定义。 { let Foo = class {}; class Bar extends Foo { }0 码力 | 679 页 | 2.66 MB | 1 年前3
 JavaScript Promise迷你书(中文版)际编码中不需要调 用 setTimeout 来自己实现异步调用。 Promise#then 在前面的章节里我们对Promise基本的实例方法 then 和 catch 的使用方法进行了说 明。 这其中,我想大家已经认识了 .then().catch() 这种链式方法的写法了,其实在Promise 里可以将任意个方法连在一起作为一个方法链(method chain)。 promise可以写成方法链的形式0 码力 | 112 页 | 1010.02 KB | 1 年前3 JavaScript Promise迷你书(中文版)际编码中不需要调 用 setTimeout 来自己实现异步调用。 Promise#then 在前面的章节里我们对Promise基本的实例方法 then 和 catch 的使用方法进行了说 明。 这其中,我想大家已经认识了 .then().catch() 这种链式方法的写法了,其实在Promise 里可以将任意个方法连在一起作为一个方法链(method chain)。 promise可以写成方法链的形式0 码力 | 112 页 | 1010.02 KB | 1 年前3
 Hello 算法 1.1.0 JavaScript版的单位价值最高,因此替 换后的总价值一定大于 res 。这与 res 是最优解矛盾,说明最优解中必须包含物品 ? 。 对于该解中的其他物品,我们也可以构建出上述矛盾。总而言之,单位价值更大的物品总是更优选择,这说 明贪心策略是有效的。 如图 15‑6 所示,如果将物品重量和物品单位价值分别看作一张二维图表的横轴和纵轴,则分数背包问题可转 化为“求在有限横轴区间下围成的最大面积”。这个类比可以帮助我们从几何角度理解贪心策略的有效性。0 码力 | 379 页 | 18.46 MB | 1 年前3 Hello 算法 1.1.0 JavaScript版的单位价值最高,因此替 换后的总价值一定大于 res 。这与 res 是最优解矛盾,说明最优解中必须包含物品 ? 。 对于该解中的其他物品,我们也可以构建出上述矛盾。总而言之,单位价值更大的物品总是更优选择,这说 明贪心策略是有效的。 如图 15‑6 所示,如果将物品重量和物品单位价值分别看作一张二维图表的横轴和纵轴,则分数背包问题可转 化为“求在有限横轴区间下围成的最大面积”。这个类比可以帮助我们从几何角度理解贪心策略的有效性。0 码力 | 379 页 | 18.46 MB | 1 年前3
共 14 条
- 1
- 2













