【问题标题】:Expressing fact in polynomial size boolean expression用多项式大小布尔表达式表达事实
【发布时间】:2012-02-22 11:48:36
【问题描述】:

如果我有布尔变量 a_1、a_2、..、a_n。如何使用多项式大小布尔表达式来表达设置为 true 的布尔变量的数量大于一些 k 的事实? (指数很容易 - 只需编写 newton(n,k) 表达式)。

【问题讨论】:

    标签: algorithm complexity-theory boolean-logic boolean-expression reduction


    【解决方案1】:

    使用任何排序网络对布尔值进行排序。然后只取 (k+1)'th 排序的位,这会给你结果。

    由于排序网络的每个元素都代表一对逻辑运算,因此您可以将此网络解释为逻辑表达式。使用良好的排序网络,这将为您提供具有 O(N*log2(N)) 操作的表达式。

    【讨论】:

    • 就是这样!我只是没有说明,我需要 CNF 中的这个表达式(仍然是多项式)。你能想出一个排序网络的例子,它可以让我合理地简单地拥有它吗?
    • CNF 使这个问题变得更加困难。我不知道任何给出 CNF 表达式的排序网络。而且,据我所知,在最坏的情况下,将任何表达式转换为 CNF 都会导致表达式的指数爆炸。我不知道任何既是 CNF 又是多项式的解决方案。这很可能是不可能的。
    • 嗯,这根本不是真的。人类手工提出的大多数实验都可以转换为CNF,而且每个图灵机都可以写成多项式复杂度的CNF表达式,所以如果我们使用一台机器进行排序,我们就会在多项式复杂度上进行转换。我所要求的只是排序网络,它很容易手动写出来,这样证明就很简单。
    • 每个已知的排序网络都会产生相同形式的表达式:交替的 AND 和 OR。因此,来自任何网络的表达都将同样简单(或同样不可能)转换为 CNF。我不能推荐任何特定的。如果选择操作数较少的简单网络,请尝试Batcher odd–even mergesortBitonic sorter。我仍在思考为什么 CNF 不能是多项式的证明。
    • 好的,但是“你知道的大多数排序网络”碰巧是可以表达的,比如只有指数大小的规范表示的 sat 表达式,并不能证明所有排序网络都会有指数大小的范式,是吗?此外,我实际上找到了相当于 clique 的多项式 3-CNF 表达式(这是我最初的问题),我不确定排序网络的确切定义是什么,但我很确定我的表达式的子集可以用来写多项式大小的 3-CNF 排序网络。
    【解决方案2】:

    令 t[i][j] 表示元素 a_1, .., a_i, j 其中设置为真。 现在我们可以清楚地看到

        t[i][j] => (t[i-1][j] or (t[i-1][j-1] and a_i). 
    

    (因为任一变量已在 a_1、..、a_(i-1) 中设置,或者 a_i 已设置且 a_1、..、a_(i-1) 中有 j-1 个变量。 这是多项式大小表达式(围绕 n*k 个变量 t[i][j],对于每个表达式,就像我上面写的那样)。那么如果 t[n][k] 为真,我们得到 n 个变量中至少 k 个为真。

    参考 Evgeny 的回答, 为了按排序顺序(首先为真,然后为假)获取变量,我们查看序列 t[n][1], t[n][2], .. t[n][n].

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 2017-04-06
      • 2023-03-23
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多