这可能更像是一个数学问题,而不是一个编程问题,但我已经考虑了一段时间,并且很难弄清楚这是否是一个可解决的问题。
我有以下内容:
我希望构造集合C = {(x,y):x∈A,y∈B,其中F(x,y)= 1}。
(对于任何一对,F可以用O(1)计算)
到目前为止,如果F是恒定时间,这个计算基本上只包括通过函数F在A×B上的过滤器,在O(| A |×| B |)中运行。
然而,我知道C的一个属性,我觉得可以帮助我...
我知道 | C | << | A | | B | ,实际上我很确定 | C |是关于| A | 。我觉得有一些方法可以利用这个(我最近已经介绍了probabalistic算法,我觉得这可以帮助,但我肯定不确定)。
我想有一些形式的辅助结构对于解决这个问题是必要的,只要结构只是多项式到 A 的大小,就不会有太大的问题(计算电源设置可能有点多,A可能有点大)。
这也感觉像已被证明具有某种下界复杂性的东西,但我并不具备证明它的学术知识。
我将非常感谢任何有关我应该查看的领域的指导和提示。
到目前为止我的想法:
这看起来很像SAT issue,但我对这些事情几乎一无所知
这个问题与设定识别问题略有同构(至少......计算两组之间的差异)。但是,我无法在这种形式中找到关于该主题的任何研究(只有很多“迭代A,迭代B”类型答案)。
答案 0 :(得分:1)
在您提出问题的措辞中,唯一正确的解决方案是对A和B进行双重迭代,并按照您的建议进行过滤。那是因为你已经说过“构造集合C”的问题,缺少其他信息,通常意味着枚举集合C.唯一的方法是做到这一点并获得C的精确枚举至少在提供的信息的基础上,评估A×B中每个元素的F.
在解释问题的另一种方式中,你可以说你有一个C的定义,如果你有一个特征函数,但那只是F.所以我会假设这不是你的意思。
关键似乎是你需要阐明F的相关属性,因为这是C枚举的算法钩子。我的意思是你应该提出一个关于F的公理,它可以让你有一些捷径直接过滤。这可能意味着,例如,存在一些允许更短算法的辅助函数G.假设有这样的G,枚举算法将评估F和G,而不是单独评估F.