如何自动生成如下组合表?

如何自动生成如下组合表?

下面显示了X带有即将指定的约束的可能的表的示例。

\documentclass[preview,border=12pt,12pt]{standalone}
\begin{document}
\begin{tabular}{ccc}
n & a & b\\
a & n & b\\
n & b & a\\ %<====== updated!
a & b & n\\
n & b & a\\
a & b & n\\
n & b & a
\end{tabular}
\end{document}

图片已更新!

在此处输入图片描述

约束

  • 只有 3 列。
  • 只有3个字符nab
  • 相邻两行不能有n同一列的字符。注意第一行和最后一行不被视为相邻两行。更新:对于除第一行之外的每一行, 的位置n始终位于 下方a
  • n除第一列之外的字符总数必须始终为 3。
  • n除第二列之外的字符总数必须始终为 6。
  • n除第三列之外的字符总数必须始终为 5。

我如何生成X可能的表格?

答案1

我们可以忽略 a 和 b 之间的区别(因为它们在约束中不起作用),任何可行的布局都会通过交换每行上的 a 和 b 而产生 2^7=128 种变体(如果一行可能有 2 个 a 或 2 个 b,则为 4^7=16384 种变体)

因此有这些可能的行类型(称为 1 2 和 3)

n.. 1
n.. 1
n.. 1
n.. 1
.n. 2
..n 3
..n 3

您需要对该集合进行排列,以便相邻的位置不会出现任何行类型。

如果前三行都用这三种类型,那么剩下的四行就必须用 1113 填充,这是不可能的,所以很容易看出唯一的可能性是

1213131
1312131
1313121

那是

n.. 1
.n. 2
n.. 1
..n 3
n.. 1
..n 3
n.. 1

或者

n.. 1
..n 3
n.. 1
.n. 2
n.. 1
..n 3
n.. 1

或者

n.. 1
..n 3
n.. 1
..n 3
n.. 1
.n. 2
n.. 1

. .然后,通过用a bb aa aa b和替换b a(具体取决于),如果不允许 naa,则每个布局复制 128 次;如果允许 naa,则复制 16384 次b b


使用具有附加约束的更新问题,答案与上述相同,只是每个布局只有两个副本而不是 128 个,. .最后一行a bb a每隔一行由 n 的放置确定,a 由下一行的 n 强制,并且 b 必须进入剩余的插槽(假设未说明的约束是每一行都有 a 和 b)

相关内容