 Hello 算法 1.1.0 Rust版adth‑first search, BFS), 它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.rs === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 ,直到所有顶点被访问完毕后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 // === File: graph_bfs.rs === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 fn graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> Vec Hello 算法 1.1.0 Rust版adth‑first search, BFS), 它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.rs === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 ,直到所有顶点被访问完毕后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 // === File: graph_bfs.rs === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 fn graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> Vec- { // 顶点遍历序列 0 码力 | 388 页 | 18.50 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Rust 版adth‑first search, BFS), 它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.rs === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 时间复杂度下进行 key 的增删查改操作。根据 key 的唯一性,哈希集合通常用于数据去重等场景。 // === File: graph_bfs.rs === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 fn graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> Vec Hello 算法 1.2.0 简体中文 Rust 版adth‑first search, BFS), 它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.rs === /* 层序遍历 */ 所示,从左上角顶点出发,首先遍历该顶点的所有邻接顶点,然后遍历下一个顶点的所有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 时间复杂度下进行 key 的增删查改操作。根据 key 的唯一性,哈希集合通常用于数据去重等场景。 // === File: graph_bfs.rs === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 fn graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> Vec- { // 顶点遍历序列 0 码力 | 387 页 | 18.51 MB | 10 月前3
 Hello 算法 1.0.0 Rust版breadth‑first search, BFS」,它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.rs === /* 层序遍历 */ 第 有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 第 9 章 图 hello‑algo.com 206 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 ,直到所有顶点被访问完毕后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 // === File: graph_bfs.rs === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 fn graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> Vec Hello 算法 1.0.0 Rust版breadth‑first search, BFS」,它体现了一种“一圈一圈向外扩展”的逐层遍历方式。 图 7‑9 二叉树的层序遍历 1. 代码实现 广度优先遍历通常借助“队列”来实现。队列遵循“先进先出”的规则,而广度优先遍历则遵循“逐层推进” 的规则,两者背后的思想是一致的。实现代码如下: // === File: binary_tree_bfs.rs === /* 层序遍历 */ 第 有邻 接顶点,以此类推,直至所有顶点访问完毕。 图 9‑9 图的广度优先遍历 第 9 章 图 hello‑algo.com 206 1. 算法实现 BFS 通常借助队列来实现,代码如下所示。队列具有“先入先出”的性质,这与 BFS 的“由近及远”的思想 异曲同工。 1. 将遍历起始顶点 startVet 加入队列,并开启循环。 2. 在循环的每轮迭代中,弹出队首顶点并记录访问,然后将该顶点的所有邻接顶点加入到队列尾部。 ,直到所有顶点被访问完毕后结束。 为了防止重复遍历顶点,我们需要借助一个哈希表 visited 来记录哪些节点已被访问。 // === File: graph_bfs.rs === /* 广度优先遍历 */ // 使用邻接表来表示图,以便获取指定顶点的所有邻接顶点 fn graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> Vec- { // 顶点遍历序列 0 码力 | 383 页 | 17.61 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Rust 版dth‑first search, BFS), 它體現了一種“一圈一圈向外擴展”的逐層走訪方式。 圖 7‑9 二元樹的層序走訪 1. 程式碼實現 廣度優先走訪通常藉助“佇列”來實現。佇列遵循“先進先出”的規則,而廣度優先走訪則遵循“逐層推進” 的規則,兩者背後的思想是一致的。實現程式碼如下: // === File: binary_tree_bfs.rs === /* 層序走訪 */ 所示,從左上角頂點出發,首先走訪該頂點的所有鄰接頂點,然後走訪下一個頂點的所有鄰 接頂點,以此類推,直至所有頂點訪問完畢。 圖 9‑9 圖的廣度優先走訪 1. 演算法實現 BFS 通常藉助佇列來實現,程式碼如下所示。佇列具有“先入先出”的性質,這與 BFS 的“由近及遠”的思 想異曲同工。 1. 將走訪起始頂點 startVet 加入列列,並開啟迴圈。 2. 在迴圈的每輪迭代中,彈出佇列首頂點並記錄訪問, 的唯一性,雜湊集合通常用於資料去重等場景。 第 9 章 圖 www.hello‑algo.com 207 // === File: graph_bfs.rs === /* 廣度優先走訪 */ // 使用鄰接表來表示圖,以便獲取指定頂點的所有鄰接頂點 fn graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> Vec Hello 算法 1.2.0 繁体中文 Rust 版dth‑first search, BFS), 它體現了一種“一圈一圈向外擴展”的逐層走訪方式。 圖 7‑9 二元樹的層序走訪 1. 程式碼實現 廣度優先走訪通常藉助“佇列”來實現。佇列遵循“先進先出”的規則,而廣度優先走訪則遵循“逐層推進” 的規則,兩者背後的思想是一致的。實現程式碼如下: // === File: binary_tree_bfs.rs === /* 層序走訪 */ 所示,從左上角頂點出發,首先走訪該頂點的所有鄰接頂點,然後走訪下一個頂點的所有鄰 接頂點,以此類推,直至所有頂點訪問完畢。 圖 9‑9 圖的廣度優先走訪 1. 演算法實現 BFS 通常藉助佇列來實現,程式碼如下所示。佇列具有“先入先出”的性質,這與 BFS 的“由近及遠”的思 想異曲同工。 1. 將走訪起始頂點 startVet 加入列列,並開啟迴圈。 2. 在迴圈的每輪迭代中,彈出佇列首頂點並記錄訪問, 的唯一性,雜湊集合通常用於資料去重等場景。 第 9 章 圖 www.hello‑algo.com 207 // === File: graph_bfs.rs === /* 廣度優先走訪 */ // 使用鄰接表來表示圖,以便獲取指定頂點的所有鄰接頂點 fn graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> Vec- { // 頂點走訪序列 0 码力 | 388 页 | 18.82 MB | 10 月前3
 Rust API可靠性分析与验证典型模糊测试工 具的工作流程 使用变异后的种子执行程序 No Rust China Conf 2021 – 2022, Online, China RULF:模糊测试用例程序生成 带有剪枝 的BFS 生成API调用序列 反向搜索 合并与优 化 模糊测试用例程序 短序列 长序列 最优序列 集合 合并 优化 构建API依赖图 合成合法的测试 函数 Rust库源代码 泛型函数0 码力 | 13 页 | 1.68 MB | 1 年前3 Rust API可靠性分析与验证典型模糊测试工 具的工作流程 使用变异后的种子执行程序 No Rust China Conf 2021 – 2022, Online, China RULF:模糊测试用例程序生成 带有剪枝 的BFS 生成API调用序列 反向搜索 合并与优 化 模糊测试用例程序 短序列 长序列 最优序列 集合 合并 优化 构建API依赖图 合成合法的测试 函数 Rust库源代码 泛型函数0 码力 | 13 页 | 1.68 MB | 1 年前3
 Rust 语言学习笔记事情。 rust 的包管理系统和 go 的包管理系统以及 java 的包管理系统大大不同,很容 易给人造成困惑。 最主要原因是: 1.Rust 的模块支持层级结构,但这种层级结构本身与文件系统目录的层级结构 是解耦的。 因为 Rust 本身可用于操作系统的开发。 开发者需要自己去定义路径,定义 mod 的层级关系,配合 rust 的默认约定。这 点和 java,go 开发完全不同,在面向 xxx.rs 文件用 mod xxx {} 包裹起来了。 (又一个约定)初学者往往会多加一层,请注意。 1.2.3 多文件模块的层级关系 Rust 的模块支持层级结构,但这种层级结构本身与文件系统目录的层级结构是 解耦的。 mod xxx; 这个 xxx 不能包含::号。也即在这个表达形式中,是没法引用多层结 构下的模块的。也即,你不可能直接使用 mod a::b::c::d;的形式来引用 是一个独立的可编译单元。它有一个入口文件,这 个入口文件是这个 crate(里面可能包含若干个 module)的模块根路径。整个 模块的引用,形成一个链,每个模块,都可以用一个精确的路径(比如: a::b::c::d)来表示; 与文件系统概念类似,模块路径也有相对路径和绝对路径的概念。为此,Rust 提供了 self 和 super 两个关键字。 路径是自定义出来的! super 表示,当前模块路径的上一级路径,可以理解成父模块。0 码力 | 117 页 | 2.24 MB | 1 年前3 Rust 语言学习笔记事情。 rust 的包管理系统和 go 的包管理系统以及 java 的包管理系统大大不同,很容 易给人造成困惑。 最主要原因是: 1.Rust 的模块支持层级结构,但这种层级结构本身与文件系统目录的层级结构 是解耦的。 因为 Rust 本身可用于操作系统的开发。 开发者需要自己去定义路径,定义 mod 的层级关系,配合 rust 的默认约定。这 点和 java,go 开发完全不同,在面向 xxx.rs 文件用 mod xxx {} 包裹起来了。 (又一个约定)初学者往往会多加一层,请注意。 1.2.3 多文件模块的层级关系 Rust 的模块支持层级结构,但这种层级结构本身与文件系统目录的层级结构是 解耦的。 mod xxx; 这个 xxx 不能包含::号。也即在这个表达形式中,是没法引用多层结 构下的模块的。也即,你不可能直接使用 mod a::b::c::d;的形式来引用 是一个独立的可编译单元。它有一个入口文件,这 个入口文件是这个 crate(里面可能包含若干个 module)的模块根路径。整个 模块的引用,形成一个链,每个模块,都可以用一个精确的路径(比如: a::b::c::d)来表示; 与文件系统概念类似,模块路径也有相对路径和绝对路径的概念。为此,Rust 提供了 self 和 super 两个关键字。 路径是自定义出来的! super 表示,当前模块路径的上一级路径,可以理解成父模块。0 码力 | 117 页 | 2.24 MB | 1 年前3
 Comprehensive Rust(简体中文) 20241226.1 模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 26.2 文件系统层级结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 26.3 可见性 . . . . . . . 第 26 部分 模块 This segment should take about 40 minutes. It contains: Slide Duration 模块 3 minutes 文件系统层级结构 5 minutes 可见性 5 minutes use、super、self 10 minutes 练习:面向 GUI 库的模块 15 minutes 26.1 模块 我们已看了“i toml”文件。 • crate 是一种模块树,其中的二进制 crate 会创建一个可执行文件,而库 crate 会编译为库。 • 模块定义了组织和范围,并且是本部分的重点。 146 26.2 文件系统层级结构 如果省略模块内容,则会指示 Rust 在另一个文件中查找: mod garden; 这会告知 Rust 可以在“src/garden.rs”中找到“garden”模块内容。同样,您0 码力 | 359 页 | 1.33 MB | 10 月前3 Comprehensive Rust(简体中文) 20241226.1 模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 26.2 文件系统层级结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 26.3 可见性 . . . . . . . 第 26 部分 模块 This segment should take about 40 minutes. It contains: Slide Duration 模块 3 minutes 文件系统层级结构 5 minutes 可见性 5 minutes use、super、self 10 minutes 练习:面向 GUI 库的模块 15 minutes 26.1 模块 我们已看了“i toml”文件。 • crate 是一种模块树,其中的二进制 crate 会创建一个可执行文件,而库 crate 会编译为库。 • 模块定义了组织和范围,并且是本部分的重点。 146 26.2 文件系统层级结构 如果省略模块内容,则会指示 Rust 在另一个文件中查找: mod garden; 这会告知 Rust 可以在“src/garden.rs”中找到“garden”模块内容。同样,您0 码力 | 359 页 | 1.33 MB | 10 月前3
 Rust 程序设计语言 简体中文版 1.85.0程序设计语言 简体中文版 这个模块树可能会令你想起电脑上文件系统的目录树;这是一个非常恰当的类比!就像文件系 统的目录,你可以使用模块来组织你的代码。并且,就像目录中的文件,我们需要一种方法来 找到模块。 136/562Rust 程序设计语言 简体中文版 引用模块树中项的路径 为了向 Rust 指示在模块树中从何处查找某个项,我们使用路径,就像在文件系统中使用路径 一样。为了调用一个函数,我们需要知道它的路径。 ,直到我们找到 add_to_waitlist。你可以想象出一个相同结构的文件系统:我们通过指定路径 /front_of_house/hosting/add_to_waitlist 来执行 add_to_waitlist 程序。我们使用 crate 从 crate 根开始就类似于在 shell 中使用 / 从文件系统根开始。 第二次在 eat_at_restaurant 中调用 add_to_waitlist add_to_waitlist 时,使用的是相对路径。这个路径以 front_of_house 为起始,这个模块在模块树中与 eat_at_restaurant 定义在同一层级。与之等 价的文件系统路径就是 front_of_house/hosting/add_to_waitlist。以模块名开头意味着该路 径是相对路径。 137/562Rust 程序设计语言 简体中文版 选择使用相对路径还是绝对路径要0 码力 | 562 页 | 3.23 MB | 25 天前3 Rust 程序设计语言 简体中文版 1.85.0程序设计语言 简体中文版 这个模块树可能会令你想起电脑上文件系统的目录树;这是一个非常恰当的类比!就像文件系 统的目录,你可以使用模块来组织你的代码。并且,就像目录中的文件,我们需要一种方法来 找到模块。 136/562Rust 程序设计语言 简体中文版 引用模块树中项的路径 为了向 Rust 指示在模块树中从何处查找某个项,我们使用路径,就像在文件系统中使用路径 一样。为了调用一个函数,我们需要知道它的路径。 ,直到我们找到 add_to_waitlist。你可以想象出一个相同结构的文件系统:我们通过指定路径 /front_of_house/hosting/add_to_waitlist 来执行 add_to_waitlist 程序。我们使用 crate 从 crate 根开始就类似于在 shell 中使用 / 从文件系统根开始。 第二次在 eat_at_restaurant 中调用 add_to_waitlist add_to_waitlist 时,使用的是相对路径。这个路径以 front_of_house 为起始,这个模块在模块树中与 eat_at_restaurant 定义在同一层级。与之等 价的文件系统路径就是 front_of_house/hosting/add_to_waitlist。以模块名开头意味着该路 径是相对路径。 137/562Rust 程序设计语言 简体中文版 选择使用相对路径还是绝对路径要0 码力 | 562 页 | 3.23 MB | 25 天前3
 Real world Rust
