算法导论【摊还分析】—聚合分析、核算法、势能法
算法导论【摊还分析】—聚合分析、核算法、势能法
- 聚合分析
- 核算法
- 势能法
假定我们对一个数据结构执行一个由 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 中分配一块连续的物理大页内存…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
