摘要:
Exercise9.1-1对所有的元素,两个一组进行比较,共需n-1次比较,可以构成一棵二叉树,最小的元素在树的根结点上,接下来,画出二叉树,可以很容易的看出共需lgn-1次比较,所以共需n+lgn-2次比较才可以找出第二小的元素。9.1-2略。9.2-1在randomized-select中,对于长度为0的数组,此时p=r,直接返回A[p],所以不会进行递归调用。9.2-2略。9.2-3RANDOMIZED-SELECT(A,p,r,i){ while(true){ if(p==r) return A[p]; q=RANDOMIZED-... 阅读全文
摘要:
Exercises4.1-1若A中的元素都是负数,那么FIND-MAXIMUM-SUBARRAY的返回值是绝对值最小的子数组。4.1-2int Max_Subarray(int A[]){ int max=0; for(int i=0;imax) max=A[j]-A[i]; return max;}4.1-3对于不同的计算机,结果会略有不同;改进之后,速度性能会有所提升,性能交叉点不会改变。4.1-4最后返回语句的时候,判断结果,若为负数,则返回0。4.1-5int Max_Subarray(int A[]){ int max = 0,sum = 0; for(int i=... 阅读全文
摘要:
Exercises8.1-1最小深度为n,下一次需比较的元素比当前最大元素大即可。8.1-2将其拆为两项的和即可。\[\lg n! = \sum\limits_{k = 1}^n {\lg k} = \sum\limits_{k = 1}^{n/2} {\lg k} + \sum\limits_{k = n/2 + 1}^n {\lg k} \le \sum\limits_{k = 1}^{n/2} {\lg \frac{n}{2}} + \sum\limits_{k = n/2 + 1}^n {{\mathop{\rm lgn}\nolimits} } = \frac{n}{2}\lg \f 阅读全文
摘要:
Exercises7.1-1.略。7.1-2.返回的q值等于r,当数组中所有元素都相同时,可以将等于主元的值轮流放到两个集合中。7.1-3for循环正好是Θ(n)的复杂度,所以PARTITION的时间复杂度是Θ(n)。7.1-4.略。7.2-1\[T(n) = T(n - 1) + \Theta (n) = c{n^2} - (2cn - 1 - bn)\]当c>b时,2cn-1-bn>0,当c<b/2时,2cn-1-bn<0,所以上式的时间复杂度是Θ(n2)。7.2-2Θ(n2)。7.2-3降序排列的话,会导致每一次划分都是最坏情况,所以时间复杂度是Θ(n2)。7.2 阅读全文
摘要:
Exercises6.1-1最多为2h+1-1个,因为堆是只有最低层未满的二叉树,所以最少也会有2h个元素。6.1-2根据h≤lgnA[parent(i)]时循环终止,这两个条件都不会破坏最大堆的性质,应为A[i]没有parent,而A[i]>A[parent(i)]并不破坏堆的性质。6.5-6利用插入排序的性质,可以很容易得出结论。6.5-7保证先进入的元素的key值大于后进入key即可实现队列。栈的话反之。6.5-8对以i为根的堆提取最大值即可。6.5-9从该堆中提取一个元素,之后再将提取元素的链表中找出下一个元素插入到堆中。Thingking Problems6-1a.不总是一样的 阅读全文
摘要:
Exercises5.1-1应聘者是随机出现的,如果总是可以决定哪一个应聘者最佳,那么就意味着对任何一种应聘序列,总能知道哪一个最好的,这也就意味着我们能过比较任意的两个元素,必然也就知道了应聘者的全部次序。5.1-2Randome(0,1)只能产生0或者1,恰好二进制只有0或者1,故可以利用Random(0,1)产生Random(a,b)的每一位,计算b的位数,如果生成的数不在[a,b]范围内,就重新生成。5.1-3调用两次BASED-RANDOM,调用两次后,都产生1的概率是p2,都产生0的概率是(1-p)2,而产生一个0,一个1的概率是2p(1-p)\[E[x] = \sum\limit 阅读全文
摘要:
Exercises3.1-1因为f(n)与g(n)是渐近非负的,所以存在,使得f(n),g(n)>0,可以看出存在,使得,所以可以证出max{f(n),g(n)}=Θ(f(n)+g(n))。3.1-2根据题意可知,当时成立,且,当时成立,因此存在,使得当时,,因为b>0,所以,因此存在,使得,证明完毕。3.1-3O(n)已经代表T(n)运行上界,最少是O(n)对于T(n)来说是无法达到的,所以是没有意义的。3.1-41.因为,所以成立。2.不成立,假设成立的话,那么存在c,使得,那么,因为c是常数,n可以无限大,所以不可能成立,所以不成立。3.1-5 略。3.1-6O符号给出的是运 阅读全文
摘要:
Exercises2.1-1 略。2.1-2 略。2.1-3C/C++ Code:int Search(int A[],int v){ for(int i=0;i++;ik-p||j>q-k-1) //其中任意一个数组中所有元素都被复制回A时,即终止循环 break; if(L[i]>=R[j]) A[l]=R[j++]; else A[l]=L[i++]; } // 将另一个数组中的剩余元素复制回A for(;i2时,成立,则可以证明。3.因此,当k>=1时,且n是2的幂时,。2.3-4n=1或2时,T(n)=1;n>2时 ,。2.3-5C/C++ Cod... 阅读全文