【算法学习课程作业】

习题答案(点击下载)

1 O(1)和O(2)有什么差别?为什么?
2 证明logn=o(n^k),其中k为正的常数
3 寻找单调递增函数f(n)和g(n),使得f(n)=O(g(n))和g(n)=O(f(n))都不成立
4 考虑以下冒泡排序算法,1)元素比较的最少次数是多少?何时达到最小值?2)元素比较的最多次数是多少?何时达到最大值?3)可以用O,,表示算法的运行时间吗?
算法BubbleSort
5 假设解决同一个问题的两个算法A1和A2的时间复杂性分别为O(n3)和O(n),如果为这两个算法分别编写程序并在同样的环境下运行,算法A2的程序一定比算法A1的程序运行得快吗?为什么?

1 有10个海盗抢得了100枚金币,每个海盗都能够很理智地判断自己的得失,他们决定这样分配金币:
1)按照强壮与否排序,其中最强壮的人为10号,以此类推,最瘦小的人为1号。
2)先由10号提出分配方案,然后由所有人表决,当且仅当等于或多于半数人(包括自己)同意时,方案才算被通过,否则他将被扔入大海喂鲨鱼;
3)如果10号死了,将由9号提方案,其余的人表决,当且仅当超过半数(包括自己)同意时,方案才算通过,否则9号同样将被扔入大海喂鲨鱼;
4)往下以此类推……
海盗们都很精明,他们首先会尽量保住自己的命,其次在保住命的前提下都想分到尽可能多的金币,而且他们也很希望自己的同伴喂鲨鱼。假如你是那个10号海盗,你将怎样分配,才能既保住命,又能分到最多的金币?最多能分到多少呢?
如果还是100枚金币,但海盗的数量是20,50,100,200,400又该怎么样呢?

2 设有如下递推关系
T(n)={■(T(n/2)+1&n为偶数@2T((n-1)/2)&n为奇数),其中T(1)=1。
1)证明当n=2k时,T(n)=O(logn)
2)证明存在无穷集合X,当nÎX时,T(n)=W(n)
3)以上两个结论说明了什么?

1 设n的二进制表示为<nk-1, nk-2, … , n0>,其中k=élog(n+1)ù。有k个相互之间无关的非降序数组A0, A1, …, Ak-1,数组Ai的规模为2i。当ni=1时,数组Ai为满的,当ni=0时,Ai为空,因此这k个数组中元素总数为n。 对此数据结构,如何进行元素的查找?最坏情况下的时间复杂性是多少?如何进行元素的插入?此时最坏情况下的时间复杂性如何?平摊分析的结果呢?

1 数组A的规模为n,如果要找出所有出现次数超过n/4的元素该如何操作

2 有n项任务需要完成,对每项任务i,有集合Ai={在任务i开始之前必须完成的任务}。设计算法,为这些任务确定一个可行的执行顺序,证明算法的正确性,并且说明是一个线性时间算法。

3 n个人中有超过一半(>n/2)的人是诚实的,总能正确回答问题,而其余则可能会说谎,不一定会正确回答问题。现在允许做如下调查询问:选2个人,然后提问:对方是否诚实?每个人的回答只能是“是”或“否”。如何以最少的调查次数找出一个诚实的人?

4 给定正整数m和n,m>n,求其最大公约数,给出算法并证明时间复杂性为O(logm)

5有A、B、C三个桩子,A上放有n个不同大小的圆盘,按大小递减顺序自下而上。1) 设计算法,用最少的移动步数将A上的圆盘都移到C,每次只能移一个,且任一桩子上的圆盘都必须满足圆盘大小自下而上递减的顺序。2) 给定数组p,其元素取值只有1,2,3三种,代表了n个圆盘目前的位置,1代表A,2代表B,3代表C,p[i]的值为第i个圆盘(1号盘最小,n号盘最大)的位置。例如p={3,3,2,1}表示共有4个圆盘,第一个和第二个都在C,第三个在B,第4个在A。如果p代表了1)中的最优移动过程中某一步的状态,则求出这是第几步。注意诸如p=[2,2]是不可能出现的,此时算法得到-1. 3) 如果有2n个圆盘,分成大小不同的n对,每对圆盘完全相同,一开始按照大小递减顺序自下而上放在A,如何用最少的移动步数把它们全部移到C,移动规则同1)

1有一个有2k2k个格子的正方形棋盘,以及可以覆盖3个格子的L型条块,如何用这些L型条块覆盖棋盘上2k2k-1个格子,条块之间不能相互覆盖,也不能伸出棋盘。

2 设有复数x=a+bi和y=c+di,设计算法,只用3次乘法计算乘积xy

3数组A中包含n个互不相同的整数,用O(n)的时间找出A中最大的i个数,并按从大到小的次序输出。in1/2

4设A[1…n]是一个包含n个不同数的数组。如果在i<j的情况下有A[i]>A[j],则(i,j)为A中的一个逆序对。1)若A={2,3,8,6,1},列出其中所有的逆序对;2)若数组元素取自集合{1,2,…,n},那么怎样的数组含有最多的逆序对?它包含多少个逆序对?3)求任意数组A中逆序对的数目,并证明算法的时间复杂性为(nlogn)

