CLRS 17.2核算法
17.2-1
每个 k k 次PUSH
或POP
执行一次COPY
,那么使PUSH
和POP
的 costcost 为 2,1 2,1 份用来支付本身的操作,另 1 1 份用于COPY。
17.2-2
每次操作的代价都是 33,当 i i 不是 22 的幂时,支付一美元,信用为 2 2 美元;否则就支付 ii 美元,使用信用支付。
由于摊还代价是 3 3 美元,∑i=1nc^i=3n\sum \limits_{i=1}^{n}\hat{c}_i=3n,由练习17.1-3得 ∑i=1nci<3n \sum \limits_{i=1}^{n}c_i。即信用不会为负。最后的代价是 O(n) O(n)。
17.2-3
使用一个指针记录最高位 A.max A.max 是否 1,初始时设为 -1。
INCREMENT(A)i = 0while i < A.length and A[i] == 1A[i] = 0i = i + 1if i < A.lengthA[i] = 1// Additions to book’s INCREMENT start here.if i > A.maxA.max = ielse A.max = -1RESET(A)for i = 0 to A.maxA[i] = 0A.max = -1
和书上一样,假设 1 美元用于翻转某一位,此外还假设更新 A.max A.max 需要 1 美元。
对INCREMENT
操作,1 美元用于设置某位为 1,1 美元用于信用,因此一共需要 2 美元。
我们还需要 1 美元用于更新 max max,如果 max max 增加,放置额外的 1 美元在新的最高位上(如果不增加,就浪费掉吧)。对于重置操作,它操纵的位数最多到达 A.max A.max,并且在 A.max A.max 为 1 的时候,低于 A.max A.max 的都曾变为 1。将低位归零的时候使用信用支付,所以只需支付 1 美元在重设 max max 上即可。
最后得,对INCREMENT
操作花费 3 美元,RESET
操作花费 1 美元,最后得到时间是 O(n) O(n)。
CLRS 17.2核算法相关推荐
- Python小白的数学建模课-17.条件最短路径算法
条件最短路径问题,指带有约束条件.限制条件的最短路径问题.例如: 顶点约束,包括必经点或禁止点的限制: 边的约束,包括必经路段.禁行路段和单向路段:无权路径长度的限制,如要求经过几步或不超过几步到达终 ...
- 【C/C++】C语言复习笔记-17种小算法-解决实际问题
判断日期为一年中的第几天(考虑闰年) 1 /* 2 * 计算该日在本年中是第几天,注意闰年问题 3 * 以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天 4 * 特殊情况,闰年且 ...
- CLRS 17.4动态表
17.4-1 1) 根据书上第十一章的定理11.6或11.7知,如果装填因子 α=1 \alpha=1,不成功的探测次数将会是无穷大,因此严格小于 1. 2) 动态开发地址散列表的插入算法在 α≥0. ...
- CLRS 5.3随机算法
5.3-1 改变循环的下标,把第一次循环结果作为初始条件. RANDOMIZE-IN-PLACE(A)n = A.lengthswap A[1] with A[Random(1, n)]for i = ...
- C:求两个数的最大公约数详解(硬核算法,辗转相除法,更相减损法)
最大公因数,也称最大公约数.最大公因子. 定义: 指两个或多个整数共有约数中最大的一个. a,b的最大公约数 记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有 ...
- paper 17 : 机器学习算法思想简单梳理
前言: 本文总结的常见机器学习算法(主要是一些常规分类器)大概流程和主要思想. 朴素贝叶斯: 有以下几个地方需要注意: 1. 如果给出的特征向量长度可能不同,这是需要归一化为通长度的向量(这里以文本分 ...
- CLRS 16.2贪心算法的原理
16.2-1 此处证明的思想是假设有一个最优解,然后可以由贪心算法得到此最优解. 设 S={1,2,...,n} S=\{1,2,...,n\} 个商品,并已经按平均价值从高到底排序,即 viwi≥v ...
- CLRS 17.3势能法
17.3-1 令 Φ′(Di)=Φ(Di)−Φ(D0) Φ'(D_i)=Φ(D_i)-Φ(D_0)即可. 17.3-2 定义势函数: Φ(D0)=0,Φ(Di)=2i−2⌊lgi⌋+1+1,for i ...
- 王道综合题17.设计一个算法用于判断带头结点的循环双链表是否对称及其注意思考:while循环第二个判断条件易误写成p->next!=q,分析这样会产生什么问题。
算法思想: 让p从左向右扫描,q从右向左扫描,直到它们指向同一结点(p==q,当循环双链表中结点个数为奇数时)或相邻(p->next=q或q->prior=p,当循环双链表中结点个数为偶数 ...
最新文章
- 总结 | 2020年TOP 10计算机视觉论文:代码,解读,还有demo视频!
- java ee 期末考试_JAVA EE 期末试题 (1)
- java 应用程序的打包发行
- boost::sort模块实现spreadsort 浮点排序示例
- 为敏感信息设置安全屏障
- mysql 注入 file load_Mysql注入中into outfile和load_file()总结
- 同步代码块和同步方法案例实战
- 从零开始使用webpack 4, Babel 7创建一个React项目
- shell编程三大神器之grep
- 身份证阅读器身份证读卡器Linux系统二次开发包(含Linux身份证相片解码库)
- 安卓模拟位置之夜神模拟器
- Kick Start Round A 2022
- linux时间同步负数,Ubuntu 18.04 Bionic Beaver Linux上的NTP服务器配置
- 机器学习-支持向量机SVM算法
- Installed Build Tools revision 32.0.0 is corrupted. Remove and install again using the SDK Manager
- i31115g4和r34300u哪个好
- 风河产品license介绍(Wind River Product Licensing video)
- 从客观角度谈淘客推广 专注才是王道
- YUV与RGB间的转换公式
- 精仿苹果x开机android,800元高仿iPhone X以假乱真!更可怕的是奸商套路