Algorithm 给定一棵树,在一个特定节点的子树中找到两个值的乘积,使得乘积的零数最小?
问题将有q查询。在每个查询中,将在整个树中为您提供一个随机节点。树的每个节点都存储一些整数值。解算器需要在给定节点的子树中的任意两个节点中,为任意两个数字的乘积提供最小数量的零Algorithm 给定一棵树,在一个特定节点的子树中找到两个值的乘积,使得乘积的零数最小?,algorithm,data-structures,tree,n-ary-tree,Algorithm,Data Structures,Tree,N Ary Tree,问题将有q查询。在每个查询中,将在整个树中为您提供一个随机节点。树的每个节点都存储一些整数值。解算器需要在给定节点的子树中的任意两个节点中,为任意两个数字的乘积提供最小数量的零 我想在每个节点中存储2和5的倍数,并以自底向上的方式计算每个节点的最小零数。有趣的问题和你寻找2和5的倍数的直觉是非常正确的!尾随零的数量等于两个值中的较小值。例如,124000中的尾随零的数量是三个,因为124000=2^5*5^3*31,我们从中得到2^5和5^3,以及min(5,3)=3 这样,问题可以重新表述为(
我想在每个节点中存储2和5的倍数,并以自底向上的方式计算每个节点的最小零数。有趣的问题和你寻找2和5的倍数的直觉是非常正确的!尾随零的数量等于两个值中的较小值。例如,
124000
中的尾随零的数量是三个,因为124000=2^5*5^3*31
,我们从中得到2^5
和5^3
,以及min(5,3)=3
这样,问题可以重新表述为(我称之为P10,以供进一步参考):
P10:
求的乘积中2或5的最小多重数
子树中任意两个节点中的任意两个数字,根在给定的
节点
我准备了一个包含十个数字的示例: 让我们以分解的形式写出这些数字: 好!!我们已经把这个问题处理成一个更可行的形式,现在我们将把它分解成更简单的形式
首先,让我们关注一个类似的简化问题,而不考虑五个方面: P2: 求2的乘积的最小重数 子树中任意两个节点中的任意两个数字,根在给定的 节点 现在我们只关心两个,因此我们可以从图片中删除所有其他因素: 在这个树中,在每个节点上,我们将从节点的子树中写出两个最低的数字,从下到上(如您所建议的!)。当考虑一个节点时,我们已经为它的所有子节点确定了两个最低的数字,因此迭代直接子节点就足够找到一个节点的两个最低数字: 简化的问题解决了!只需将节点中的数字相乘并返回指数:
现在,上述内容实际上非常接近于解决真正的问题(P10)。用五个而不是两个重做简化版本: P5: 求5的乘积的最小重数 子树中任意两个节点中的任意两个数字,根在给定的 节点 然后,对于任何节点v,P10的解是P10(v)=min(P2(v),P5(v))
资源: