 分布式任务系统cronsun@Copyright Sunteng Technology 分布式任务系统 cronsun 苏创绩 @Copyright Sunteng Technology 目录 01 任务系统 02 分布式任务系统 03 cronsun 04 心得体会 @Copyright Sunteng Technology Part One 01 任务系统 @Copyright Sunteng Technology Part Two 02 分布式任务系统 @Copyright Sunteng Technology 分布式系统的特点 1. 分布性 2. 对等性 3. 并发性 4. 缺乏全局时钟 5. 故障总是会发生 @Copyright Sunteng Technology 分布式 cron 分布式crond 分布式crontab cmd1 cmd2 cmd3 Chronos Chronos 是一个运行在 Mesos 之上的具有分布式容错特性的作业调度器 @Copyright Sunteng Technology Dkron 分布式高可用的任务调度系统 @Copyright Sunteng Technology 我眼里的“西施” 1. 可替代 cron 2. 分布式、高可用 3. 支持多种任务属性 4. 易用 5. 易部署 @Copyright0 码力 | 48 页 | 1.52 MB | 1 年前3 分布式任务系统cronsun@Copyright Sunteng Technology 分布式任务系统 cronsun 苏创绩 @Copyright Sunteng Technology 目录 01 任务系统 02 分布式任务系统 03 cronsun 04 心得体会 @Copyright Sunteng Technology Part One 01 任务系统 @Copyright Sunteng Technology Part Two 02 分布式任务系统 @Copyright Sunteng Technology 分布式系统的特点 1. 分布性 2. 对等性 3. 并发性 4. 缺乏全局时钟 5. 故障总是会发生 @Copyright Sunteng Technology 分布式 cron 分布式crond 分布式crontab cmd1 cmd2 cmd3 Chronos Chronos 是一个运行在 Mesos 之上的具有分布式容错特性的作业调度器 @Copyright Sunteng Technology Dkron 分布式高可用的任务调度系统 @Copyright Sunteng Technology 我眼里的“西施” 1. 可替代 cron 2. 分布式、高可用 3. 支持多种任务属性 4. 易用 5. 易部署 @Copyright0 码力 | 48 页 | 1.52 MB | 1 年前3
 4 seata-golang 分布式事务框架微信号: scottlewis 分布式事务框架 Seata-Golang 刘晓敏 H3C ⽬ 录 Demo 演示 01 Seata 原理 02 Mysql driver 原理 03 Mysql driver 接⼊ 04 TODO & QA 05 分布式事务就是指事务的参与者、⽀持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系 统的不同节点之上。简单的说,就是 统的不同节点之上。简单的说,就是⼀次⼤的操作由不同的⼩操作组成,这些⼩的操作分布在不同的服务器 上,且属于不同的应⽤,分布式事务需要保证这些⼩操作要么全部成功,要么全部失败。本质上来说,分布 式事务就是为了保证不同数据库的数据⼀致性。 什么是分布式事务问题? Demo 演示 整体机制: • ⼀阶段:业务数据和回滚⽇志记录在同⼀个本地事务中提交,释放本地锁和连接资源。 • ⼆阶段: • 提交异步化,⾮常快速地完成。0 码力 | 14 页 | 3.23 MB | 1 年前3 4 seata-golang 分布式事务框架微信号: scottlewis 分布式事务框架 Seata-Golang 刘晓敏 H3C ⽬ 录 Demo 演示 01 Seata 原理 02 Mysql driver 原理 03 Mysql driver 接⼊ 04 TODO & QA 05 分布式事务就是指事务的参与者、⽀持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系 统的不同节点之上。简单的说,就是 统的不同节点之上。简单的说,就是⼀次⼤的操作由不同的⼩操作组成,这些⼩的操作分布在不同的服务器 上,且属于不同的应⽤,分布式事务需要保证这些⼩操作要么全部成功,要么全部失败。本质上来说,分布 式事务就是为了保证不同数据库的数据⼀致性。 什么是分布式事务问题? Demo 演示 整体机制: • ⼀阶段:业务数据和回滚⽇志记录在同⼀个本地事务中提交,释放本地锁和连接资源。 • ⼆阶段: • 提交异步化,⾮常快速地完成。0 码力 | 14 页 | 3.23 MB | 1 年前3
 1.5 Go 语言构建高并发分布式系统实践以360消息推送系统为例 如何应对的? go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? ⺫⽬目录 具有go特⾊色的运维 在⾼高并发,通信交互复杂,重业务逻辑的分布式系统中, Go语⾔言优势体现在:开发体验好 、⼀一定量级下服务稳定 、性能满⾜足 需要 ⼀一定量级下服务稳定: 50+内部产品,万款开发平台app 实时⻓长连接数亿量级,⽇日独数⼗十亿量级 瓶颈 散列在协程⾥里⾯面的io buffer和 对象不复⽤用 问题与瓶颈 问题与瓶颈 瓶颈 散列在协程⾥里⾯面的io 问题与瓶颈 奔放的协程使⽤用 ⺴⽹网络环境不好 引起激增 问题与瓶颈 2~3s的GC 瓶颈 散列在协程⾥里⾯面的io 问题与瓶颈 问题与瓶颈 奔放的协程使⽤用 接⼝口响应速度 降低,重试 增多,压⼒力倍增 问题与瓶颈 2~3s的GC 瓶颈 散列在协程⾥里⾯面的io 问题与瓶颈 奔放的协程使⽤用 内存暴涨 问题与瓶颈 io阻塞, 协程激增 瓶颈 问题与瓶颈 问题与瓶颈 如何应对的?0 码力 | 39 页 | 5.23 MB | 1 年前3 1.5 Go 语言构建高并发分布式系统实践以360消息推送系统为例 如何应对的? go语⾔言在基础服务开发领域的优势? 我遭遇了哪些挑战? ⺫⽬目录 具有go特⾊色的运维 在⾼高并发,通信交互复杂,重业务逻辑的分布式系统中, Go语⾔言优势体现在:开发体验好 、⼀一定量级下服务稳定 、性能满⾜足 需要 ⼀一定量级下服务稳定: 50+内部产品,万款开发平台app 实时⻓长连接数亿量级,⽇日独数⼗十亿量级 瓶颈 散列在协程⾥里⾯面的io buffer和 对象不复⽤用 问题与瓶颈 问题与瓶颈 瓶颈 散列在协程⾥里⾯面的io 问题与瓶颈 奔放的协程使⽤用 ⺴⽹网络环境不好 引起激增 问题与瓶颈 2~3s的GC 瓶颈 散列在协程⾥里⾯面的io 问题与瓶颈 问题与瓶颈 奔放的协程使⽤用 接⼝口响应速度 降低,重试 增多,压⼒力倍增 问题与瓶颈 2~3s的GC 瓶颈 散列在协程⾥里⾯面的io 问题与瓶颈 奔放的协程使⽤用 内存暴涨 问题与瓶颈 io阻塞, 协程激增 瓶颈 问题与瓶颈 问题与瓶颈 如何应对的?0 码力 | 39 页 | 5.23 MB | 1 年前3
 1.2 Go 在分布式系统开发中的应用Distributed conponents 起因以及一些差异 not gonna cover every details zookeeper vs etcd 起因: reborndb是一个分布式redis集群框架 支持透明切换引擎 为了同时支持zookeeper和etcd zookeeper vs etcd zookeeper: session etcd: stateless0 码力 | 20 页 | 131.34 KB | 1 年前3 1.2 Go 在分布式系统开发中的应用Distributed conponents 起因以及一些差异 not gonna cover every details zookeeper vs etcd 起因: reborndb是一个分布式redis集群框架 支持透明切换引擎 为了同时支持zookeeper和etcd zookeeper vs etcd zookeeper: session etcd: stateless0 码力 | 20 页 | 131.34 KB | 1 年前3
 云原生时代分布式链路追踪实践-曲赛云原生时代分布式链路 追踪实践 2021-08 曲赛 (saiqu) 微服务架构的困境 故障定位难 极高的沟通和交接成本 错综难懂的模块依赖关系 链路梳理难 日志分散 定位过程“击鼓传花” 跨端性能瓶颈分析繁杂 性能分析难 缺乏对系统整体认知的把控 不合理的调用关系 不合理的直连存储 架构治理能力匮乏 云原生可观测性 3 4 Trace 标准规范 5 标准 平台提供分布式追踪,监控,日志, 多维染色,容量评估,架构治理等能力的云原生可观测性系统。 愿景:让开发一切尽在掌握 - 分布式追踪 - 日志 - 服务监控 - 火焰图 - 存储监控 - SDK监控 - CI/CD监控 - 发布变更 - 告警历史 - 服务拓扑图 正交,模块化 相关性 多租户 天机阁2.0 架构 13 天机阁2.0 实践 14 分布式追踪 天机阁2 天机阁2.0 实践 15 分布式追踪 Log详情 点击Log详情中traceID字段的按 钮拉起Trace详情。 天机阁2.0 实践 16 分布式追踪 监控面板 监控到错误码111,点击面板跳转 到相关时间段的分布式追踪 感谢倾听0 码力 | 17 页 | 2.47 MB | 1 年前3 云原生时代分布式链路追踪实践-曲赛云原生时代分布式链路 追踪实践 2021-08 曲赛 (saiqu) 微服务架构的困境 故障定位难 极高的沟通和交接成本 错综难懂的模块依赖关系 链路梳理难 日志分散 定位过程“击鼓传花” 跨端性能瓶颈分析繁杂 性能分析难 缺乏对系统整体认知的把控 不合理的调用关系 不合理的直连存储 架构治理能力匮乏 云原生可观测性 3 4 Trace 标准规范 5 标准 平台提供分布式追踪,监控,日志, 多维染色,容量评估,架构治理等能力的云原生可观测性系统。 愿景:让开发一切尽在掌握 - 分布式追踪 - 日志 - 服务监控 - 火焰图 - 存储监控 - SDK监控 - CI/CD监控 - 发布变更 - 告警历史 - 服务拓扑图 正交,模块化 相关性 多租户 天机阁2.0 架构 13 天机阁2.0 实践 14 分布式追踪 天机阁2 天机阁2.0 实践 15 分布式追踪 Log详情 点击Log详情中traceID字段的按 钮拉起Trace详情。 天机阁2.0 实践 16 分布式追踪 监控面板 监控到错误码111,点击面板跳转 到相关时间段的分布式追踪 感谢倾听0 码力 | 17 页 | 2.47 MB | 1 年前3
 Go 构建大型开源分布式数据库技术内幕Go 搭建大型开源分布式数据库技术内幕 shenli@PingCAP 关于我 ● 申砾 (Shen Li) ● TiDB 技术负责人 ● 网易有道 / 360搜索 / PingCAP ● Infrastructure software engineer 为什么需要一个新的数据库? 从单机数据库到 NewSQL ● 关系型数据库 ● NoSQL ● 中间件 ● NewSQL Processing) ● 24/7 availability, even in case of datacenter outages ● Open source, of course 如何构建分布式数据库? 原则 ● 分层 ● Make it right and make it fast. ● 测试很重要 ● 简单易用 ● 和社区结合 架构 TiKV TiKV TiKV TiKV RemovePeer] ● HotRegionBalance ○ 统计一段时间内的 Region 流量排行榜 ○ 统计排行榜 TopN 在 Store 的分布情况 ○ 生成 Operator 使之均衡 调度的难点 ● 难以评判什么样的数据分布情况是最优解 ○ 机器配置不同 ○ CPU、内存、磁盘、网络多种因素相互制约 ○ 用户场景多变 ● 调度所依赖的集群状态不一定是最新的 ● 调度本身也会带来系统负担0 码力 | 44 页 | 649.68 KB | 1 年前3 Go 构建大型开源分布式数据库技术内幕Go 搭建大型开源分布式数据库技术内幕 shenli@PingCAP 关于我 ● 申砾 (Shen Li) ● TiDB 技术负责人 ● 网易有道 / 360搜索 / PingCAP ● Infrastructure software engineer 为什么需要一个新的数据库? 从单机数据库到 NewSQL ● 关系型数据库 ● NoSQL ● 中间件 ● NewSQL Processing) ● 24/7 availability, even in case of datacenter outages ● Open source, of course 如何构建分布式数据库? 原则 ● 分层 ● Make it right and make it fast. ● 测试很重要 ● 简单易用 ● 和社区结合 架构 TiKV TiKV TiKV TiKV RemovePeer] ● HotRegionBalance ○ 统计一段时间内的 Region 流量排行榜 ○ 统计排行榜 TopN 在 Store 的分布情况 ○ 生成 Operator 使之均衡 调度的难点 ● 难以评判什么样的数据分布情况是最优解 ○ 机器配置不同 ○ CPU、内存、磁盘、网络多种因素相互制约 ○ 用户场景多变 ● 调度所依赖的集群状态不一定是最新的 ● 调度本身也会带来系统负担0 码力 | 44 页 | 649.68 KB | 1 年前3
 Hello 算法 1.1.0 Go版。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的 “知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领, 相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。 我深深赞同费曼教授所言:“Knowledge isn’t free. You have 请注意,因为当 ? ≥ 4 时恒有 ?! > 2? ,所以阶乘阶比指数阶增长得更快,在 ? 较大时也是不可接受的。 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 们可以放心地使用算法。 从上述示例可以看出,最差时间复杂度和最佳时间复杂度只出现于“特殊的数据分布”,这些情况的出现概率 可能很小,并不能真实地反映算法运行效率。相比之下,平均时间复杂度可以体现算法在随机输入数据下的 运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相0 码力 | 383 页 | 18.48 MB | 1 年前3 Hello 算法 1.1.0 Go版。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的 “知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领, 相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。 我深深赞同费曼教授所言:“Knowledge isn’t free. You have 请注意,因为当 ? ≥ 4 时恒有 ?! > 2? ,所以阶乘阶比指数阶增长得更快,在 ? 较大时也是不可接受的。 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 们可以放心地使用算法。 从上述示例可以看出,最差时间复杂度和最佳时间复杂度只出现于“特殊的数据分布”,这些情况的出现概率 可能很小,并不能真实地反映算法运行效率。相比之下,平均时间复杂度可以体现算法在随机输入数据下的 运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相0 码力 | 383 页 | 18.48 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Go 版。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的 “知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领, 相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。 我深深赞同费曼教授所言:“Knowledge isn’t free. You have 请注意,因为当 ? ≥ 4 时恒有 ?! > 2? ,所以阶乘阶比指数阶增长得更快,在 ? 较大时也是不可接受的。 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 们可以放心地使用算法。 从上述示例可以看出,最差时间复杂度和最佳时间复杂度只出现于“特殊的数据分布”,这些情况的出现概率 可能很小,并不能真实地反映算法运行效率。相比之下,平均时间复杂度可以体现算法在随机输入数据下的 运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相0 码力 | 384 页 | 18.49 MB | 10 月前3 Hello 算法 1.2.0 简体中文 Go 版。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的 “知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领, 相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。 我深深赞同费曼教授所言:“Knowledge isn’t free. You have 请注意,因为当 ? ≥ 4 时恒有 ?! > 2? ,所以阶乘阶比指数阶增长得更快,在 ? 较大时也是不可接受的。 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 们可以放心地使用算法。 从上述示例可以看出,最差时间复杂度和最佳时间复杂度只出现于“特殊的数据分布”,这些情况的出现概率 可能很小,并不能真实地反映算法运行效率。相比之下,平均时间复杂度可以体现算法在随机输入数据下的 运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相0 码力 | 384 页 | 18.49 MB | 10 月前3
 Hello 算法 1.0.0 Golang版。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的 “知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领, 相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。 我深深赞同费曼教授所言:“Knowledge isn’t free. You have 请注意,因为当 ? ≥ 4 时恒有 ?! > 2? ,所以阶乘阶比指数阶增长得更快,在 ? 较大时也是不可接受的。 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 们可以放心地使用算法。 从上述示例可以看出,最差时间复杂度和最佳时间复杂度只出现于“特殊的数据分布”,这些情况的出现概率 可能很小,并不能真实地反映算法运行效率。相比之下,平均时间复杂度可以体现算法在随机输入数据下的 运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相0 码力 | 382 页 | 17.60 MB | 1 年前3 Hello 算法 1.0.0 Golang版。本书是我对这个问题给出的答案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的 “知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领, 相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。 我深深赞同费曼教授所言:“Knowledge isn’t free. You have 请注意,因为当 ? ≥ 4 时恒有 ?! > 2? ,所以阶乘阶比指数阶增长得更快,在 ? 较大时也是不可接受的。 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 们可以放心地使用算法。 从上述示例可以看出,最差时间复杂度和最佳时间复杂度只出现于“特殊的数据分布”,这些情况的出现概率 可能很小,并不能真实地反映算法运行效率。相比之下,平均时间复杂度可以体现算法在随机输入数据下的 运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概率都是相0 码力 | 382 页 | 17.60 MB | 1 年前3
 Hello 算法 1.0.0b4 Golang版本书是我对此问题的给出的答案,虽然不一定正确, 但至少是一次积极的尝试。这本书虽然不足以让你直接拿到 Offer ,但会引导你探索数据结构与算法的“知 识地图”,带你了解不同“地雷”的形状大小和分布位置,让你掌握各种“排雷方法”。有了这些本领,相信 你可以更加自如地应对刷题和阅读文献,逐步构建起完整的知识体系。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo factorialRecur(n - 1) } return count } Figure 2‑8. 阶乘阶的时间复杂度 2.2.6. 最差、最佳、平均时间复杂度 某些算法的时间复杂度不是固定的,而是与输入数据的分布有关。例如,假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,但元素顺序是随机打乱的;算法的任务是返回元素 1 的索引。我们可 以得出以下结论: ‧ 当 nums 让我们可以放心地使用算法。 从上述示例可以看出,最差或最佳时间复杂度只出现在“特殊分布的数据”中,这些情况的出现概率可能很 小,因此并不能最真实地反映算法运行效率。相较之下,「平均时间复杂度」可以体现算法在随机输入数据下 的运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概0 码力 | 347 页 | 27.40 MB | 1 年前3 Hello 算法 1.0.0b4 Golang版本书是我对此问题的给出的答案,虽然不一定正确, 但至少是一次积极的尝试。这本书虽然不足以让你直接拿到 Offer ,但会引导你探索数据结构与算法的“知 识地图”,带你了解不同“地雷”的形状大小和分布位置,让你掌握各种“排雷方法”。有了这些本领,相信 你可以更加自如地应对刷题和阅读文献,逐步构建起完整的知识体系。 本书中的代码附有可一键运行的源文件,托管于 github.com/krahets/hello‑algo factorialRecur(n - 1) } return count } Figure 2‑8. 阶乘阶的时间复杂度 2.2.6. 最差、最佳、平均时间复杂度 某些算法的时间复杂度不是固定的,而是与输入数据的分布有关。例如,假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,但元素顺序是随机打乱的;算法的任务是返回元素 1 的索引。我们可 以得出以下结论: ‧ 当 nums 让我们可以放心地使用算法。 从上述示例可以看出,最差或最佳时间复杂度只出现在“特殊分布的数据”中,这些情况的出现概率可能很 小,因此并不能最真实地反映算法运行效率。相较之下,「平均时间复杂度」可以体现算法在随机输入数据下 的运行效率,用 Θ 记号来表示。 对于部分算法,我们可以简单地推算出随机数据分布下的平均情况。比如上述示例,由于输入数组是被打乱 的,因此元素 1 出现在任意索引的概0 码力 | 347 页 | 27.40 MB | 1 年前3
共 52 条
- 1
- 2
- 3
- 4
- 5
- 6














