JAVA算法:连接绳索的最小成本

JAVA算法:连接绳索的最小成本

有n根不同长度的绳子,我们需要把这些绳子连接成一根绳子。连接两根绳子的费用等于它们的长度之和。我们需要以最低的成本连接绳索。

例如,如果我们有4根绳子,长度分别为4、3、2和6。我们可以用以下方法连接绳子。

1)首先连接长度为2和3的绳索。现在我们有三根绳子,长度分别是4、6和5。

2)现在连接长度为4和5的绳索。现在我们有两条长度为6和9的绳子。

3)最后连接两条绳索,所有绳索都已连接。

所有绳索的连接总成本为5+9+15=29。这是连接绳索的最佳成本。其他连接绳索的方法总是有相同或更多的成本。例如,如果我们先连接4和6(我们得到3、2和10的三个字符串),然后连接10和3(我们得到13和2的两个字符串)。最后我们连接13和2。这样的总成本是10+13+15=38。

问题分析

如果我们仔细观察上述问题,我们可以注意到,首先挑选的绳索长度包含在总成本中不止一次。因此,我们的想法是先连接最小的两条绳子,然后对剩余的绳子进行循环。这种方法类似于哈夫曼编码。我们把最小的绳子放在树上,这样它们就可以重复多次,而不是更长的绳子。

下面是一个完整的算法,用于寻找连接n根绳索的最低成本。

让一个数组len[0..n-1]中存储n条长度的绳子。

1)创建一个最小堆,并将所有长度插入最小堆。

2)当min堆中的元素数不是1时执行以下操作。

……a)从最小堆中提取最小值和第二个最小值

……b)将上述两个提取值相加,并将其插入min堆。

……c&#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值