1

这可能更像是一个数学问题而不是编程问题,但我一直在考虑这个问题并且很难弄清楚这是否是一个可解决的问题。

我有以下内容:

  • 集合AB源自某些符号集
  • 布尔函数F : A × B → {0,1}

我希望构造集合 C = {(x,y) : x ∈ A, y ∈ B, F(x,y) = 1}。

(对于任何对,F 都可以在 O(1) 中计算出来)

现在到现在为止,这个计算基本上只包括通过函数 F 对 A × B 进行过滤,如果 F 是常数时间,则运行在 O(|A| × |B|) 中。

但是,我知道 C 的一个属性,我觉得可以帮助我...

我知道|C| << |一个| |B| , 事实上我很确定|C| 大约是 |A| . 我觉得有一些方法可以利用这一点(我最近被介绍给概率算法,我觉得这可能会有所帮助,但我绝对不确定)。

我想需要一些形式的辅助结构来解决这个问题,这本身不应该有太大问题,只要结构只是A大小的多项式(计算幂集可能有点多,A 可以有点大)。

这也感觉像是已被证明具有某种下限复杂性的东西,但我并没有真正的学术知识来证明这一点。

任何关于我应该关注哪些领域的指导和提示将不胜感激。

到目前为止我的想法是:

  • 这看起来很像SAT 问题,但我对这些事情几乎一无所知

  • 这个问题感觉与集合判别问题略有同构(至少......计算两个集合之间的差异)。但是,我无法以这种形式找到有关该主题的任何研究(仅获得很多“迭代 A,迭代 B”类型的答案)。

4

1 回答 1

1

正如您所建议的,在您提出问题的措辞中,唯一正确的解决方案是对 A 和 B 和过滤器进行双重迭代。那是因为您已经将问题描述为“构造集合 C”,它缺少其他信息,通常意味着枚举集合 C。这样做并获得 C 的确切枚举的唯一方法,至少在提供的信息的情况下, 是在 A × B 中的每个元素上评估 F。

用另一种方式来解释这个问题,如果你有一个特征函数,你可以说你有一个 C 的定义,但这只是 F。所以我假设这不是你的意思。

关键似乎是您需要阐明 F 的相关属性,因为这是枚举 C 的算法钩子。我的意思是您应该提出一个关于 F 的公理,它可以让您在直接过滤上获得一些捷径。例如,这可能意味着存在一些允许更短算法的辅助函数 G。假设这样一个 G,枚举算法将同时评估 F 和 G,而不是单独评估 F。

于 2012-11-05T13:35:25.373 回答