- Why and how we use Rust in TiKVSend + Sync TiKV ● 大规模分布式 Key-Value 数据库 ● 支持 ACID 跨行事务支持 ● 支持 MVCC 无锁的快照读 ● 构建于 Raft 之上,不依赖分布式文件系统 ○ 更少的第三方依赖 ○ 更高的性能(低延迟) ● 配合 TiDB 使用,需要有健全的逻辑实现 SQL 层的下推算子 TiKV 的前置需求 ● 极高的性能要求,尽可能低延迟,而且延迟需要稳定0 码力 | 29 页 | 506.53 KB | 1 年前3 Real world Rust
- Why and how we use Rust in TiKVSend + Sync TiKV ● 大规模分布式 Key-Value 数据库 ● 支持 ACID 跨行事务支持 ● 支持 MVCC 无锁的快照读 ● 构建于 Raft 之上,不依赖分布式文件系统 ○ 更少的第三方依赖 ○ 更高的性能(低延迟) ● 配合 TiDB 使用,需要有健全的逻辑实现 SQL 层的下推算子 TiKV 的前置需求 ● 极高的性能要求,尽可能低延迟,而且延迟需要稳定0 码力 | 29 页 | 506.53 KB | 1 年前3
 WebAssembly 简介 - 陈思衡WebAssembly System Interface (简称 WASI),它定义了一组 WASM 模块可以调用的系统调用接口。WASI 的目的是让 WASM 模块可以访问底层系统的功能,比如文件系统、网络等。这使得 WASM 可以作为一个更广泛的 运行时,不仅仅局限于浏览器环境。WASI 当前定义了一组 POSIX 兼容的系统调用,让 WASM 模块可以访问文件系 统。未来 WASI 还会加入更多系统接口0 码力 | 24 页 | 773.46 KB | 1 年前3 WebAssembly 简介 - 陈思衡WebAssembly System Interface (简称 WASI),它定义了一组 WASM 模块可以调用的系统调用接口。WASI 的目的是让 WASM 模块可以访问底层系统的功能,比如文件系统、网络等。这使得 WASM 可以作为一个更广泛的 运行时,不仅仅局限于浏览器环境。WASI 当前定义了一组 POSIX 兼容的系统调用,让 WASM 模块可以访问文件系 统。未来 WASI 还会加入更多系统接口0 码力 | 24 页 | 773.46 KB | 1 年前3
共 12 条
- 1
- 2













