【问题标题】:Given a set and a pairwise xor set, find the second set?给定一个集合和一个成对异或集合,找到第二个集合?
【发布时间】:2015-11-23 16:21:16
【问题描述】:

我们用两组整数来生成第三组,其中包含第一组中每个元素与第二组中每个元素的异或。

现在作为一个问题,我们得到了第一个集合和第三个集合,即带有异或的集合,我们需要生成第二个集合。

保证输入只有一个可能的答案

例如:

(为了清楚起见,这里使用二进制)

输入:

设置 1: {101, 111}

第三组: {001, 011}

然后Set2,解集将是

第二组: {110, 100}

如果我们这样做 Set1 ^ Set2

{011, 001, 001, 011}

要点:

  • 输入是集合,而不是数组,所以没有重复

  • 这并不意味着set3创建时没有重复,a^d可能等于b^c

  • 没有大小限制,set1 和 set2 必须具有相同的大小。

另外,我的测试用例并没有那么好,看起来我们可以简单地执行 set1^set3 来得到答案,但这显然不是正确的方法。

【问题讨论】:

  • 异或是一个一对一的映射,如果你根据其中一个输入把它分成两半。只需在字典中编码映射并遍历对。
  • 你能详细说明把它分成两半吗
  • 你不能,至少不是唯一的:first = {0b00, 0b01} and third = {0b00, 0b01, 0b10, 0b11} 可能是 second = {0b00, 0b10} 或 second = { 0b00, 0b11}.
  • 抱歉,我已经更新了问题说明
  • @suyash 考虑所有 WLOG 集合中的第一个元素。如果集合 1 在位置 0 有位 0,则映射 {0:0, 1:1} 可以应用于集合 3 的位置 0。否则集合 1 在位置 0 有位 1,因此映射 {0:1, 1 :0} 可以应用于第 3 组的位置 0。

标签: algorithm


【解决方案1】:

如果你有 set1 = (a, b) 和 set2 = (c, d) 然后你得到 set3 = (a^c, a^d, b^c, b^d) 并且需要找到 set2。

所以我们知道集合 3 中的第一个元素是 a^c,所以要找到 c,我们将执行 (a^c)^a => c 然后要找到 d,我们将从 set3 和 (b^d)^b(从 set1) 中选择 b^d,我们将得到 d。

【讨论】:

  • 我们有集合作为输入,如果 set1 是 {a, b} 而 set2 是 {c, d},那么 xor 集是 {a^c, a^d, b ^c, b^d}, 做 set1 ^ set3 得到 {c, d, a^b^c, a^b^d}
  • 你怎么知道哪个是 a^c 哪个是 b^d,假设我们将 set1 视为 {a, b}。元素之间没有排序
  • 我们也不能假设 set2 的大小是某个数字。它也可能包含 3 个元素,但因为我们正在使用集合。重复不会重复
  • 我认为如果您可以使用一些示例编辑此问题将会很有帮助。这将有助于更好地理解问题。
猜你喜欢
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2016-01-25
  • 2016-04-27
  • 2012-08-06
相关资源
最近更新 更多