【问题标题】:How can I best check if two unordered pairs match?如何最好地检查两个无序对是否匹配?
【发布时间】:2016-03-23 21:55:38
【问题描述】:

我有两对 (A,B) 和 (C,D)。我想检查它们是否包含相同的元素。顺序未知。我可以使用:

(A == C && B == D) || (A == D && B == C)

但这似乎是非常统一和重复的代码,好像有一种方法可以浓缩它。我不知道怎么做。能不能把这个逻辑浓缩一下?

【问题讨论】:

  • 项目是数字吗?
  • @MattClarke 没有。它们是类实例。
  • 该死!所以不可能有花哨的数学。
  • 您使用什么语言?某些语言允许:例如if ((A,B) -containedin (C,D))(假设每组中的对象数量相同)。 APL 可能有更紧凑的表示
  • 一如既往,您可以在预计算+内存与计算之间进行权衡:为您的配对存储一个 unic id(不依赖于顺序),以便您可以写:if ( pair1.id == pair2.id )

标签: optimization logic boolean-logic


【解决方案1】:
(A == C && B == D) || (A == D && B == C)

真值表

+------+------+------+------+----------+
|   A  |  B   |  C  |   D  |   O/P  |
+------+------+------+------+----------+
|   0  |   0   |   0  |   0  |    1     |
+------+------+------+------+----------+
|   0   |   0  |   0  |  1   |    0     |
+------+------+------+------+----------+
|   0   |   0  |  1   |  0   |    0     |
+------+------+------+------+----------+
|   0   |   0  |  1   |   1  |    0     |
+------+------+------+------+----------+
|   0   |   1  |   0  |   0  |   0      |
+------+------+------+------+----------+
|    0  |   1  |   0  |  1   |    1     |
+------+------+------+------+----------+
|    0  |   1  |  1   |  0   |   1      |
+------+------+------+------+----------+
|    0  |  1   |  1   |   1  |   0      |
+------+------+------+------+----------+
|   1   |   0  |   0  |   0  |   0      |
+------+------+------+------+----------+
|   1   |   0  |   0  |  1   |     1    |
+------+------+------+------+----------+
|   1   |   0  |   1  |  0   |    1     |
+------+------+------+------+----------+
|   1   |   0  |  1   |  1   |    0     |
 +------+------+------+------+----------+
|    1  |   1  |  0   |   0  |     0    |
+------+------+------+------+----------+
|   1   |   1  |   0  |  1   |     0    |
+------+------+------+------+----------+
|    1  |  1   |   1  |  0   |     0    |
+------+------+------+------+----------+
|    1  |   1  |  1   |  1   |   0      |
+------+------+------+------+----------+
  • 如果 A、B、C、D 是布尔逻辑,则 (A == C && B == D) || (A == D && B == C) 是 K-map 缩减技术和 Quine-McCluskey 最小化技术的最简单形式。

  • 如果 A、B、C、D 是数字(ie int or float),那么你可以简单化为A+B==C+D

如果(A+B==C+D) { //真实的陈述 }

  • 如果 A、B、C、D 是字符串,则布尔逻辑不适用。它可能很简单,但需要考虑其他信息来解决表达式。

谢谢,希望你满意

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多