算法导论【摊还分析】—聚合分析、核算法、势能法
算法导论【摊还分析】—聚合分析、核算法、势能法
- 聚合分析
- 核算法
- 势能法
假定我们对一个数据结构执行一个由 n 个操作组成的操作序列,当 i 严格为 2 的幂时,第 i 个操作的代价为 i,否则代价为 1
聚合分析
总共有n个操作,1,2,4.....,2⌊lgn⌋1,2,4.....,2^{⌊\lg n⌋}1,2,4.....,2⌊lgn⌋,其中有至多k=⌈lgn⌉k=⌈\lg n⌉k=⌈lgn⌉个操作序号为2的幂,则
S=∑k=0⌊lgn⌋2k+(n−⌈lgn⌉)∗1=1∗(1−2⌊lgn⌋+1)1−2+n−⌈lgn⌉=2⌊lgn⌋+1−1+n−⌈lgn⌉=≤3n−⌈lgn⌉−1=O(n)\begin{aligned} S&=\sum_{k=0}^{⌊\lg n⌋}2^k+(n-⌈\lg n⌉)*1\\ &=\cfrac{1*(1-2^{⌊\lg n⌋+1})}{1-2}+n-⌈\lg n⌉\\ &=2^{⌊\lg n⌋+1}-1+n-⌈\lg n⌉\\ &=\le3n-⌈\lg n⌉-1\\ &=O(n) \end{aligned} S=k=0∑⌊lgn⌋2k+(n−⌈lgn⌉)∗1=1−21∗(1−2⌊lgn⌋+1)+n−⌈lgn⌉=2⌊lgn⌋+1−1+n−⌈lgn⌉=≤3n−⌈lgn⌉−1=O(n)
所以每个操作的摊还时间代价为O(n)n=O(1)\cfrac{O(n)}{n}=O(1)nO(n)=O(1)
核算法
设每个操作的代价都为333
第2k−1+1到第2k−12^{k-1}+1到第2^{k}-12k−1+1到第2k−1个操作为非2的幂,多付的代价为2∗(2k−1−1−1+1)=2k−22*(2^{k-1}-1-1+1)=2^k-22∗(2k−1−1−1+1)=2k−2在第2k2^k2k个次操作付的代价为333,则可以用于支付第2k2^k2k次操作的信用为2k−2+3=2k+1>2k2^k-2+3=2^k+1>2^k2k−2+3=2k+1>2k大于第2k2^k2k次操作应该付的代价,故每个操作的摊还代价为O(1)O(1)O(1)
势能法
设势函数为
Φ(D0)=0Φ(Di)=2(i−2lg⌊i⌋)\Phi (D_0) = 0\\ \Phi(D_i) = 2(i-2^{\lg⌊i⌋})\\ Φ(D0)=0Φ(Di)=2(i−2lg⌊i⌋)
- 当i为2的幂时,2⌊lgi⌋=i,⌊lg(i−1)⌋+1=⌊lgi⌋2^{⌊\lg i⌋}=i,⌊\lg (i-1)⌋+1=⌊\lg i⌋2⌊lgi⌋=i,⌊lg(i−1)⌋+1=⌊lgi⌋
c^i=ci+Φ(Di)−Φ(Di−1)=i+2(i−2⌊lgi⌋)−2(i−1−2⌊lgi−1⌋)=i+2i−2i+2−2⌊lgi⌋+1+2⌊lgi⌋+1=i−i−2⌊lgi⌋+2⌊lgi⌋+1+2=2\begin{aligned} \hat c_i&=c_i+\Phi(D_i)-\Phi(D_{i-1})\\ &=i+2(i-2^{⌊\lg i⌋})- 2(i-1-2^{⌊\lg i-1⌋})\\ &=i+2i-2i+2-2^{⌊\lg i⌋+1}+2^{⌊\lg i⌋+1}\\ &=i-i-2^{⌊\lg i⌋}+2^{⌊\lg i⌋+1}+2\\ &=2 \end{aligned} c^i=ci+Φ(Di)−Φ(Di−1)=i+2(i−2⌊lgi⌋)−2(i−1−2⌊lgi−1⌋)=i+2i−2i+2−2⌊lgi⌋+1+2⌊lgi⌋+1=i−i−2⌊lgi⌋+2⌊lgi⌋+1+2=2 - 当i不为2的幂时,2⌊lg(i−1)⌋=2⌊lgi⌋2^{⌊\lg (i-1)⌋}=2^{⌊\lg i⌋}2⌊lg(i−1)⌋=2⌊lgi⌋
c^i=ci+Φ(Di)−Φ(Di−1)=1+2(i−2⌊lgi⌋)−2(i−1−2⌊lgi−1⌋)=1+2i−2i+2−2(2⌊lgi⌋−2⌊lgi−1⌋)=1+2=3\begin{aligned} \hat c_i&=c_i+\Phi(D_i)-\Phi(D_{i-1})\\ &=1+2(i-2^{⌊\lg i⌋})- 2(i-1-2^{⌊\lg i-1⌋})\\ &=1+2i-2i+2-2(2^{⌊\lg i⌋}-2^{⌊\lg i-1⌋})\\ &=1+2\\ &=3 \end{aligned} c^i=ci+Φ(Di)−Φ(Di−1)=1+2(i−2⌊lgi⌋)−2(i−1−2⌊lgi−1⌋)=1+2i−2i+2−2(2⌊lgi⌋−2⌊lgi−1⌋)=1+2=3
故每个操作摊还复杂度为O(1)O(1)O(1)
相关文章:
算法导论【摊还分析】—聚合分析、核算法、势能法
算法导论【摊还分析】—聚合分析、核算法、势能法聚合分析核算法势能法假定我们对一个数据结构执行一个由 n 个操作组成的操作序列,当 i 严格为 2 的幂时,第 i 个操作的代价为 i,否则代价为 1 聚合分析 总共有n个操作,1,2,4.....…...
【LeetCode】剑指 Offer 08. 二叉树的下一个节点 p65 -- Java Version
题目链接:无题目链接,不知道为啥力扣上找不到这一题。 1. 题目介绍(08. 二叉树的下一个节点) 题目:给定一个二叉树和其中的一个节点,请找出中序遍历顺序的下一个节点并且返回。注意,树中的节点…...
Python 之 Pandas Series 数据结构
文章目录一、Series 结构二、数据结构 Series 创建1. 创建1.1 列表/数组作为数据源创建 Series1.2 字典作为数据源创建 Series1.3 通过标量创建2. 参数说明2.1 index 参数2.2 name 参数2.3 copy 参数三、Series 的索引/切片1. 下标索引2. 标签索引3. 切片四、Series 数据结构的…...
【java基础】Java常用类———包装类
包装类 wrapper 装箱与拆箱 装箱:基本类型->包装类; 拆箱: 包装类->基本类型 public class Integer01 {public static void main(String[] args) {//演示int <--> Integer 的装箱和拆箱//jdk5前是手动装箱和拆箱//手动装箱 in…...
linux shell 入门学习笔记3 shebang
shebang 计算机程序中,shebang指的是出现在文本文件的第一行前两个字符#! 在Unix系统中,程序会分析shebang后面的内容,作为解释器的指令,例如 以#!/bin/sh 开头的文件,程序在执行的时候会调用/bin/sh,也就…...
写作小课堂:简历模版【A4纸正反两面】(20230219)
文章目录 I 联系方式II 个人信息III 求职意向IV 工作经验2018年-11月-至今全城淘信息技术服务有限公司2017年07月-2018年-11月湖南微流网络科技有限公司2014年06月-2017年07月湖南高阳通联信息技术有限公司V 项目经验2018年11月-至今全城淘淘管家2017年10月-2018年11月ASO(机刷…...
一文搞懂 DevOps
前言 DevOps作为一个热门的概念,近年来频频出现在各大技术社区和媒体的文章中,备受行业大咖的追捧,也吸引了很多吃瓜群众的围观。 那么,DevOps是什么呢? 有人说它是一种方法,也有人说它是一种工具&#…...
深入讲解Kubernetes架构-租约
分布式系统通常需要租约(Lease);租约提供了一种机制来锁定共享资源并协调集合成员之间的活动。 在 Kubernetes 中,租约概念表示为 coordination.k8s.io API 组中的 Lease 对象, 常用于类似节点心跳和组件级领导者选举等…...
微信小程序学习第11天——Vant Weapp组件库、API Promise化、全局数据共享Mobx、分包
目录一、小程序对npm 的限制二、使用Vant Weapp组件库1、安装组件2、使用组件3、定制全局样式三、API Promise化1、下载miniprogram-api-promise2、引入3、使用四、全局数据共享五、分包1、分包概念2、使用分包3、独立分包4、分包预下载一、小程序对npm 的限制 在小程序中使用…...
Python3-基本数据类型
Python3 基本数据类型 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。 等号&…...
RPA落地指南:什么是RPA
什么是RPA RPA在企业中起什么作用并扮演什么角色呢?想要充分了解RPA,我们需要知道RPA的相关概念、特点、功能以及能解决的问题。接下来对这些内容进行详细介绍。 1.1 RPA的3个核心概念 RPA的中文译名是“机器人流程自动化”,顾名思义&…...
跨域问题的三种解决办法
我们平时对于前后端联调的项目,以下的错误是经常常见的,我们查看浏览器报错: Access to XMLHttpRequest at http://localhost:63110/system/dictionary/all fromorigin http://localhost:8601 has been blocked by CORS policy: No Access…...
c++提高篇——string容器
一、string基本概念 string是C风格的字符串,而string本质上是一个类。 与c语言不同,string是一个类,类内部封装了char*,管理这个字符串,是一个char型的容器。在根本上与c语言字符串是一致的。 在string类内部封装了很…...
[软件工程导论(第六版)]第6章 详细设计(复习笔记)
文章目录6.1 结构程序设计6.2 人机界面设计6.3 过程设计的工具6.3.1 程序流程图(程序框图)6.3.2 盒图(N-S图)6.3.3 PAD图(问题分析图)6.3.4 判定表6.3.5 判断树6.3.6 过程设计语言6.4 面向数据结构的设计方…...
RabbitMQ核心内容:实战教程(java)
文章目录一、安装二、入门1.分类2.核心概念3.工作原理4.六大模式三、模式一:"Hello World!"1.依赖2.生产者代码3.消费者代码四、模式二:Work Queues1.工作原理2.工具类代码:连接工厂3.消费者代码4.生产者代码5.分发策略不公平分发预…...
RK356x U-Boot研究所(命令篇)3.7 pci与nvme命令的用法
平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3文章目录 一、设备树与config配置二、pci命令的定义三、nvme命令的定义四、pci与nvme命令的用法3.1 pci总线扫描3.2 nvme设备信息3.3 nvme设备读写一、设备树与config配置 RK3568支持PCIe接口,例如ROC-RK3568-PC: 原理图如…...
微信头像昵称获取能力的变化导致了我半年没更新小程序
背景 2022年9月份,微信更改了获取头像昵称的规则,回收了原有 wx.getUserProfile 中的部分能力,为了减小对【微点记账】小程序的影响,长达半年未做任何更新,今天为了增加这个聊天机器人的功能,不得不重新查…...
【深度学习编译器系列】1. 为什么需要深度学习编译器?
本系列是自学深度学习编译器过程中的一些笔记和总结,参考文献在文末。 1. 概述 深度学习(DL)编译器的产生有两方面的因素:深度学习模型的广泛应用,以及深度学习芯片的层出不穷。 一方面,我们现在有非常多…...
数据结构与算法总结整理(超级全的哦!)
数据结构与算法基础大O表示法时间复杂度大O表示法时间复杂度排序:最坏时间复杂度时间复杂度的几条基本计算规则内存工作原理什么是内存内存主要分为三种存储器随机存储器(RAM)只读存储器(ROM)高速缓存(Cach…...
DPDK — MALLOC 堆内存管理组件
目录 文章目录 目录MALLOC 堆内存管理组件rte_malloc() 接口malloc_heap 结构体malloc_elem 结构体内存初始化流程内存申请流程内存释放流程MALLOC 堆内存管理组件 MALLOC(堆内存管理组件)基于 hugetlbfs 内核文件系统来实现,能够从 HugePage 中分配一块连续的物理大页内存…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