5每个螺母需要一个螺栓配套使用,现有n个不同尺寸的螺母和相应的n个螺栓,如何快速地为为每一个螺母找到对应的螺栓?只允许将一个螺母与一个螺栓进行匹配尝试,从而知道相互之间的大小关系,不能够比较两个螺母的大小,也不能比较两个螺栓的大小

1 如何用线性时间计算第n个Fibonacci数

2 n个矩阵M1、M2、…、Mn相乘最多需要多少次乘法

3 给定一个整数K和n个不同大小的物品,第i个物品的大小为整数ki,判断是否存在一个物品的子集,它们的大小之和正好为K。如果每个物品的数量不限,又该如何处理?

4对于二叉查找树中任意一个节点,其左子树中所有节点的关键字都小于此节点的关键字,右子树中所有节点的关键字都大于此节点的关键字,因此在查找元素时,经过一次比较就可以去掉其中一棵子树的元素,减少比较次数。一般而言,二叉查找树的平均比较次数为O(logn)。但如果待查找的关键字出现概率不相等,则需要构造具有最少平均比较次数的二叉查找树,即最优二叉查找树。
假设关键字a,b,c,d的出现概率分别为0.2,0.3,0.1和0.4,则图示两棵二叉查找树的平均比较次数分别为0.22+0.31+0.12+0.43=2.1和0.22+0.31+0.13+0.42=1.8

两棵不同的查找树
假设关键字k1,k2,…,kn(已按从小到大的次序排好)的频率为p1,p2,…,pn,计算最优二叉查找树最优平均比较次数。

5一个矩形区域被划分为N*M个小矩形格子,在格子(i,j)中有A[i][j]个金币。现在从左上角的格子(1,1)出发,要求每次只能向右走一步或向下走一步,最后到达(N,M),每经过一个格子就把其中的金币全部拿走。1)请利用动态规划找出能拿到最多金币数的路线。2)如果允许再走一次,则两次最多能够拿到多少金币?3)如果某些A[i][j]为负值,表示经过该格子时需要支付相应金额的金币才能通过,如果手头金币不够,则不得经过该格子,那么走到(N,M)时最多有多少金币?

1 在0-1背包问题中,若各物品按重量递增的顺序排列时,其价值恰好依次递减,如何快速求解该问题的最优解,证明算法的正确性

2 已知起点与终点的距离为D,油箱容量为C,每单位汽油行驶距离为d,给定一直线上N个加油站的位置,汽车在t=0时位于起点,油箱为空,1)设计算法求起点到终点加油次数最少是多少?2)如果每个加油站的油价不同,则如何使油费最少?设计算法并证明

3数轴上n个不同点的集合{x1,x2,…,xn},并且x1<x2<…<xn,用一些长度为1的闭区间来覆盖这些点,设计算法找到最少的闭区间个数和位置,并且给出算法的正确性证明和时间复杂性。
每次找出未被覆盖的最小点x,构造区间[x,x+1]

4 阅读理解canvas上阅读材料taskscheduling.pdf,将任务调度问题的求解方法及证明完整地写出来(也可以加上自己的理解,不是严格意义上的翻译)

1 设计一个不确定性算法求解旅行商问题

2 设P和P’是两个NP完全问题,证明或否定P’µpolyP
答:根据NPC问题定义:首先需要是一个NP问题;并且所有的NP问题都可以归约到它。那么P和P’是两个NP完全问题,也就是说P和P’也是NP问题,再根据定义的第二点可得P’µpolyP。
3 证明求n的k次幂问题是P类问题,假设两个数的乘法能够在单位时间内完成

4 是否有可能在多项式时间内判断无向图G=(V,E)存在规模为5的团集?为什么?

5 证明顶点覆盖问题可以多项式时间归约到集合覆盖问题(给定集合X,以及X的子集构成的集合F,在F中能否挑出k个集合,使这些集合的并集为X)

1 设计一个图灵机能够识别语言L={anbn,n>=1},从而证明LDTIME(n)

2 证明NLOGSPACEPSPACE

3 已知整数数组A[1…n]使得对于任意的i,1i<n,有|A[i]-A[i+1]|1。令A[1]=x,A[n]=y,且x<y。设计算法查找j,使得对于任意给定的z,xzy,有A[j]=z。给出算法的时间复杂性并利用决策树证明该算法是最优的。

4 已知排序问题的界为(nlogn),证明Huffman编码问题的界也是(nlogn)

1 设计回溯算法求解马的周游问题。设棋盘规模为n*m,从(1,1)出发,每个位置到达一次且仅一次,不必回到起点。

2 布线问题:如下图所示,找一条路把ab两点横平竖直最短连接起来,不能碰绿色的障碍物。描述主要思想即可。

十一

1 若MAX-SAT问题中每个子句至少有3个文字,则RSAM算法的性能如何?

2证明ppt中算法RSEL的期望比较次数为O(n),假设数组A中元素互不相同

3 1)证明下面的算法能够以80%以上的概率正确判断一个给定的正整数n是否为素数,2)如何进一步提高算法的性能
算法:Primality
输入:正整数n
输出:n是否为素数(True为素数,False为合数)
1 如果n与30030的最大公约数为1,则返回True
2 否则返回False

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZoomToday

给作者倒一杯卡布奇诺

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值