【发布时间】:2014-12-23 20:30:19
【问题描述】:
我有一个大小为 n 的数组,并且想将其分成 m 个大小至少为 3 的块。例如, 给定数组
[1,2,3,4,5,6,7,8,9,10]
而 m=3,我们可以把它分解成
a=[1,2,3,4][5,6,7][8,9,10]
b=[1,2,3][4,5,6,7][8,9,10]
c=[1,2,3][4,5,6][7,8,9,10]
我们可以将这些解决方案视为由 (4,3,3) (3,4,3) 和 (3,3,4) 对表示。 我想要一个给定数组 n 和 m 的函数,它返回一个随机解决方案,并以均匀分布返回这些解决方案(这样您就不太可能得到一个特定的解决方案而不是其他任何解决方案)。 (此函数需要在 n=50 时工作,因此出于性能原因,我们不能通过计算所有可能的解来做到这一点。)
因此,在上述情况下,此方法将返回 [4,3,3] 三分之一的时间,[3,4,3] 三分之一的时间,以及 [3,3,4] 三分之一的时间时间。
【问题讨论】:
-
你试过什么?您需要付出一些努力,然后我们可以帮助您修复任何您无法解决的错误。
-
我不明白你得到了什么,你回报了什么
-
上述情况下的返回值为 [4,3,3]、[3,4,3] 和 [3,3,4]。 (它总是返回一个总和为 n 的 m 个整数的列表)。
-
要查看我目前正在运行什么,请查看github.com/jaredjstewart/MultipleDepotVehicleRoutingProblem/… 的 rand_breaks_array() 方法.在我看来应该有一个更简单的方法!
-
所以,上面链接的方法有效,我只是怀疑存在一个我尚未发现的优雅解决方案。