【算法导论第五章】课后习题解析

---恢复内容开始---

5.1-1证明:假设在程序HIRE-ASSISTANT的第4行中,我们总是能够决定哪一个应聘者最佳,则意味着我们知道应聘者排名的总次序

  既然我们总是能够决定哪一个应聘者最佳,想必我们已经对应聘者进行比较了,既然已经进行比较,排序就不应是个问题,既然可以进行排序,总次序也就可以知道了

5.1-2描述RANDOM(a,b)过程的一种实现,它只调用RANDOM(0,1)。作为a和b的函数,你的程序的期望运行时间是多少?

没看懂,不会做

5.2-1

  分析:

  由5.1节中概率分析最后一段,可以的得出n位应聘者,有n!排序方式。正好雇佣一次的,也就是意味着第一位必须是最优秀的,其他位数随意排列,此时排列方式共有(n-1)!

此时的概率P = (n-1)!/n! = 1/n;

  正好雇佣n次,也就是要求排列顺序必须以严格遵循递增,此时共有1种排列法,故这种情况的概率p = 1/n!

5.2-2

  分析:

  首先共识第一位面试者必然会被雇佣,若恰好雇佣两次,则应该满足以下两个条件:
  

  (1).在第二位面试者被雇佣之前,不能出现比第一位最优秀的的面试人员。

  (2).第一位面试者绝不是最优,否者只会有一次雇佣者。

  设Ei表示1号应聘者被雇用的情况,其random为i,则对于任意给定的i,有P[Ei]=1/n,j代表最优应聘者,F表示2、3、...、j-1号应聘者的rank比1号助理低的情况P[F|Ei] = 1/(n-i)。则有刚好雇用两次的情况概率P = (1/n)∑1/(n-i)。

5.2-3

  分析:

  每次抛骰子的期望值E(X) = 1/6*(1+2+3+4+5+6) = 21/6;

  则n次抛骰子的期望值∑E = 7n/2。

5.2-4

  分析:

  假设该事件为事件A,则P(A) = 1/n

  期望E(A) = n*P(A) = 1

5.2-5

  分析:

 可以将问题转换成平面选点的问题,令i为横坐标,j为纵坐标,则j>i的概率P(j>i) = (n-1)/2n,又因为数组a为均匀分布,a[i]>a[j]的概率1/2,此时i<j且a[i]>a[j]的概率为

(n-1)/4n,则期望E = n*n*(n-1)/4n = n(n-1)/4。

5.4-1

  

---恢复内容结束---

时间: 2024-08-19 09:39:38

【算法导论第五章】课后习题解析的相关文章

python程序设计基础(嵩天)第五章课后习题部分答案

第五章p1515.2:实现isodd()函数,参数为整数,如果参数为奇数,返回true,否则返回false.def isodd(s): x=eval(s) if(x%2==0): return False else: return Truex=input("请输入一个整数:")print(isodd(x)) 运行结果: ////////////////////////////////////////////////////////////////////////////////////

Python核心编程_第五章课后习题

习题5_2.py #!/usr/bin/python def MyMultiple(x, y):         return x * y      for i in range(1, 10):      for j in range(1, i + 1):          print '%d * %d = %2d' % (j, i, MyMultiple(i, j)),                          if j == i:                     print

第五章课后习题

1.团队模式和团队的开发模式有什么关系? 答: 首先我来解释一下这两个名词: 我查资料了解了一下,团队模式,更偏向于多人合作的那种,而且我理解的"团队"会是一种多人合作的情况下,长期磨合后的一个组织,他们是相互了解的,是拥有巨大的默契存在的. 对于团队的开发模式我并没有查到具体的解释,但对于开发模式,是有查到几种开发模式,比如瀑布开发模式.快速应用开发模式等等,我们在其他的课上有学过这些模式,所以我在这里认为开发模式是更偏向于后边的"模式"两个字的,更注重方法,用什

C++实现算法导论十五章动态规划之钢条分割问题

#include<iostream> #include<algorithm> #include<utility> #include<vector> using namespace std; //采用普通的递归算法来求解钢条分割的最大的收益 int cut_rod(int *p,const int &n) { if(n==0) return 0; int q=-1; for(int i=1;i<=n;++i) { q=max(q,p[i]+cut

网络操作系统第五章课后习题解答

1.比较说明FAT文件系统和NTFS文件系统的特点. 答:FAT文件系统 文件分配表(File Allocation Table,FAT)是用来记录文件所在位置的表格,它对于硬盘驱动器的使用非常重要,假若文件分配表丢失,那么硬盘上的数据将因无法定位而不能使用.该文件系统起初是用于小型磁盘和简单文件结构的文件系统. 作为一种较为简单的文件系统,从安全和管理的角度看,FAT文件系统具有以下缺点: (1)易受损害:FAT文件系统缺少错误恢复技术,当文件系统损害计算机就会瘫痪或不能正常关机. (2)单用

算法导论 第13章 红黑树

二叉查找树的基本操作包括搜索.插入.删除.取最大和最小值等都能够在O(h)时间复杂度内实现,因此能在期望时间O(lgn)下实现,但是二叉查找树的平衡性在这些操作中并没有得到维护,因此其高度可能会变得很高,当其高度较高时,而二叉查找树的性能就未必比链表好了,所以二叉查找树的集合操作是期望时间O(lgn),最坏情况下为O(n). 红黑树也是一种二叉查找树,它拥有二叉查找树的性质,同时红黑树还有其它一些特殊性质,这使得红黑树的动态集合基本操作在最坏情况下也为O(lgn),红黑树通过给节点增加颜色和其它

算法导论 第6章 堆排序(简单选择排序、堆排序)

堆数据结构实际上是一种数组对象,是以数组的形式存储的,可是它能够被视为一颗全然二叉树,因此又叫二叉堆.堆分为下面两种类型: 大顶堆:父结点的值不小于其子结点的值,堆顶元素最大 小顶堆:父结点的值不大于其子结点的值,堆顶元素最小 堆排序的时间复杂度跟合并排序一样,都是O(nlgn),可是合并排序不是原地排序(原地排序:在排序过程中,仅仅有常数个元素是保存在数组以外的空间),合并排序的全部元素都被复制到另外的数组空间中去,而堆排序是一个原地排序算法. 1.在堆排序中,我们通常使用大顶堆来实现,因为堆

算法导论 第7章 高速排序

高速排序在最坏情况下的时间复杂度为O(n^2),尽管在最坏情况下执行时间比較差,可是高速排序一般是用于排序的最佳选择.由于其平均性能相当好,期望的执行时间为O(nlgn),且在O(nlgn)的记号中隐含的常数因子非常小. 高速排序和合并排序有相似之处,都是须要划分序列,在合并排序中.划分的过程非常easy.直接选择元素序列的中间位划分位置,排序是在合并的过程中实现的,所以合并排序的合并过程非常重要.相比合并排序,高速排序就没有合并的过程.仅仅有划分,高速排序的划分过程非常重要,排序是在划分的过程

算法导论 第2章

本章主要是算法知识的基础讲解,介绍了循环不变式,几个简单的排序算法,递归分治算法等内容. 1.循环不变式 循环不变式主要用来说明算法的正确性,那么什么是循环不变式呢,其实就是在循环过程中,一些元素数据必须保持的一些性质,例如在插入排序中,数组为A,必须保证三个性质: (1) 初始化:在循环开始之前,循环不变式是成立的,即:A[0]是有序的,A[1...n-1]是无序的. (2) 保持:在循环的某一次迭代开始之前,循环不变式是成立的,那么在此次迭代结束后依然应该是成立的,即:A[0...i]是有序