假设给定一个长度为n的二进制字符串。而且您必须将其拆分为例如 5,10 和 17 位的块,以便每个分区都同样可能发生。
我的一个想法是生成一个 5x+10y+17z=n 的随机解,然后将集合
{5,..,5,10,..,10,17,..,17} 打乱,其中 5 的数量, 10 和 17 对应于我获得的解 (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< n <5 时,函数进入死胡同
,例如,如果输入为 n=57 并且函数需要两个 17。
因为我需要一个统一的随机分区,所以我唯一能做的就是重新开始。
有没有一种计算上可行的方法来解决这个问题?
顺便说一下,5,10 和 17 只是示例。我需要一个通用算法。