核心概念
对称差(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_b或set_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 命令或外部排序