 Rust算法教程 The Algos (algorithms)相邻关系。 7.堆(Heap) 堆是⼀种特殊的树形数据结构,⼀般讨论的堆都是⼆叉堆。堆的特点是根结点的值是 所有结点中最⼩的或者最⼤的,并且根结点的两个⼦树也是⼀个堆结构。 8.散列表(Hash) 散列表源⾃于散列函数(Hash function),其思想是如果在结构中存在关键字和T相 等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不⽤进⾏⽐较操作⽽直接取得 所查记录。 2024/3/7 如果你是个Rust新⼿的话,相信你可能会存在以下⼏点疑惑: 为什么需要 use std::collections::HashMap; 这⼀⾏:可能是觉得HashMap⽤的没有那 么多吧,因此Rust并没有将HashMap列⼊Prelude⾏列当中,因此当我们需要使⽤ HashMap时,需要⼿动引⼊。 前⾯的 for i in 0..nums.len() 哪去了,这个 for (index, value) in nums0 码力 | 270 页 | 8.46 MB | 1 年前3 Rust算法教程 The Algos (algorithms)相邻关系。 7.堆(Heap) 堆是⼀种特殊的树形数据结构,⼀般讨论的堆都是⼆叉堆。堆的特点是根结点的值是 所有结点中最⼩的或者最⼤的,并且根结点的两个⼦树也是⼀个堆结构。 8.散列表(Hash) 散列表源⾃于散列函数(Hash function),其思想是如果在结构中存在关键字和T相 等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不⽤进⾏⽐较操作⽽直接取得 所查记录。 2024/3/7 如果你是个Rust新⼿的话,相信你可能会存在以下⼏点疑惑: 为什么需要 use std::collections::HashMap; 这⼀⾏:可能是觉得HashMap⽤的没有那 么多吧,因此Rust并没有将HashMap列⼊Prelude⾏列当中,因此当我们需要使⽤ HashMap时,需要⼿动引⼊。 前⾯的 for i in 0..nums.len() 哪去了,这个 for (index, value) in nums0 码力 | 270 页 | 8.46 MB | 1 年前3
 简谈 Rust 与国密 TLS - 王江桐Shanghai, China SM3 Introduction of SM3 Rust China Conf 2022 – 2023, Shanghai, China • SM3 为密码杂凑算法,采用密码散列(hash)函数标准,用于替代 MD5/SHA-1/SHA-2 等国际 算法,是在 SHA-256 基础上改进实现的一种算法,消息分组长度为 512 位,摘要值长度为 256 位,其中使用了异或、0 码力 | 44 页 | 3.70 MB | 1 年前3 简谈 Rust 与国密 TLS - 王江桐Shanghai, China SM3 Introduction of SM3 Rust China Conf 2022 – 2023, Shanghai, China • SM3 为密码杂凑算法,采用密码散列(hash)函数标准,用于替代 MD5/SHA-1/SHA-2 等国际 算法,是在 SHA-256 基础上改进实现的一种算法,消息分组长度为 512 位,摘要值长度为 256 位,其中使用了异或、0 码力 | 44 页 | 3.70 MB | 1 年前3
 Comprehensive Rust(繁体中文)6 型別推斷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.7 練習:費波那契數列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.7.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 II 第 1 天:下午 37 7 Welcome Back 38 8 元組和陣列 39 8.1 陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 8.2 元組 . . 40 8.5 練習:巢狀陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 8.5.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 9 參照 44 9.1 共用列舉 . . . . . .0 码力 | 358 页 | 1.41 MB | 10 月前3 Comprehensive Rust(繁体中文)6 型別推斷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.7 練習:費波那契數列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.7.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 II 第 1 天:下午 37 7 Welcome Back 38 8 元組和陣列 39 8.1 陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 8.2 元組 . . 40 8.5 練習:巢狀陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 8.5.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 9 參照 44 9.1 共用列舉 . . . . . .0 码力 | 358 页 | 1.41 MB | 10 月前3
 Comprehensive Rust(繁体中文) 2024066 型別推斷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.7 練習:費波那契數列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.7.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 II 第 1 天:下午 35 7 Welcome Back 36 8 元組和陣列 37 8.1 陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 8.2 元組 . . 38 8.5 練習:巢狀陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 8.5.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 9 參照 42 9.1 共用列舉 . . . . . .0 码力 | 356 页 | 1.41 MB | 1 年前3 Comprehensive Rust(繁体中文) 2024066 型別推斷 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.7 練習:費波那契數列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.7.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 II 第 1 天:下午 35 7 Welcome Back 36 8 元組和陣列 37 8.1 陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 8.2 元組 . . 38 8.5 練習:巢狀陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 8.5.1 解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 9 參照 42 9.1 共用列舉 . . . . . .0 码力 | 356 页 | 1.41 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Rust 版在计算机世界中,哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号,从而可以快速找到目标图书。 第 6 章 哈希表 www.hello‑algo.com 116 6.1 哈希表 哈希表(hash table),又称散列表,它通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具体而 言,我们向哈希表中输入一个键 key ,则可以在 ?(1) 时间内获取对应的值 value 。 如图 6‑1 所示,给定 42, next: None } } 的哈希值为 15387811073369036852 在许多编程语言中,只有不可变对象才可作为哈希表的 key 。假如我们将列表(动态数组)作为 key ,当列 第 6 章 哈希表 www.hello‑algo.com 137 表的内容发生变化时,它的哈希值也随之改变,我们就无法在哈希表中查询到原先的 value 了。 虽然自定义对象(比如链表节点)的 完美二叉树是一个特例,在二叉树的中间层通常存在许多 None 。由于层序遍历序列并不包含这些 None ,因 此我们无法仅凭该序列来推测 None 的数量和分布位置。这意味着存在多种二叉树结构都符合该层序遍历序 列。 如图 7‑13 所示,给定一棵非完美二叉树,上述数组表示方法已经失效。 图 7‑13 层序遍历序列对应多种二叉树可能性 第 7 章 树 www.hello‑algo.com 153 为了解0 码力 | 387 页 | 18.51 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Rust 版在计算机世界中,哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号,从而可以快速找到目标图书。 第 6 章 哈希表 www.hello‑algo.com 116 6.1 哈希表 哈希表(hash table),又称散列表,它通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具体而 言,我们向哈希表中输入一个键 key ,则可以在 ?(1) 时间内获取对应的值 value 。 如图 6‑1 所示,给定 42, next: None } } 的哈希值为 15387811073369036852 在许多编程语言中,只有不可变对象才可作为哈希表的 key 。假如我们将列表(动态数组)作为 key ,当列 第 6 章 哈希表 www.hello‑algo.com 137 表的内容发生变化时,它的哈希值也随之改变,我们就无法在哈希表中查询到原先的 value 了。 虽然自定义对象(比如链表节点)的 完美二叉树是一个特例,在二叉树的中间层通常存在许多 None 。由于层序遍历序列并不包含这些 None ,因 此我们无法仅凭该序列来推测 None 的数量和分布位置。这意味着存在多种二叉树结构都符合该层序遍历序 列。 如图 7‑13 所示,给定一棵非完美二叉树,上述数组表示方法已经失效。 图 7‑13 层序遍历序列对应多种二叉树可能性 第 7 章 树 www.hello‑algo.com 153 为了解0 码力 | 387 页 | 18.51 MB | 10 月前3
 Hello 算法 1.1.0 Rust版在计算机世界中,哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号,从而可以快速找到目标图书。 第 6 章 哈希表 hello‑algo.com 116 6.1 哈希表 哈希表(hash table),又称散列表,它通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具体而 言,我们向哈希表中输入一个键 key ,则可以在 ?(1) 时间内获取对应的值 value 。 如图 6‑1 所示,给定 42, next: None } } 的哈希值为 15387811073369036852 在许多编程语言中,只有不可变对象才可作为哈希表的 key 。假如我们将列表(动态数组)作为 key ,当列 第 6 章 哈希表 hello‑algo.com 137 表的内容发生变化时,它的哈希值也随之改变,我们就无法在哈希表中查询到原先的 value 了。 虽然自定义对象(比如链表节点)的成员变量 完美二叉树是一个特例,在二叉树的中间层通常存在许多 None 。由于层序遍历序列并不包含这些 None ,因 此我们无法仅凭该序列来推测 None 的数量和分布位置。这意味着存在多种二叉树结构都符合该层序遍历序 列。 如图 7‑13 所示,给定一棵非完美二叉树,上述数组表示方法已经失效。 第 7 章 树 hello‑algo.com 152 图 7‑13 层序遍历序列对应多种二叉树可能性 为了解决此问题0 码力 | 388 页 | 18.50 MB | 1 年前3 Hello 算法 1.1.0 Rust版在计算机世界中,哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号,从而可以快速找到目标图书。 第 6 章 哈希表 hello‑algo.com 116 6.1 哈希表 哈希表(hash table),又称散列表,它通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具体而 言,我们向哈希表中输入一个键 key ,则可以在 ?(1) 时间内获取对应的值 value 。 如图 6‑1 所示,给定 42, next: None } } 的哈希值为 15387811073369036852 在许多编程语言中,只有不可变对象才可作为哈希表的 key 。假如我们将列表(动态数组)作为 key ,当列 第 6 章 哈希表 hello‑algo.com 137 表的内容发生变化时,它的哈希值也随之改变,我们就无法在哈希表中查询到原先的 value 了。 虽然自定义对象(比如链表节点)的成员变量 完美二叉树是一个特例,在二叉树的中间层通常存在许多 None 。由于层序遍历序列并不包含这些 None ,因 此我们无法仅凭该序列来推测 None 的数量和分布位置。这意味着存在多种二叉树结构都符合该层序遍历序 列。 如图 7‑13 所示,给定一棵非完美二叉树,上述数组表示方法已经失效。 第 7 章 树 hello‑algo.com 152 图 7‑13 层序遍历序列对应多种二叉树可能性 为了解决此问题0 码力 | 388 页 | 18.50 MB | 1 年前3
 Hello 算法 1.0.0 Rust版在计算机世界中,哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号,从而可以快速找到目标图书。 第 6 章 哈希表 hello‑algo.com 116 6.1 哈希表 「哈希表 hash table」,又称「散列表」,它通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具 体而言,我们向哈希表中输入一个键 key ,则可以在 ?(1) 时间内获取对应的值 value 。 如图 6‑1 42, next: None } } 的哈希值为 15387811073369036852 在许多编程语言中,只有不可变对象才可作为哈希表的 key 。假如我们将列表(动态数组)作为 key ,当列 表的内容发生变化时,它的哈希值也随之改变,我们就无法在哈希表中查询到原先的 value 了。 虽然自定义对象(比如链表节点)的成员变量是可变的,但它是可哈希的。这是因为对象的哈希值通常是基 于 完美二叉树是一个特例,在二叉树的中间层通常存在许多 None 。由于层序遍历序列并不包含这些 None ,因 此我们无法仅凭该序列来推测 None 的数量和分布位置。这意味着存在多种二叉树结构都符合该层序遍历序 列。 如图 7‑13 所示,给定一棵非完美二叉树,上述数组表示方法已经失效。 第 7 章 树 hello‑algo.com 151 图 7‑13 层序遍历序列对应多种二叉树可能性 为了解决此问题0 码力 | 383 页 | 17.61 MB | 1 年前3 Hello 算法 1.0.0 Rust版在计算机世界中,哈希表如同一位聪慧的图书管理员。 他知道如何计算索书号,从而可以快速找到目标图书。 第 6 章 哈希表 hello‑algo.com 116 6.1 哈希表 「哈希表 hash table」,又称「散列表」,它通过建立键 key 与值 value 之间的映射,实现高效的元素查询。具 体而言,我们向哈希表中输入一个键 key ,则可以在 ?(1) 时间内获取对应的值 value 。 如图 6‑1 42, next: None } } 的哈希值为 15387811073369036852 在许多编程语言中,只有不可变对象才可作为哈希表的 key 。假如我们将列表(动态数组)作为 key ,当列 表的内容发生变化时,它的哈希值也随之改变,我们就无法在哈希表中查询到原先的 value 了。 虽然自定义对象(比如链表节点)的成员变量是可变的,但它是可哈希的。这是因为对象的哈希值通常是基 于 完美二叉树是一个特例,在二叉树的中间层通常存在许多 None 。由于层序遍历序列并不包含这些 None ,因 此我们无法仅凭该序列来推测 None 的数量和分布位置。这意味着存在多种二叉树结构都符合该层序遍历序 列。 如图 7‑13 所示,给定一棵非完美二叉树,上述数组表示方法已经失效。 第 7 章 树 hello‑algo.com 151 图 7‑13 层序遍历序列对应多种二叉树可能性 为了解决此问题0 码力 | 383 页 | 17.61 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Rust 版同樣,資料結構無處不在:大到社會網絡,小到地鐵路線,許多系統都可以建模為“圖”;大到一個國家,小 到一個家庭,社會的主要組織形式呈現出“樹”的特徵;冬天的衣服就像“堆疊”,最先穿上的最後才能脫下; 羽毛球筒則如同“佇列”,一端放入、一端取出;字典就像一個“雜湊表”,能夠快速查找目標詞條。 本書旨在透過清晰易懂的動畫圖解與可執行的程式碼範例,使讀者理解演算法和資料結構的核心概念,並能 夠透過程式設計來實現它們。在 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 第 4 章 陣列與鏈結串列 66 4.1 陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.2 . . . . . . . . . . . . . . . . 87 第 5 章 堆疊與佇列 90 5.1 堆疊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.2 佇列 . . . . . . . . . . . . . . . . . . . . . . .0 码力 | 388 页 | 18.82 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 Rust 版同樣,資料結構無處不在:大到社會網絡,小到地鐵路線,許多系統都可以建模為“圖”;大到一個國家,小 到一個家庭,社會的主要組織形式呈現出“樹”的特徵;冬天的衣服就像“堆疊”,最先穿上的最後才能脫下; 羽毛球筒則如同“佇列”,一端放入、一端取出;字典就像一個“雜湊表”,能夠快速查找目標詞條。 本書旨在透過清晰易懂的動畫圖解與可執行的程式碼範例,使讀者理解演算法和資料結構的核心概念,並能 夠透過程式設計來實現它們。在 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 第 4 章 陣列與鏈結串列 66 4.1 陣列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.2 . . . . . . . . . . . . . . . . 87 第 5 章 堆疊與佇列 90 5.1 堆疊 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.2 佇列 . . . . . . . . . . . . . . . . . . . . . . .0 码力 | 388 页 | 18.82 MB | 10 月前3
 Comprehensive Rust(日语) 202412タプルと配列 43 8.1 配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 8.2 タプル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 8.3 配列のイテレート 44 8.4 パターンとデストラクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 8.5 演習: ネストされた配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 8.5.1 解答 . . . . . . . . . . . . . 9.3 Slices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 9.4 文字列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 9.5 演習: ジオメトリ . .0 码力 | 381 页 | 1.36 MB | 10 月前3 Comprehensive Rust(日语) 202412タプルと配列 43 8.1 配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 8.2 タプル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 8.3 配列のイテレート 44 8.4 パターンとデストラクト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 8.5 演習: ネストされた配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 8.5.1 解答 . . . . . . . . . . . . . 9.3 Slices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 9.4 文字列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 9.5 演習: ジオメトリ . .0 码力 | 381 页 | 1.36 MB | 10 月前3
 Rust 程序设计语言简体中文版Rust 的模块(module)系统,其中的私有性规则用来组织代码和公开的 API(应 用程序接口)。第 8 章讨论标准库提供的常见集合数据结构,例如 Vector(向量)、字符串和 Hash Map(散列表)。第 9 章探索 Rust 的错误处理的理念与技术。 第 10 章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用 于多种类型的代码。第 11 vector、字符串和哈希 map,以及它们有什么特别之处。 166/600 Rust 程序设计语言 简体中文版 8 . 1 . 使 用 V e c t o r 储 存 列 表 使用 Vector 储存列表 ch08-01-vectors.md commit ac16184a7f56d17daa9c4c76901371085dc0ac43 我们要讲到的第一个类型是 值的用 例。幸运的是,枚举的成员都被定义为相同的枚举类型,所以当需要在 vector 中储存不同类 型值时,我们可以定义并使用一个枚举! 例如,假如我们想要从电子表格的一行中获取值,而这一行的有些列包含数字,有些包含浮点 值,还有些是字符串。我们可以定义一个枚举,其成员会存放这些不同类型的值,同时所有这 些枚举成员都会被当作相同类型:那个枚举的类型。接着可以创建一个储存枚举值的 vector, 这样最终就能够储存不同类型的值了。示例0 码力 | 600 页 | 12.99 MB | 1 年前3 Rust 程序设计语言简体中文版Rust 的模块(module)系统,其中的私有性规则用来组织代码和公开的 API(应 用程序接口)。第 8 章讨论标准库提供的常见集合数据结构,例如 Vector(向量)、字符串和 Hash Map(散列表)。第 9 章探索 Rust 的错误处理的理念与技术。 第 10 章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用 于多种类型的代码。第 11 vector、字符串和哈希 map,以及它们有什么特别之处。 166/600 Rust 程序设计语言 简体中文版 8 . 1 . 使 用 V e c t o r 储 存 列 表 使用 Vector 储存列表 ch08-01-vectors.md commit ac16184a7f56d17daa9c4c76901371085dc0ac43 我们要讲到的第一个类型是 值的用 例。幸运的是,枚举的成员都被定义为相同的枚举类型,所以当需要在 vector 中储存不同类 型值时,我们可以定义并使用一个枚举! 例如,假如我们想要从电子表格的一行中获取值,而这一行的有些列包含数字,有些包含浮点 值,还有些是字符串。我们可以定义一个枚举,其成员会存放这些不同类型的值,同时所有这 些枚举成员都会被当作相同类型:那个枚举的类型。接着可以创建一个储存枚举值的 vector, 这样最终就能够储存不同类型的值了。示例0 码力 | 600 页 | 12.99 MB | 1 年前3
共 16 条
- 1
- 2














