【问题标题】:Given a tree find the product of two values in the subtree rooted at a particular node such that the product has minimum number of zeros?给定一棵树,找到以特定节点为根的子树中两个值的乘积,使得该乘积具有最小数量的零?
【发布时间】:2019-10-03 07:18:19
【问题描述】:

这个问题会有q个查询。在每个查询中,您将在整个树中获得一个随机节点。树的每个节点都存储一些整数值。求解器需要给出以给定节点为根的子树中任意两个节点中任意两个数字乘积后的最小零个数。

我想在每个节点中存储多个 2 和 5,并以自下而上的方式计算每个节点的最小零个数。

【问题讨论】:

  • 有什么问题?你提出的算法有效吗?如果没有,您是否希望有人查看它(在这种情况下,您应该提供预期的测试用例结果、您的结果和您的算法)?
  • 我的算法正在处理面试官设计的测试用例。我想验证这种方法。我认为 miloszlakomy ​​给出了解决方案的清晰画面,

标签: algorithm data-structures tree n-ary-tree


【解决方案1】:

有趣的问题和你寻找二和五的倍数的直觉是非常正确的!尾随零的数量等于两个值中较小的一个。因此,例如,124000 中的尾随零的数量为 3,因为 124000 = 2^5 * 5^3 * 31,我们从中得到 2^55^3,以及 min(5, 3) = 3

这样,问题可以重述为(我将其称为P10以供进一步参考):

P10:

求 2 或 5 乘积中的最小重数 以给定为根的子树中任意两个节点中的任意两个数 节点。


我准备了一个包含十个数字的示例:

让我们把数字写成因式分解形式:

好!我们已将问题处理为更可行的形式,现在我们将其分解为更简单的形式。


首先,让我们关注一个类似的简化问题,不考虑五:

P2:

求 2 的乘积中的最小重数 以给定为根的子树中任意两个节点中的任意两个数 节点。

现在我们只关心二,所以我们可以从图片中删除所有其他因素:

在这棵树中,在每个节点上,我们将从节点的子树中写入两个最小的数字,自下而上(如您所建议的那样!)。在考虑一个节点时,我们已经为它的所有子节点确定了两个最小的数字,因此迭代直接子节点以找到一个节点的两个最小数字就足够了:

简化的问题解决了!只需将节点中的数字相乘并返回指数:


现在上面的内容实际上非常接近解决真正的问题(P10)。用五个而不是两个重做简化版:

P5:

求 5 的乘积中的最小重数 以给定为根的子树中任意两个节点中的任意两个数 节点。

那么,对于任何节点 vP10 的解是 P10(v) = min(P2(v), P5(v))强>。


资源:

【讨论】:

    猜你喜欢
    • 2020-07-23
    • 1970-01-01
    • 2012-10-25
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多