C 确定与等价函数一一对应的算法
假设我有两组项目,以及一个检查两个项目等价性的函数(不是严格相等,因此一个项目可能等价于另一组中的多个项目),我想确定是否存在一对一的对应关系,从而使每一对项目保持等价性 这个问题有没有既定的/最佳的解决方案C 确定与等价函数一一对应的算法,c,algorithm,set,set-theory,equivalence-classes,C,Algorithm,Set,Set Theory,Equivalence Classes,假设我有两组项目,以及一个检查两个项目等价性的函数(不是严格相等,因此一个项目可能等价于另一组中的多个项目),我想确定是否存在一对一的对应关系,从而使每一对项目保持等价性 这个问题有没有既定的/最佳的解决方案 这个问题最初来自于确定两个C联合类型是否兼容,对于这两个C联合类型,标准要求这样的对应,但是事情变得棘手,因为联合成员可以是匿名的,因此一个项目的等效项目可以有多种可能性。目前我采用的是一种简单的方法,但我想知道是否有任何关于它的讨论/解决方案。一种解决方案是实现一个具有两个属性的哈希函
这个问题最初来自于确定两个C联合类型是否兼容,对于这两个C联合类型,标准要求这样的对应,但是事情变得棘手,因为联合成员可以是匿名的,因此一个项目的等效项目可以有多种可能性。目前我采用的是一种简单的方法,但我想知道是否有任何关于它的讨论/解决方案。一种解决方案是实现一个具有两个属性的哈希函数:
n
项进行强制O(n^2)等价性检查
运行时间是以下任务的总和
- O(N)生成散列值
- O(NlogN)对列表进行排序
- M*O(n^2)用于暴力检查(如果哈希函数不完美)
因此,与蛮力比较的运行时间O(N^2)相比,完美哈希函数的总运行时间为O(NlogN)。我们可以假设等价(由say定义)≡") 是可传递的,即如果
a≡ b
和b≡ c
然后a≡ c
?@Dukeling在这种情况下,很遗憾,不是。因为类型A、B、c可能用相同的标记声明,如果A和c是完整类型,但B不是,transive属性被破坏了。但我仍然想知道它是否真的是,是否有任何关于它的既定讨论?如果它是传递的,到目前为止发布的答案应该可以很好地解决问题(我不知道任何“已建立的讨论”)。如果它不是可传递的,我很确定它是NP完全的(即,假设对于一般情况来说,求解速度非常非常慢),尽管我目前还没有这方面的证据。只有在OP的“等价性”下,这样的哈希函数才有可能“概念确实是一种等价关系;但从他/她的后续评论来看,显然不是。此外,即使它是一种等价关系,也可能无法在其上计算有意义的哈希代码;请参阅。