1、
题目应该改为 先序遍历吧! 先序遍历的结果是:FCBADEGH
2、
使用哈弗曼编码,最短长度为25
3、
如果被查找目标一定会出现的话,由于是等概率,所以出现在每个位置上的概率是1/12,计算式为1/12*(1+2*2+3*4+4*5)=37/12
4、
令A、B、C、D依次代表扑克牌中的四种花色,随机抽取的两张牌的花色组合有10种,根据抽屉原理,则至少11个人抽时,才能保证有两个人抽到同样的花色。
5、
使用三分法效率最高,y=logx以3为底向上取整。
6、
推出规律,令sn表示第n项的值,当n=2^k,sn=3^k,当2^k时,sn=3^k+s[n-2^k]。然后取n=300即可。
7、
题目有问题,应该问至少有多少个顶点。每条边可产生2个度,所以总共是40个度 4*4+6*3=34,40-34=6,则至少有4+6+3个点
8、
令f[i]表示桶中已经有i个球是红球后,还需要的期望时间,则f[i]=(i/M)*(f[i]+1)+(1-i/M)(f[i+1]+1), 且f[M]=0, 递推后计算出f[0]=M(1+1/2+1/3+…+1/M)=M*(lnM+C),其中C为欧拉常数
9、
先装上1000吨,走250公里,放下500吨,回去装上1000吨,走到250公里,装上250吨,继续走250公里,放下250吨,往回走,装上1000吨,走到250公里,装上250吨,继续走250公里,又装上剩下的250吨。然后一直到目的地。
10、1,2,3,4…..n,n个数进栈,有多少种出栈顺序,写出递推公式(写出通项公式不得分)
从最简单开始递推,找出规律。令f[n]表示n个数进栈时,出栈顺序的个数。另外为1-n个数编号分别为a,b,c,d… 当n=1时,f[1]=1,当n=2时,f[2]=2,当n=3时,c出栈的位置可能在1、2或者3.当在1时,剩下的是n=2的子问题,也就是f[2];当在2时,剩下的是两个n=1的子问题,也就是f[1]*f[1];当n在3时,剩下的又是n=2的子问题,也就是f[2]。所以f[3]=f[2]+f[1]*f[1]+f[2]令f[0]=1,则f[3]=f[0]*[2]+f[1]*f[1]+f[2]*f[0],依次类推f[n]=f[0]*f[n-1]+f[1]*f[n-2]+…+f[n-1]*f[0]。 这是卡特兰数的递推公式。
11、宇宙飞船有100,000位的存储空间,其中有一位有故障,现有一种Agent可以用来检测故障,每个Agent可以同时测试任意个位数,若都没有故障,则返回OK,若有一位有故障,则失去响应。如果有无限多个Agent可供使用,每个Agent进行一次检测需要耗费1小时,现在有2个小时时间去找出故障位,问最少使用多少个Agent就能找出故障。
这个问题是小白鼠从药瓶中检测出毒药的扩展。基本问题是只能进行一轮实验,找出故障,采用的方法是对每个位置对应到从1-100000的二进制编码,则总共需要log2100000上取整个bit,然后第一个agent检测第一位bit为1的,第二个agent检测第二位bit为1的,依次类推其他bit,最后根据返回false的位置为1,返回OK的位置为0,就可以得出出故障的位置的2进制编码。
这里的问题扩展成可以进行两轮实验。那么采用的方法是对每个位置对应到从1-100000的三进制编码,则总共需要log3100000上取整个位,然后第一个agent检测第一位为2的,第二个agent检测第二位为2的,依次类推其他位,当第一轮检测结束时,我们只能知道出故障的位置对应的三进制编码哪些位是2,其他未知的位可能为1或者0,下面进行第二轮检测(就递归到上面的基本问题):把那些返回OK的agent再一起检测相应位上为1的,当第二轮检测结束,我们就可以知道哪些是1哪些是0.
总共12道填空题,还有一道太复杂,题目很长,还有示意图,看不懂更不会做,没有记录下来。
大题:
1、
借助一个大小为k的最大堆,建堆的复杂度为O(k),之后如果每个都和堆的根节点比较并且更新堆,则复杂度是O(nlgk)
2、
3、
应该用动态归纳。