Hello 算法 1.1.0 Rust版评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: // === File: recursion.rs === /* 使用迭代模拟递归 */ fn0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 www.hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: // === File: recursion.rs === /* 使用迭代模拟递归 */ fn0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,如“剑指 Offer”和“LeetCode Hot 100”,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: // === File: recursion.rs === /* 使用迭代模拟递归 */ fn0 码力 | 383 页 | 17.61 MB | 1 年前3
基于静态分析的Rust内存安全缺陷检测研究println!("bob:{}", bob); *alice = 2; } bob只读借用Box对象, alice临时失去修改权, 保留只读权 alice可读 bob自动归还Box对象, alice恢复修改权 如果需要违背XOR Mutability怎么办? ❑ 以双向链表为例,中间节点被前后两个节点访用 ❑ Rust为了提升可用性所做的妥协 ▪ 智能指针(性能损失) ▪ 允许使用裸指针(unsafe模式) 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 实验效果 ❑ 基于已知CVE评 估检测能力 ❑ 基于GitHub上其 它开源Rust项目 的实验 高召回率 低误报率 double free和悬空指 针问题比较多 案例分析 Panic将导致双重释放 提前 性能:SafeDrop vs 原始Rust编译器 总结和思考 ❑ 问题根源是Rust的自动析构机制0 码力 | 28 页 | 1.55 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0. . . . 170 9.1. 用 panic! 处理不可恢复的错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 9.2. 用 Result 处理可恢复的错误 . . . . . . . . . . . . . . 的返回值 Result,说明有一个可能的错误没有处理。 消除警告的正确做法是实际去编写错误处理代码,不过由于我们就是希望程序在出现问题时立 即崩溃,所以直接使用 expect。第九章 会学习如何从错误中恢复。 使用 println! 占位符打印值 除了位于结尾的右花括号,目前为止就只有这一行代码值得讨论一下了: println!("You guessed: {guess}"); 这行代码现在打印了存储用户输入的字符串。{} 44/562Rust 程序设计语言 简体中文版 模式编译时,Rust 检查这类问题并使程序 panic。panic 这个术语被 Rust 用来表明程 序因错误而退出。第九章 “panic! 与不可恢复的错误” 部分会详细介绍 panic。 使用 --release flag 在 release 模式中构建时,Rust 不会检测会导致 panic 的整型溢 出。相反发生整型溢出时,Rust 会进行一种被称为二进制补码0 码力 | 562 页 | 3.23 MB | 1 月前3
Rust 程序设计语言简体中文版................... 185 9.1. 用 panic! 处理不可恢复的错误 .................................................................................... 186 9.2. 用 Result 处理可恢复的错误 ....................................... Result ,说明有一个可能的错误没有处理。 消除警告的正确做法是实际去编写错误处理代码,不过由于我们就是希望程序在出现问题时立 即崩溃,所以直接使用 expect 。第九章 会学习如何从错误中恢复。 使用 println! 占位符打印值 除了位于结尾的右花括号,目前为止就只有这一行代码值得讨论一下了,就是这一行: # use std::io; # # fn main() { # overflow” ),这会导致以下两种行为之一 的发生。当在 debug 模式编译时,Rust 检查这类问题并使程序 panic,这个术语被 Rust 用来表明程序因错误而退出。第九章 “panic! 与不可恢复的错误” 部分会详细介 绍 panic。 使用 --release flag 在 release 模式中构建时,Rust 不会检测会导致 panic 的整型 溢出。相反发生整型溢出时,Rust 会进行一种被称为二进制补码0 码力 | 600 页 | 12.99 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 Rust 版所示,迭代和遞迴在實現、效能和適用性上有所不同。 表 2‑1 迭代與遞迴特點對比 第 2 章 複雜度分析 www.hello‑algo.com 27 迭代 遞迴 實現方 式 迴圈結構 函式呼叫自身 時間效 率 效率通常較高,無函式呼叫開銷 每次函式呼叫都會產生開銷 記憶體 使用 通常使用固定大小的記憶體空間 累積函式呼叫可能使用大量的堆疊幀空間 適用問 題 適用於簡單迴圈任務,程式碼直觀、可讀 None } 值得說明的是,我們在實際中很少使用最佳時間複雜度,因為通常只有在很小機率下才能達到,可能會帶來 一定的誤導性。而最差時間複雜度更為實用,因為它給出了一個效率安全值,讓我們可以放心地使用演算 法。 從上述示例可以看出,最差時間複雜度和最佳時間複雜度只出現於“特殊的資料分佈”,這些情況的出現機率 可能很小,並不能真實地反映演算法執行效率。相比之下,平均時間複雜度可以體現演算法在隨機輸入資料 隨機輸入資料 下的執行效率,用 Θ 記號來表示。 對於部分演算法,我們可以簡單地推算出隨機資料分佈下的平均情況。比如上述示例,由於輸入陣列是被打 亂的,因此元素 1 出現在任意索引的機率都是相等的,那麼演算法的平均迴圈次數就是陣列長度的一半 ?/2 ,平均時間複雜度為 Θ(?/2) = Θ(?) 。 但對於較為複雜的演算法,計算平均時間複雜度往往比較困難,因為很難分析出在資料分佈下的整體數學期0 码力 | 388 页 | 18.82 MB | 10 月前3
Rust OS 开源操作系统训练营的教与学-0615-李明春夏季 • 第一阶段 188 人 • 第二阶段 47人 1升2 晋级率 25% • 第一阶段 274 人 • 第二阶段 102 人 1升2 晋级率 37% 2022 秋冬季 2023 春夏季 • 第一阶段 290 人 • 第二阶段 131 人 • 第三阶段 36 人 1升2 晋级率 45% 2升3 晋级率 19% VS 成果产出 • 第一阶段 • 共 213 人认领了作业进入排行榜0 码力 | 26 页 | 2.62 MB | 1 年前3
洛佳 组件化驱动、ROM运行环境与RustSBI生 命 周 期 、可 变 性 等 最 新 的 编 程 语 言 理 论 成 果 ,构 造 适 应 开 发 需 求 的 驱 动 程 序 。可 结 合 过 程 宏 等 工 程 设 计 ,提 高 开 发 效 率 。 2 1 世 纪 的 驱 动 程 序 同 系 列 芯 片 可 共 用 驱 动 ,同 系 列 外 设 驱 动 可 复 用 。对 接 业 界 及 开 源 成 熟 标 准 ,新 芯 片 系 统 开 箱 , 与 对 应 的 功 能 、 电 源 外 设 共 同 设 计 无 线 连 接 外 设 W i - F i 基 带 、 蓝 牙 、 U W B 等 , 合 理 编 写 频 域 、 功 率 等 软 件 限 制 , 结 合 开 源 协 议 栈 A I 加 速 外 设 包 括 自 研 A I 核 、 核 显 和 向 量 扩 展 等 , 编 写 专 用 驱 动 后 , 对 接 常 用 R O M 机 制 开 启 所 有 三 个 核 , 并 加 载 相 关 的 固 件 。 相 比 额 外 引 导 程 序 而 言 , 节 省 引 导 链 级 数 , 增 加 安 全 性 和 效 率 。 2023年的RustSBI 第 03 部分 RustSBI软件架构更新 • RISC-V SBI可运用于机器态和虚拟化 的宿主态,此时RustSBI实现应为虚 拟机提供电源、核管理等功能。0 码力 | 21 页 | 3.12 MB | 1 年前3
王宜国 - 基于 Rust 编程语⾔构建 Amphitheatre CLI Desktop Server 的全平台实践经验,然 后再拉取镜像替代旧的 Pod 等⼀系统慢⻓的流程。 Buildpacks How Buildpacks work 分析 探测 恢复构建包可⽤于优化构建和导出阶段的⽂件。 查找⼀组有序的构建包以在构建阶段使⽤。 恢复 构建 从缓存中恢复图层。 将应⽤程序源代码转换为可以打包到容器中的可运⾏⼯件。 导出 创建最终的 OCI 图像。 Packages and Crates0 码力 | 34 页 | 10.81 MB | 1 年前3
共 18 条
- 1
- 2













