【发布时间】:2015-01-20 22:58:35
【问题描述】:
来自 wiki,计数紊乱的方法是,
假设有 n 个人,编号为 1, 2, ..., n。假设有 n 帽子也编号为 1、2、...、n。我们必须找到方法的数量 没有人得到与他/她的号码相同号码的帽子。让我们 假设第一个人拿帽子 i。有 n-1 种方法 第一个做出这样选择的人。现在有两种可能, 取决于我是否拿帽子 1 作为回报:
人 i 不戴帽子 1. 这个案例相当于解决 n - 1 个人和 n - 1 顶帽子的问题:其余 n 个中的每一个 − 1 个人在剩余的 n 个中恰好有 1 个禁止选择 − 1 顶帽子(我的禁止选择是帽子 1)。 第 i 人拿了 1 顶帽子。现在问题减少到 n - 2 个人和 n - 2 顶帽子。
由此推导出以下关系:
!n = (n - 1) (!(n-1) + !(n-2))
这里我不明白第二部分。我试着这样想问题,
NO.1 : 我是 i 人,所以我不能拿 i'th hat。所以我有 n-1 个选项。这减少了让 n-1 人戴着 n-1 顶帽子的问题,这将乘以 (n-1) 次。
但我无法理解递归调用的第二部分。 从段落中,“我带帽子的人1”如何...? “我的禁帽是1”不是真的吗?那我怎么拿帽子1。否则如果“我的禁帽不是1”那不就减少到NO.1了吗?
所以我或多或少地难以理解递归调用的这一部分,
!n = (n - 1) (!(n-1) + !(n-2))
*******
【问题讨论】:
标签: algorithm recursion dynamic-programming combinatorics