假设有n个人编号为1,2,...,n。让我们来吧 帽子也编号为1,2,...,n。我们必须找到方法的数量 没有人得到与他/她的号码相同号码的帽子。让我们 假设第一个人拿帽子我。有n - 1种方式 第一个做出这样选择的人。现在有两种可能性, 取决于我是否以帽子1作为回报:
我不戴帽子1.这个案子相当于解决 n - 1人和n - 1个帽子的问题:剩下的每个人 - 其余1人中有1人被禁止选择 - 1个帽子(我禁止的选择是帽子1)。 我戴帽子的人1.现在问题减少到n - 2人和n - 2帽子。
由此得出以下关系:
!n = (n - 1) (!(n-1) + !(n-2))
这里我不明白第二部分。我试着想出这样的问题,
NO.1:我是我,所以我不能戴帽子。所以我有n-1选项。这减少了n-1人的n-1帽子将成倍增加(n-1)次的问题。
但我无法理解递归调用的第二部分。 从文章中,“我带帽子的人1”怎么样......?难道不是真的“我禁止的帽子是1”?那我怎么拿帽子1.否则,如果“我禁止的帽子不是1”那么它不会减少到1号吗?
所以我或多或少地无法理解递归调用的这一部分,
!n = (n - 1) (!(n-1) + !(n-2))
*******
答案 0 :(得分:4)
为了清楚起见,我们可以调用紊乱函数f
。在f(n)
,有n个帽子和n个人。每个人都可以选择n-1
个帽子。第1人从i
选项中取出n-1
个帽子。人i
仍有n-1
个帽子可供选择,其他人n-2
必须选择(他们不能选择自己的帽子或i
)。
现在我们需要两个i
人的案例。把它想象成
i
采取帽子1 i
不接受帽子1,我们不知道他们将要采取什么行动在案例2中,我们知道人i
不接受帽子1,但仅此而已。以前我们知道那个人i
有n-1
个选择,现在他有n-2
,就像其他人一样。这意味着我们可以为这种情况计算f(n-1)。在案例1中,不再禁止人i
带帽子1.实质上,我们知道人i
和人1
已交换帽子而不再需要匹配,因此F(N-2)。
这两种情况都是可能的,所以我们有一个复发,它将(n-1)个选择乘以发生的可能性f(n) = (n-1)(f(n-1) + f(n-2))
答案 1 :(得分:1)
有两个声明:
第一个是显而易见的:一旦你从{1,...,n}的紊乱中删除了1-> i和i-> 1,你就会陌生化剩下的n-2项。相反,如果你有{2,3,...,i-1,i + 1,...,n}的紊乱,那么你可以把它变成{1,...的紊乱。 。,n}通过添加映射1-> i和i-> 1。
第二个观察通过注意到如果你有{2,...,n}的紊乱,那么你可以通过添加地图1-&gt将它变成{1,...,n}的紊乱;我和改变任何地图到我映射到1而不是。相反,如果你有{1,...,n}的紊乱,其中1-> i和我没有映射到1,那么你可以创建{2,...,n的紊乱通过删除1-> i映射,并将任何映射更改为1以映射到i。
这为您提供了一种计算紊乱的方法:
D(n)= sum(i = 2..n)(D(n-1)+ D(n-2))=(n-1)(D(n-1)+ D(n- 2))