Rust语言核心竞争力-庄晓立Run>(t: &T) { t.run(); } fn dynamic_run(r: &Run) { r.run(); } 泛型/Generics,静态分派 http://is.gd/Q2YkAU Trait Object, 动态分派 Static dispatch define internal void @_ZN10static_run21h15769893599831004998E0 码力 | 51 页 | 1.09 MB | 1 年前3
Hello 算法 1.1.0 Rust版的递归树(recursion tree)。 图 2‑6 斐波那契数列的递归树 从本质上看,递归体现了“将问题分解为更小子问题”的思维范式,这种分治策略至关重要。 ‧ 从算法角度看,搜索、排序、回溯、分治、动态规划等许多重要算法策略直接或间接地应用了这种思维 方式。 ‧ 从数据结构角度看,递归天然适合处理链表、树和图的相关问题,因为它们非常适合用分治思想进行分 析。 2.2.3 两者对比 总结以上内容,如表 从索引 ? 开始,向左进行线性遍历,当找到最左边的 target 时返回。 图 10‑5 线性查找重复元素的插入点 此方法虽然可用,但其包含线性查找,因此时间复杂度为 ?(?) 。当数组中存在很多重复的 target 时,该方 法效率很低。 现考虑拓展二分查找代码。如图 10‑6 所示,整体流程保持不变,每轮先计算中点索引 ? ,再判断 target 和 nums[m] 的大小关系,分为以下几种情况。 分治算法递归地将原问题划分为多个相互独立的子问题,直至最小子问题,并在回溯中合并子问题的 解,最终得到原问题的解。 ‧ 动态规划也对问题进行递归分解,但与分治算法的主要区别是,动态规划中的子问题是相互依赖的,在 分解过程中会出现许多重叠子问题。 ‧ 回溯算法在尝试和回退中穷举所有可能的解,并通过剪枝避免不必要的搜索分支。原问题的解由一系 列决策步骤构成,我们可以将每个决策步骤之前的子序列看作一个子问题。 实际上,动态规划常0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版的递归树(recursion tree)。 图 2‑6 斐波那契数列的递归树 从本质上看,递归体现了“将问题分解为更小子问题”的思维范式,这种分治策略至关重要。 ‧ 从算法角度看,搜索、排序、回溯、分治、动态规划等许多重要算法策略直接或间接地应用了这种思维 方式。 ‧ 从数据结构角度看,递归天然适合处理链表、树和图的相关问题,因为它们非常适合用分治思想进行分 析。 2.2.3 两者对比 总结以上内容,如表 从索引 ? 开始,向左进行线性遍历,当找到最左边的 target 时返回。 图 10‑5 线性查找重复元素的插入点 此方法虽然可用,但其包含线性查找,因此时间复杂度为 ?(?) 。当数组中存在很多重复的 target 时,该方 法效率很低。 现考虑拓展二分查找代码。如图 10‑6 所示,整体流程保持不变,每轮先计算中点索引 ? ,再判断 target 和 nums[m] 的大小关系,分为以下几种情况。 分治算法递归地将原问题划分为多个相互独立的子问题,直至最小子问题,并在回溯中合并子问题的 解,最终得到原问题的解。 ‧ 动态规划也对问题进行递归分解,但与分治算法的主要区别是,动态规划中的子问题是相互依赖的,在 分解过程中会出现许多重叠子问题。 ‧ 回溯算法在尝试和回退中穷举所有可能的解,并通过剪枝避免不必要的搜索分支。原问题的解由一系 列决策步骤构成,我们可以将每个决策步骤之前的子序列看作一个子问题。 实际上,动态规划常0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版recursion tree」。 图 2‑6 斐波那契数列的递归树 从本质上看,递归体现了“将问题分解为更小子问题”的思维范式,这种分治策略至关重要。 ‧ 从算法角度看,搜索、排序、回溯、分治、动态规划等许多重要算法策略直接或间接地应用了这种思维 方式。 ‧ 从数据结构角度看,递归天然适合处理链表、树和图的相关问题,因为它们非常适合用分治思想进行分 析。 2.2.3 两者对比 总结以上内容,如表 从索引 ? 开始,向左进行线性遍历,当找到最左边的 target 时返回。 图 10‑5 线性查找重复元素的插入点 此方法虽然可用,但其包含线性查找,因此时间复杂度为 ?(?) 。当数组中存在很多重复的 target 时,该方 法效率很低。 现考虑拓展二分查找代码。如图 10‑6 所示,整体流程保持不变,每轮先计算中点索引 ? ,再判断 target 和 nums[m] 的大小关系,分为以下几种情况。 分治算法递归地将原问题划分为多个相互独立的子问题,直至最小子问题,并在回溯中合并子问题的 解,最终得到原问题的解。 ‧ 动态规划也对问题进行递归分解,但与分治算法的主要区别是,动态规划中的子问题是相互依赖的,在 分解过程中会出现许多重叠子问题。 ‧ 回溯算法在尝试和回退中穷举所有可能的解,并通过剪枝避免不必要的搜索分支。原问题的解由一系 列决策步骤构成,我们可以将每个决策步骤之前的子序列看作一个子问题。 实际上,动态规划常0 码力 | 383 页 | 17.61 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Rust 版的遞迴樹(recursion tree)。 圖 2‑6 費波那契數列的遞迴樹 從本質上看,遞迴體現了“將問題分解為更小子問題”的思維範式,這種分治策略至關重要。 ‧ 從演算法角度看,搜尋、排序、回溯、分治、動態規劃等許多重要演算法策略直接或間接地應用了這種 思維方式。 ‧ 從資料結構角度看,遞迴天然適合處理鏈結串列、樹和圖的相關問題,因為它們非常適合用分治思想進 行分析。 2.2.3 兩者對比 總結以上內容,如表 從索引 ? 開始,向左進行線性走訪,當找到最左邊的 target 時返回。 圖 10‑5 線性查詢重複元素的插入點 此方法雖然可用,但其包含線性查詢,因此時間複雜度為 ?(?) 。當陣列中存在很多重複的 target 時,該方 法效率很低。 現考慮拓展二分搜尋程式碼。如圖 10‑6 所示,整體流程保持不變,每輪先計算中點索引 ? ,再判斷 target 和 nums[m] 的大小關係,分為以下幾種情況。 的子問題,直至最小子問題,並在回溯中合併子問題 的解,最終得到原問題的解。 ‧ 動態規劃也對問題進行遞迴分解,但與分治演算法的主要區別是,動態規劃中的子問題是相互依賴的, 在分解過程中會出現許多重疊子問題。 ‧ 回溯演算法在嘗試和回退中窮舉所有可能的解,並透過剪枝避免不必要的搜尋分支。原問題的解由一 系列決策步驟構成,我們可以將每個決策步驟之前的子序列看作一個子問題。 實際上,動態規劃0 码力 | 388 页 | 18.82 MB | 10 月前3
Rust 语言学习笔记lib crate 和任意多个 bin crate。一个包中必 须有 crate,至少一个,(lib crate 或 bin crate 都可以) 3.通常写 rust 项目时非常依赖 crate,很多重要的信息都是配置在 cargo.toml 文件中,不仅仅包括 lib 和 crate 的入口文件,后面还有很多的 attribute。 4.rust 对于 crate 的 layout 有一些默认的约定: 转换成内部通用引用的形式 &v,整个表达式就变成 *&v。这里面有两种情况: 1.把其它类型的指针(比如在库中定义的,Box, Rc, Arc, Cow 等),转 成内部标准形式 &v; 2.把多重 & (比如:&&&&&&&v),简化成 &v(通过插入足够数量 的 * 进行解引)。 简单了解一下即可。 第七章 多线程与线程通信 从结论上来说,rust 的编译0 码力 | 117 页 | 2.24 MB | 1 年前3
Comprehensive Rust(繁体中文)tx2.send(30).unwrap(); println!("Received: {:?}", rx.recv()); } • mpsc 代表多重生產者、唯一消費者。Sender 和 SyncSender 會實作 Clone (用於製作多重生 產者),但 Receiver 不會。 • send() 和 recv() 會傳回 Result。如果傳回的是 Err,表示對應的 Sender 或0 码力 | 358 页 | 1.41 MB | 11 月前3
Comprehensive Rust(繁体中文) 202406tx2.send(30).unwrap(); println!("Received: {:?}", rx.recv()); } • mpsc 代表多重生產者、唯一消費者。Sender 和 SyncSender 會實作 Clone (用於製作多重生 產者),但 Receiver 不會。 • send() 和 recv() 會傳回 Result。如果傳回的是 Err,表示對應的 Sender 或0 码力 | 356 页 | 1.41 MB | 1 年前3
Rust 程序设计语言简体中文版zero"); } } 运行代码会打印出 number was something other than zero 。 使用 else if 处理多重条件 可以将 else if 表达式与 if 和 else 组合来实现多重条件。例如: 文件名:src/main.rs fn main() { let number = 6; if number % 4 == 0 变量名不必与结构体中的字段名一致。不过通常希望变量名与字段名一致以便于理解变量来自 于哪些字段。因为变量名匹配字段名是常见的,同时因为 let Point { x: x, y: y } = p; 包 含了很多重复,所以对于匹配结构体字段的模式存在简写:只需列出结构体字段的名称,则模 式创建的变量会有相同的名称。示例 18-13 展示了与示例 18-12 有着相同行为的代码,不过 let 模式创建的变量为0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0than zero"); } } 运行代码会打印出 number was something other than zero。 使用 else if 处理多重条件 可以将 else if 表达式与 if 和 else 组合来实现多重条件。例如: 文件名:src/main.rs 59/562Rust 程序设计语言 简体中文版 fn main() { let number = 6; 名不必与结构体中的字段名一致。不过通常希望变量名与字段名一致以便于理解变量来自于哪 些字段。因为变量名匹配字段名是常见的,同时因为 let Point { x: x, y: y } = p; 包含了 很多重复,所以对于匹配结构体字段的模式存在简写:只需列出结构体字段的名称,则模式创 建的变量会有相同的名称。示例 19-13 展示了与示例 19-12 有着相同行为的代码,不过 let 模式创建的变量为 x0 码力 | 562 页 | 3.23 MB | 1 月前3
共 10 条
- 1













