【发布时间】:2017-05-14 19:09:16
【问题描述】:
假设我有两组项,以及一个检查两项等价的函数(不是严格相等,因此一项可能等价于另一组中的多项),我想确定是否存在一对一的对应关系,使得等价对每一对都成立。
对于这个问题是否有任何既定/最佳的解决方案?
这个问题最初来自确定两个 C 联合类型是否兼容,标准要求这种对应关系,但是事情变得棘手,因为联合成员可以是匿名的,所以一个项目的等效项可以有多种可能性。目前我正在采用一种天真的方法,但我想知道是否有任何建立讨论/解决方案。
【问题讨论】:
-
我们可以假设等价(由say“≡”定义)是可传递的,即如果
a ≡ b和b ≡ c然后a ≡ c? -
@Dukeling 在这个 C 案例中,遗憾的是,没有。因为类型 A、B、C 可以用相同的标签声明,并且如果 A 和 C 是完整类型但 B 不是,则传递属性被破坏。但我仍然想知道它是否真的是,是否有任何既定的讨论?
-
如果它是可传递的,那么到目前为止发布的答案应该可以很好地解决问题(我不知道任何“既定讨论”)。如果它不是可传递的,我很确定它是 NP 完全的(即假设解决一般情况真的非常慢),尽管我目前还没有证据证明这一点。
标签: c algorithm set set-theory equivalence-classes