假设您有一个长度 n 的二进制字符串。 而且你必须将它分成例如5,10和17位的块,这样每个分区都可能发生。
我的一个想法是生成一个5x + 10y + 17z = n的随机解,然后将该组随机洗牌
{5,..,5,10,..,10,17,..,17}其中5& s,10&s;和17&s的数量对应于解(x,y, z)我获得了。
获得线性丢番图方程的随机解决方案似乎很困难。
(即我不知道怎么做)
我的另一种方法是使用某种递归函数:
recursive_partition(int n, partitions)
{
if(n==0)return;
temp=random{5,10,17}
partitions.add(temp)
recursive_partition(n-temp, partitions)
}
这个问题是当0 <0时功能变为死胡同。 n&lt; 5
例如,如果输入是n = 57并且该功能需要两个17分。
因为我需要一个统一的随机分区,我唯一能做的就是重新开始。
是否有一种计算上可行的方法来解决这个问题?顺便提一下,5,10和17只是一个例子。我需要一个通用的算法。