以最低成本合并n个硬币以创建一个单一硬币

 手机用户2502877197 发布于 2023-01-06 18:50

来自http://www.geeksforgeeks.org/amazon-interview-set-89/

我们有n个金币.我们需要将所有n个硬币合并为一个硬币,我们可以同时合并两个硬币.合并两个硬币的成本等于这些硬币的价值.我们如何确保合并n个硬币的成本最低.

Ex: 5 ,8 , 4, 3, 9, 6
We will merge 3 and 4, cost=7 {Remaining coins: 5,8,9, 6,7}
Then we merge 5 and 6, cost=11 { Remaining coins: 11,8,9,7}
Then we merge 7 and 8, cost=15 { Remaining coins: 11,15,9}
Then we merge 9 and 11, cost=20 { Remaining coins: 20,15}
Then we merge 20 and 15, cost=35 { Remaining coins: 35}
Total cost: 7+11+15+20+35 = 88

如果我们以不同的方式合并了硬币阵列{5,8,4,3,9,6}:

Merging 5 and 8, cost=13 {Remaining coins: 13, 4, 3, 9, 6}
Merging 13 and 4, cost=17 {Remaining coins: 17, 3, 9, 6}
Merging 17 and 3, cost=20 {Remaining coins: 20, 9, 6}
Merging 20 and 9, cost=29 {Remaining coins: 29, 6}
Merging 29 and 6, cost=35 {Remaining coins: 35}
Total cost: 114

我们可以看到,在第一种情况下成本较低.如何获得合并所有n个硬币的最低成本?

这只是一个例子,硬币的数量可以是10 ^ 9的范围

Patrick87.. 9

我没有考虑过这个问题,但是从头脑中看,贪婪的方法很可能会起作用:对硬币进行排序并始终先合并最小的硬币.这背后的直觉是你想要尽可能不频繁地"合并"最昂贵的硬币.

如果你有一枚硬币,你就完成了.如果你有两个硬币,你只有一个选择.考虑具有三个硬币的情况:A

A + B, (A + B) + C => 2A + 2B + C
A + C, (A + C) + B => 2A + 2C + B
B + C, (B + C) + A => 2B + 2C + A

我们看到合并最小硬币的第一个选择是最好的.请参阅Bill的回答,了解有关一直采取证据的宝贵见解 - 我提供的评论复制在此处:

您可以将硬币的值视为霍夫曼编码中使用的令牌频率.对于非常频繁的令牌,您需要一个简短的代码路径.我想比尔指出,"合并"可以被认为是一种向霍夫曼树移动的方式:硬币合并的次数是它与根的距离.因此,霍夫曼算法的正确性证明应该适用于我描述的(也)贪婪算法,其基本上是霍夫曼算法,但不适用于编码.

1 个回答
  • 我没有考虑过这个问题,但是从头脑中看,贪婪的方法很可能会起作用:对硬币进行排序并始终先合并最小的硬币.这背后的直觉是你想要尽可能不频繁地"合并"最昂贵的硬币.

    如果你有一枚硬币,你就完成了.如果你有两个硬币,你只有一个选择.考虑具有三个硬币的情况:A <B <C.我们可以通过三种方式合并它们:

    A + B, (A + B) + C => 2A + 2B + C
    A + C, (A + C) + B => 2A + 2C + B
    B + C, (B + C) + A => 2B + 2C + A
    

    我们看到合并最小硬币的第一个选择是最好的.请参阅Bill的回答,了解有关一直采取证据的宝贵见解 - 我提供的评论复制在此处:

    您可以将硬币的值视为霍夫曼编码中使用的令牌频率.对于非常频繁的令牌,您需要一个简短的代码路径.我想比尔指出,"合并"可以被认为是一种向霍夫曼树移动的方式:硬币合并的次数是它与根的距离.因此,霍夫曼算法的正确性证明应该适用于我描述的(也)贪婪算法,其基本上是霍夫曼算法,但不适用于编码.

    2023-01-06 18:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有