3的全排列 6种 可能性

三个不同元素的所有排列顺序 · 递归 · 字典序 · 数学之美

(1,2,3) (1,3,2) (2,1,3) (2,3,1) (3,1,2) (3,2,1)
三个元素排列示意图
3个元素 · 6种排列

什么是「3的全排列」?

全排列是指将三个互异元素(例如 1、2、3)按所有可能的顺序排成一列。3! = 3×2×1 = 6 种不同排列。这是组合数学中最基础的计数模型,也是算法面试的经典问题。

无论是密码学、任务调度还是数据分析,全排列都是理解回溯与递归的绝佳切入点。掌握3的全排列,就能轻松推广到 n 个元素。

公式 P(n) = n!P(3) = 6

✨ 六种排列一览

1 2 3
顺序
1 3 2
交换2/3
2 1 3
1↔2
2 3 1
循环右移
3 1 2
循环左移
3 2 1
逆序
全排列树形图
递归树 · 三个元素的全排列生成过程

🧠 递归回溯法

固定第一个位置,递归排列剩余元素。核心是交换与回溯:

  • 将每个元素放到首位
  • 递归排列剩余 n-1 个元素
  • 回溯(换回)恢复数组
permute([1,2,3], 0) → 交换产生6种
递归回溯示意图

📚 字典序法

从当前排列生成下一个字典序更大的排列:

  1. 从右向左找第一个升序对 (a[i] < a[i+1])
  2. 在右侧找大于 a[i] 的最小值 a[j]
  3. 交换 a[i] 与 a[j]
  4. 反转 i+1 到末尾

初始排列 (1,2,3) → (1,3,2) → (2,1,3) → … → (3,2,1)

字典序生成

❓ 常见问题与解答

Q:3的全排列为什么是6种?

A:排列数公式 n! = 3×2×1 = 6。第一个位置有3种选择,第二个位置有2种,第三个位置仅剩1种,乘积为6。

Q:如何用代码生成3的全排列?

A:最常用递归回溯:固定一个元素,递归处理剩余元素。也可以用 Python 的 itertools.permutations 或 C++ 的 next_permutation

Q:如果元素有重复怎么办?

A:重复元素的全排列要去重。可以先排序,递归时跳过相同数字(剪枝),或者用哈希集合记录已选元素。

Q:3的全排列在实际中有何应用?

A:任务排序、密码枚举、路线规划、游戏状态穷举。任何需要尝试所有顺序的场景都会用到全排列思想。

Q:如何快速列出所有排列?

A:手算可用“树形图”或“轮换法”。算法推荐递归回溯,代码简洁且容易扩展至 n 个元素。

Q:全排列与组合的区别?

A:排列考虑顺序(123 ≠ 321),组合只关注元素集合({1,2,3} 只算一种)。3选3的组合只有1种,排列有6种。

排列组合对比 排列有序 · 组合无序

📖 知识拓展

从3的全排列出发,你可以探索:

  • n皇后问题:利用全排列思想解决8皇后变体
  • 堆排序与排列:Heap's algorithm 高效生成全排列
  • STL next_permutation:C++ 标准库字典序实现
  • 排列的奇偶性:通过交换次数定义排列的符号
扩展阅读