【发布时间】:2018-06-06 17:49:44
【问题描述】:
假设你有一个数字 n。 我想把它分解成它的m个因子的乘积。
我正在考虑一种算法来做到这一点。
首先,我在其m th 根下找到了n 的最大因子(f1)。
然后,将 n 替换为 n/f1。
现在在其(m-1)th root 下找到 n 的最大因子
重复这个过程,我得到了一系列因素。
你觉得这个算法对吗?或者有什么地方失败了?
【问题讨论】:
假设你有一个数字 n。 我想把它分解成它的m个因子的乘积。
我正在考虑一种算法来做到这一点。
首先,我在其m th 根下找到了n 的最大因子(f1)。
然后,将 n 替换为 n/f1。
现在在其(m-1)th root 下找到 n 的最大因子
重复这个过程,我得到了一系列因素。
你觉得这个算法对吗?或者有什么地方失败了?
【问题讨论】:
您的算法在这种情况下失败:n = 2^3 * 3^2 * 5 = 360 和 m = 3。您的算法执行以下步骤:
360^(1/3) = 7.114... 并选择小于该值的360 的最大因子。因此,选择了因子6。360 替换为60。 60的最大因数最多为sqrt(60) = 7.746...是6。10。所以你的算法产生了分解n = 6 * 6 * 10。然而,这并不是最优的,因为n = 5 * 8 * 9。
一般来说,您的贪心算法可能会在以后做出使问题恶化的选择。这就是本例中发生的情况:第一个因素选择不当,因此后面的选择只会为您提供次优解决方案。
【讨论】: