我想编写一个程序,用于randomely创建一个函数,该函数接收N个二进制值作为输入,并将它们映射到一个二进制值。天真的方法是创建所有2 ^(2 ^ N)个这样的函数,表示为真值表,并随机选择一个 - 但这对于大N来说是不切实际的。另外,因为在真值表中表示所选择的函数是记忆效率低下,最好将其表示为公式y = f(x1,x2,...,xN)。
谢谢!
答案 0 :(得分:0)
假设我们有一个布尔值的数组x[1..n]
。我们的想法是创建一个辅助伯努利分布b
并按顺序应用and
或or
,概率为50%。
1. result:= true.
b := Bernoulli(0.5).
2. For i = 1 To n Do:
3. If next(b)
Then result := and(result, x[i])
Else result := or(result, x[i])
4. Return result