 Nacos架构&原理
中的本地 commit,也类似于缓存,会 在适当的时机更新,但是并没有缓存过期(expiration)的概念。 Nacos 配置模型 基础模型 上图是 Nacos 配置管理的基础模型: 25 > Nacos 架构 1. Nacos 提供可视化的控制台,可以对配置进行发布、更新、删除、灰度、版本管理等功能。 2. SDK 可以提供发布配置、更新配置、监听配置等功能。 3. SDK 通过 GRPC config_tags_relation 配置的标签表,在发布配置的时候如果指定了标签,那么会把标签和配置 的关联信息存储在该表中。  his_config_info 配置的历史信息表,在配置的发布、更新、删除等操作都会记录⼀条数据,可 以做多版本管理和快速回滚。 Nacos 架构 < 28 Nacos 内核设计 Nacos ⼀致性协议 为什么 Nacos 需要⼀致性协议 Nacos 在 用性,提出了很高的要求,需要在任何场景下,尽最大可能保证服务注册发现能力可以对外提供服 务;同时 Nacos 的服务注册发现设计,采取了心跳可自动完成服务数据补偿的机制。如果数据丢 失的话,是可以通过该机制快速弥补数据丢失。 29 > Nacos 架构 因此,为了满足服务发现注册中心的可用性,强⼀致性的共识算法这里就不太合适了,因为强⼀致 性共识算法能否对外提供服务是有要求的,如果当前集群可用的节点数没有过半的话,整个算法直0 码力 | 326 页 | 12.83 MB | 9 月前3 Nacos架构&原理
中的本地 commit,也类似于缓存,会 在适当的时机更新,但是并没有缓存过期(expiration)的概念。 Nacos 配置模型 基础模型 上图是 Nacos 配置管理的基础模型: 25 > Nacos 架构 1. Nacos 提供可视化的控制台,可以对配置进行发布、更新、删除、灰度、版本管理等功能。 2. SDK 可以提供发布配置、更新配置、监听配置等功能。 3. SDK 通过 GRPC config_tags_relation 配置的标签表,在发布配置的时候如果指定了标签,那么会把标签和配置 的关联信息存储在该表中。  his_config_info 配置的历史信息表,在配置的发布、更新、删除等操作都会记录⼀条数据,可 以做多版本管理和快速回滚。 Nacos 架构 < 28 Nacos 内核设计 Nacos ⼀致性协议 为什么 Nacos 需要⼀致性协议 Nacos 在 用性,提出了很高的要求,需要在任何场景下,尽最大可能保证服务注册发现能力可以对外提供服 务;同时 Nacos 的服务注册发现设计,采取了心跳可自动完成服务数据补偿的机制。如果数据丢 失的话,是可以通过该机制快速弥补数据丢失。 29 > Nacos 架构 因此,为了满足服务发现注册中心的可用性,强⼀致性的共识算法这里就不太合适了,因为强⼀致 性共识算法能否对外提供服务是有要求的,如果当前集群可用的节点数没有过半的话,整个算法直0 码力 | 326 页 | 12.83 MB | 9 月前3
 2022年美团技术年货 合辑算法 < 13 目标检测开源框架 YOLOv6 全面升级, 更快更准的 2.0 版本来啦 作者:楚怡 红亮 梦婕等 9 月 5 日,美团视觉智能部发布了 YOLOv6 2.0 版本,本次更新对轻量级网络进 行了全面升级,量化版模型 YOLOv6-S 达到了 869 FPS,同时,还推出了综 合性能优异的中大型网络(YOLOv6-M/L),丰富了 YOLOv6 网络系列。其中, YOLOv6-M/L 且不使用预训练模型或额外检测数据集 下获得,“‡”表示采用了自蒸馏算法,“*”表示从官方代码库对发布模型进行重新 测评的指标。以上速度指标均在 T4 TRT7.2 环境下测试。 本次版本升级,主要有以下更新: 性能更强的全系列模型 1. 针对中大型模型(YOLOv6-M/L),设计了新主干网络 CSPStackRep,它在 综合性能上比上一版的 Single Path 结构更具优势。 2. 针对不同网络,系统性地验证了各种最新策略 1% 提升至 43.8%。 量身定制的量化方案 本次发布还集成了专门针对 YOLOv6 的量化方案,对重参数化系列模型的量化也有 参考意义。该方案借鉴 RepOptimizer [1] 在梯度更新时做重参数化,解决了多支路动 态范围过大导致难以量化的问题,用 RepOptimizer 训练的 YOLOv6 模型可以直接 使用训练后量化(Post-training Quantization,PTQ),而不产生过大的精度损失。0 码力 | 1356 页 | 45.90 MB | 1 年前3 2022年美团技术年货 合辑算法 < 13 目标检测开源框架 YOLOv6 全面升级, 更快更准的 2.0 版本来啦 作者:楚怡 红亮 梦婕等 9 月 5 日,美团视觉智能部发布了 YOLOv6 2.0 版本,本次更新对轻量级网络进 行了全面升级,量化版模型 YOLOv6-S 达到了 869 FPS,同时,还推出了综 合性能优异的中大型网络(YOLOv6-M/L),丰富了 YOLOv6 网络系列。其中, YOLOv6-M/L 且不使用预训练模型或额外检测数据集 下获得,“‡”表示采用了自蒸馏算法,“*”表示从官方代码库对发布模型进行重新 测评的指标。以上速度指标均在 T4 TRT7.2 环境下测试。 本次版本升级,主要有以下更新: 性能更强的全系列模型 1. 针对中大型模型(YOLOv6-M/L),设计了新主干网络 CSPStackRep,它在 综合性能上比上一版的 Single Path 结构更具优势。 2. 针对不同网络,系统性地验证了各种最新策略 1% 提升至 43.8%。 量身定制的量化方案 本次发布还集成了专门针对 YOLOv6 的量化方案,对重参数化系列模型的量化也有 参考意义。该方案借鉴 RepOptimizer [1] 在梯度更新时做重参数化,解决了多支路动 态范围过大导致难以量化的问题,用 RepOptimizer 训练的 YOLOv6 模型可以直接 使用训练后量化(Post-training Quantization,PTQ),而不产生过大的精度损失。0 码力 | 1356 页 | 45.90 MB | 1 年前3
 Hello 算法 1.1.0 C#版structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n while (i <= n) { res += i; i += 1; // 更新条件变量 } return res; } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: 第 2 章 复杂度分析 hello‑algo File: iteration.cs === /* while 循环(两次更新) */ int WhileLoopII(int n) { int res = 0; int i = 1; // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i; // 更新条件变量 i += 1; i *= 2; } return res;0 码力 | 378 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 C#版structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n while (i <= n) { res += i; i += 1; // 更新条件变量 } return res; } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: 第 2 章 复杂度分析 hello‑algo File: iteration.cs === /* while 循环(两次更新) */ int WhileLoopII(int n) { int res = 0; int i = 1; // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i; // 更新条件变量 i += 1; i *= 2; } return res;0 码力 | 378 页 | 18.47 MB | 1 年前3
 Hello 算法 1.1.0 Java版structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n-1, n while (i <= n) { res += i; i++; // 更新条件变量 } return res; } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: 第 2 章 复杂度分析 hello‑algo File: iteration.java === /* while 循环(两次更新) */ int whileLoopII(int n) { int res = 0; int i = 1; // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i; // 更新条件变量 i++; i *= 2; } return res;0 码力 | 378 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Java版structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n-1, n while (i <= n) { res += i; i++; // 更新条件变量 } return res; } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: 第 2 章 复杂度分析 hello‑algo File: iteration.java === /* while 循环(两次更新) */ int whileLoopII(int n) { int res = 0; int i = 1; // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i; // 更新条件变量 i++; i *= 2; } return res;0 码力 | 378 页 | 18.47 MB | 1 年前3
 Hello 算法 1.1.0 Kotlin版structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n-1, n while (i <= n) { res += i i++ // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: 第 2 章 复杂度分析 hello‑algo File: iteration.kt === /* while 循环(两次更新) */ fun whileLoopII(n: Int): Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i // 更新条件变量 i++ i *= 2 } return res }0 码力 | 381 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Kotlin版structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n-1, n while (i <= n) { res += i i++ // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: 第 2 章 复杂度分析 hello‑algo File: iteration.kt === /* while 循环(两次更新) */ fun whileLoopII(n: Int): Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i // 更新条件变量 i++ i *= 2 } return res }0 码力 | 381 页 | 18.47 MB | 1 年前3
 Hello 算法 1.1.0 Swift版structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n-1, n while i <= n { res += i i += 1 // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: 第 2 章 复杂度分析 hello‑algo iteration.swift === /* while 循环(两次更新) */ func whileLoopII(n: Int) -> Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10, ... while i <= n { res += i // 更新条件变量 i += 1 i *= 2 } return res0 码力 | 379 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 Swift版structure)是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n-1, n while i <= n { res += i i += 1 // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: 第 2 章 复杂度分析 hello‑algo iteration.swift === /* while 循环(两次更新) */ func whileLoopII(n: Int) -> Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10, ... while i <= n { res += i // 更新条件变量 i += 1 i *= 2 } return res0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 C# 版操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n) { res += i; i += 1; // 更新条件变量 } return res; } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 www.hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === File: iteration.cs === /* while 循环(两次更新) */ int WhileLoopII(int n) { int res = 0; int i = 1; // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i; // 更新条件变量 i += 1; i *= 2; } return res;0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 C# 版操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 n) { res += i; i += 1; // 更新条件变量 } return res; } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 www.hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === File: iteration.cs === /* while 循环(两次更新) */ int WhileLoopII(int n) { int res = 0; int i = 1; // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i; // 更新条件变量 i += 1; i *= 2; } return res;0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.2.0 简体中文 Kotlin 版操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 <= n) { res += i i++ // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 www.hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === File: iteration.kt === /* while 循环(两次更新) */ fun whileLoopII(n: Int): Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i // 更新条件变量 i++ i *= 2 } return res }0 码力 | 382 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Kotlin 版操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 <= n) { res += i i++ // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 www.hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === File: iteration.kt === /* while 循环(两次更新) */ fun whileLoopII(n: Int): Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i // 更新条件变量 i++ i *= 2 } return res }0 码力 | 382 页 | 18.48 MB | 10 月前3
 Hello 算法 1.2.0 简体中文 Swift 版操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 <= n { res += i i += 1 // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 www.hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === iteration.swift === /* while 循环(两次更新) */ func whileLoopII(n: Int) -> Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10, ... while i <= n { res += i // 更新条件变量 i += 1 i *= 2 } return res0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Swift 版操作方法,它具 有以下设计目标。 第 1 章 初识算法 www.hello‑algo.com 14 ‧ 空间占用尽量少,以节省计算机内存。 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 <= n { res += i i += 1 // 更新条件变量 } return res } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 www.hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === iteration.swift === /* while 循环(两次更新) */ func whileLoopII(n: Int) -> Int { var res = 0 var i = 1 // 初始化条件变量 // 循环求和 1, 4, 10, ... while i <= n { res += i // 更新条件变量 i += 1 i *= 2 } return res0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.0.0 Java版structure」是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 <= n) { res += i; i++; // 更新条件变量 } return res; } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === File: iteration.java === /* while 循环(两次更新) */ int whileLoopII(int n) { int res = 0; int i = 1; // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i; // 更新条件变量 i++; i *= 2; } return res;0 码力 | 376 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 Java版structure」是计算机中组织和存储数据的方式,具有以下设计目标。 ‧ 空间占用尽量少,以节省计算机内存。 第 1 章 初识算法 hello‑algo.com 14 ‧ 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数 <= n) { res += i; i++; // 更新条件变量 } return res; } while 循环比 for 循环的自由度更高。在 while 循环中,我们可以自由地设计条件变量的初始化和更新步 骤。 第 2 章 复杂度分析 hello‑algo.com 21 例如在以下代码中,条件变量 ? 每轮进行两次更新,这种情况就不太方便用 for 循环实现: // === File: iteration.java === /* while 循环(两次更新) */ int whileLoopII(int n) { int res = 0; int i = 1; // 初始化条件变量 // 循环求和 1, 4, 10, ... while (i <= n) { res += i; // 更新条件变量 i++; i *= 2; } return res;0 码力 | 376 页 | 17.59 MB | 1 年前3
共 373 条
- 1
- 2
- 3
- 4
- 5
- 6
- 38














 
  
 