算法导论习题解-第17章摊还分析

总结

记账法

相当于每月领取一定的零花钱,用来支付实际费用,只要在任何时候余额不为负。那么总花费一定不超过总的零花钱。必须条件,同时也是缺点:任何时候余额不为负。

势能法

条件比记账法宽松。对于数据结构的每个状态,定义一个势能P(i),第i步操作的摊还代价记为A[i] = c[i] + P(i)-P(i-1),只要P(n) >= P(0),摊还代价就不会超过实际代价。即用前面积累起来的势能支付后面代价较大的操作。

习题编号以第三版为准。

#17.3-2 动态扩张表

对一个数据结构执行由n个操作组成的序列,当i为2的幂时,第i个操作的代价为i,否则为1。分别使用聚合分析(#17.1-3),记账法(#17.2-2)和势能法(#17.3-2)分析摊还代价。

解:实际就是动态扩张表,当容量为2的幂时,容量加倍。见课本17.4节对动态表的分析。记账法:每个操作摊还代价记为3。势能法:Potential(i) = 2*(i-maxP2)其中maxP2是不超过i的最大的2的幂,比如Potential(8)=0, Potential(9)=2, ... Potential(15)=14

#17-1 位逆序的二进制计数器

解:实际就是通过位操作实现课本中的二进制计数器,只不过自增是从左向右进行而不是从右向左。由课本中的分析可知,自增操作的平摊代价为O(1)。普通计数器代码如下:

public class Counter {
    
    public static int increase(int n) {
        int b &
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录(Table of Contents)   前言(Preface)   第一部分(Part I) 基础(Foundations)   第一 计算中算法的角色(The Role of Algorithms in Computing)   第二 开始(Getting Started)   第三 函数的增长率(Growth of Functions)   第四 递归(Recurrences)   第五 概率分析与随机化算法(Probabilistic Analysis and Randomized Algorithms)   第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics)   第六 堆排序(Heapsort)   第七 快速排序(Quicksort)   第八 线性时间中的排序(Sorting in Linear Time)   第九 中值与顺序统计(Medians and Order Statistics)   第三部分(Part III) 数据结构(Data Structures)   第十 基本的数据结构(Elementary Data Structures)   第十一 散列表(Hash Tables)   第十二 二叉查找树(Binary Search Trees)   第十三 红-黑树(Red-Black Trees)   第十四 扩充的数据结构(Augmenting Data Structures)   第四部分(Part IV) 高级的设计与分析技术(Advanced Design and Analysis Techniques)   第十五 动态规划(Dynamic Programming)   第十六 贪婪算法(Greedy Algorithms)   第十七 分摊分析(Amortized Analysis)   第五部分(Part V) 高级的数据结构(Advanced Data Structures)   第十八 B-树(B-Trees)   第十九 二项式堆(Binomial Heaps)   第二十 斐波纳契堆(Fibonacci Heaps)   第二十一 不相交集的数据结构(Data Structures for Disjoint Sets)   第六部分(Part VI) 图算法(Graph Algorithms)   第二十二 基本的图算法(Elementary Graph Algorithms)   第二十三 最小生成树(Minimum Spanning Trees)   第二十四 单源最短路径(Single-Source Shortest Paths)   第二十五 全对的最短路径(All-Pairs Shortest Paths)   第二十六 最大流(Maximum Flow)   第七部分(Part VII) 精选的主题(Selected Topics)   第二十七 排序网络(Sorting Networks)   第二十八 矩阵运算(Matrix Operations)   第二十九 线性规划(Linear Programming)   第三十 多项式与快速傅里叶变换(Polynomials and the FFT)   第三十一 数论算法(Number-Theoretic Algorithms)   第三十二 字符串匹配(String Matching) ......................................................
第一部分(Part I) 基础(Foundations) 第一 计算中算法的角色(The Role of Algorithms in Computing) 第二 开始(Getting Started) 第三 函数的增长率(Growth of Functions) 第四 递归(Recurrences) 第五 概率分析与随机化算法(Probabilistic Analysis and Randomized Algorithms) 第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics) 第六 堆排序(Heapsort) 第七快速排序(Quicksort) 第八 线性时间中的排序(Sorting in Linear Time) 第九 中值与顺序统计(Medians and Order Statistics) 第三部分(Part III) 数据结构(Data Structures) 第十 基本的数据结构(Elementary Data Structures) 第十一 散列表(Hash Tables) 第十二 二叉查找树(Binary Search Trees) 第十三 红-黑树(Red-Black Trees) 第十四 扩充的数据结构(Augmenting Data Structures) 第四部分(Part IV) 高级的设计与分析技术(Advanced Design and Analysis Techniques) 第十五 动态规划(Dynamic Programming) 第十六 贪婪算法(Greedy Algorithms) 第十七 分摊分析(Amortized Analysis) 第五部分(Part V) 高级的数据结构(Advanced Data Structures) 第十八 B-树(B-Trees) 第十九 二项式堆(Binomial Heaps) 第二十 斐波纳契堆(Fibonacci Heaps) 第二十一 不相交集的数据结构(Data Structures for Disjoint Sets) 第六部分(Part VI) 图算法(Graph Algorithms) 第二十二 基本的图算法(Elementary Graph Algorithms) 第二十三 最小生成树(Minimum Spanning Trees) 第二十四单源最短路径(Single-Source Shortest Paths) 第二十五 全对的最短路径(All-Pairs Shortest Paths) 第二十六 最大流(Maximum Flow) 第七部分(Part VII) 精选的主题(Selected Topics) 第二十七 排序网络(Sorting Networks) 第二十八矩阵运算(Matrix Operations) 第二十九 线性规划(Linear Programming) 第三十 多项式与快速傅里叶变换(Polynomials and the FFT) 第三十一 数论算法(Number-Theoretic Algorithms) 第三十二 字符串匹配(String Matching) 第三十三 计算几何学(Computational Geometry) 第三十四 NP-完备性(NP-Completeness) 第三十五 近似算法(Approximation Algorithms) 第八部分(Part VIII) 附录:数学背景(Mathematical Background) 索引(Index)
好的,这是两个问题。让我分别回答。 --- 对于习题24.2-4,我们需要证明:对于有向图$G=(V,E)$,从源点$s$到任何其他点$v\in V$的最短路径上最多可以包含$|V|-1$条边。 我们可以使用反证法来证明这个结论。假设存在一条从$s$到$v$的最短路径包含了$|V|$条边。由于这是一条简单路径,所以它经过了$|V|$个顶点中的所有顶点。因此,这个路径形成了一个简单环。我们可以从这个简单环中删除任意一条边,得到一条从$s$到$v$的路径,路径长度比原来的最短路径长度更小,这与原来的最短路径的假设相矛盾。因此,假设不成立,结论得证。 --- 对于习题24.3-6,我们需要证明:如果负权重有向图$G$中不存在从源点$s$可达的负权重环,则Bellman-Ford算法能够正确地计算出从$s$到所有其他顶点的最短路径。 我们可以使用反证法来证明这个结论。假设存在一个从$s$到$v$的最短路径上存在一个负权重环。由于负权重环的存在,我们可以通过不断绕这个环走来无限制地减小路径长度,因此不存在从$s$到$v$的最短路径。但是,Bellman-Ford算法会在第$|V|$次松弛操作之前终止,并且在第$i$次松弛操作之后,算法会计算出从$s$到所有距离$s$不超过$i$的顶点的最短路径。因此,我们可以得出结论:如果负权重有向图$G$中不存在从源点$s$可达的负权重环,则Bellman-Ford算法能够正确地计算出从$s$到所有其他顶点的最短路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值