算法设计与分析——贪心算法(二)

3.4

设有n个正整数,将它们连接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343,连成的最大整数为34331213。
又如:n=4时,4个整数7,13,4,246,连成的最大整数为7424613。
输入是n个正整数,输出是这n个正整数连成的最大多位整数,要求用贪心法求解该问题。答案要求包含以下内容:(1)证明问题具有贪心选择性;(2)证明问题具有优化子结构;(3)写出算法伪代码并分析算法的时间复杂度。

首先考虑每次选择最高位最大的数,如果相等则比较次高位,在室友的提醒下,发现这个方法存在问题。例如987和98.
故修改为:对m位的数字a和n位的数字b,比较a*10 ^ (n-1)+b和b *10^(m-1)+a

bool campare(string i, string j)
{
    return (i+j) > (j+i);
}

sort(tmp.begin(), tmp.end(), campare);  // campare为假时交换i 和 j

3.5

存放于磁带上文件需要顺序访问。故假设磁带上依次存储了n个长度分别是L[1],….,L[n]的文件,则访问第k个文件的代价为在这里插入图片描述
。现给定n个文件的长度L[1],….,L[n],并假设每个文件被访问的概率相等,试设计一个算法输出这n个文件在磁带上的存储顺序使得平均访问代价最小。。答案要求包含以下内容:(1)证明问题具有贪心选择性;(2)证明问题具有优化子结构;(3)给出算法并分析算法的时间复杂度。

存储方式:长度最短的存在最前面。

3.7

G=(V, E)是一个具有n个顶点m条边的连通图,且可以假设边的代价为正且各不相同,设,定义T的瓶颈边是T中代价最大的边,G的一个生成树T是一棵最小瓶颈生成树,如果不存在G的生成树T’是的它具有代价更小的瓶颈边。问:(1)G的每棵最小瓶颈树一定是G的一棵生成树吗?证明或者给出反例; (2) G的每棵生成树都是G的最小瓶颈树吗?证明或者给出反例。

(1)是
(2)不是

3.8

给定n个自然数d1, d2, …, dn, 设计算法,在多项式时间确定是否存在一个无向图G,使它的结点度数准确地就是d1, d2, …, dn, 要求G中在任意两个结点之间至多有一条边,且不存在一个结点到自身的边。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值