核心概念

对称差(Symmetric Difference)是集合论中的运算,定义为:A △ B = (A - B) ∪ (B - A),即两个集合中只属于其中一方的元素

数学表达:A △ B = { x | (x ∈ A ∧ x ∉ B) ∨ (x ∈ B ∧ x ∉ A) }

等价计算方式

方式表达式
差集再并集(A - B) ∪ (B - A)
并集减交集(A ∪ B) - (A ∩ B)
异或视角元素在 A 和 B 中出现奇数次

各语言实现

  • Python: set_a ^ set_bset_a.symmetric_difference(set_b)
  • Java: (new HashSet<>(A) → removeAll(B)) + (new HashSet<>(B) → removeAll(A))
  • Go: 遍历两个 map,检查不在对方中的 key
  • Shell: comm -3 <(sort a.txt) <(sort b.txt)grep -Fxv -f 双向差集

应用场景

  • 文件去重:找出两个文件中独有/差异的 ID
  • 数据同步:找出只需单向同步的增量数据
  • 权限比较:比较两个角色的权限差异

面试要点

  • 时间复杂度 O(n+m),空间复杂度 O(n+m),使用 HashSet 实现
  • 与差集的区别:差集 A-B 是单向的,对称差是双向的
  • 大文件处理场景需考虑内存,优先用 shell 命令或外部排序

参考链接