算法导论第三版 17.1-2习题答案

17.1-2
分析:
如书中所示,increment(A)函数中,A数组来存放二进制,所以increment(A)函数实质是将一个十进制整数用二进制来表示,然后在整数加1的时候,将二进制做相应的变化。
那么decrement(A)就可以知道,其实质是将一个十进制整数用二进制来表示,然后在整数减1的时候,将二进制做相应的变化。
现在给出几个十进制——二进制对照来讲:

十进制表示: 1 2 3 4 5
二进制表示: 0001 0010 0011 0100 0101

从表中看到:
当5减1变为4时候,只有二进制0101中的末尾的1变为0
当4减1变为3时候,二进制0100中的末尾的两个0变为1,与尾端最相邻近的1变为了0
当3减1变为2时候,只有二进制0011中的末尾的1变为0
当2减1变为1时候,二进制0010中的末尾的一个0变为1,与尾端最相邻近的1变为了0
综上,可以看到变化了、
答案:
首先写出decrement(A)的伪代码:在这里插入图片描述
(ps:上述伪代码中的“if A[0]==1"条件判断其实可以去掉,因为后面的"if i <A.length"实现了该功能,但是为了便于理解,所以我很冗余的写出来了)
通过上述代码可知:
A[0],A[1],A[2]…A[i] (i为变化位)在每一次的decrement()操作中都会改变,而A数组的长度为K。所以一次的decrement操作的最坏的时间代价是O(k)(或者:色它(k)),所以n次decrement操作的时间代价为:色它(n * k)

发布了12 篇原创文章 · 获赞 1 · 访问量 1086

猜你喜欢

转载自blog.csdn.net/qq_43723172/article/details/103283418