- 注册时间
- 2007-12-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 41286
- 在线时间
- 小时
|
发表于 2023-11-3 20:41:35
|
显示全部楼层
这个概念有点难理解,看了大半天才明白。
原来所谓n个变量的布尔函数就是n个元素集合{1,2,3,...,n}的所有子集到{0,1}集合的映射。
比如n=2,那么就是{{}, {1},{2},{1,2}}到{0,1}的所有映射,比如f({})=f({1})=0, f({2})=f({1,2})=1就是一个n=2的布尔函数。
而单调递增的布尔函数要求,如果一个集合被映射到0,那么它的所有子集也都映射为0,比如上面我给出的例子就是单调递增的。
而函数f({})=f({1,2})=0,f({1})=f({2})=1就不单调递增。
oeis链接里面还给出了一个antichain的概念,但是没有给出解释,这个比较费解。
由于如果一个集合被映射到0,那么它的所有子集也都会被映射到0,所以我们只需要找到所有那些被映射到0的极大集合(也就是所有包含它的集合都被映射到1),这些极大集合就构成了antichain。然后,我们就可以用antichain来表示这个函数映射了。
比如n=0有两个antichain,也就是有两个不同的单调增函数:
{}:,代表所有集合被映射为1,也就是函数f({})=1
{{}}: 代表空集被映射为0,也就是函数f({})=0
n=2有6个antichain
{}: 代表所有集合被映射为1,也就是函数f({})=f({1})=f({2})=f({1,2})=1
{{}}: 代表仅空集被映射为0, 也就是函数f({})=0, f({1})=f({2})=f({1,2})=1
{{1}}: 代表{1}和它子集被映射为0, 也就是函数f({})=f({1})=0,f({2})=f({1,2})=1
{{2}} : 代表{2}和它子集被映射为0, 也就是函数f({})=f({2})=0,f({1})=f({1,2})=1
{{12}}: 代表{12}和它子集被映射为0, 也就是函数f({})=f({1})=f({2})=f({1,2})=0
{{1}{2}}: 代表{1},{2}和它们的子集被映射为0,也就是函数f({})=f({1})=f({2})=0,f({1,2})=1
另外我们可以看出对于一个antichain, 它的任意两个元素(都是集合)相互不包含。而对于任何一个符合这个条件的子集集合,它也是一个antichain.
所以可以通过计数所有任意两个元素都互相不包含的集合的数目就可以。
|
|