好吧,我对此玩得很开心。当我第一次阅读该问题时,我想到的第一件事就是群论(尤其是对称群S n)。for循环通过在每次迭代中组成换位(即交换)来简单地在S n中建立一个置换σ 。我的数学并不是那么出色,我有些生疏,所以如果我的记法不适合我。
总览
让我们假设A
数组在置换后保持不变。我们最终要求找出事件的概率A
,Pr(A)
。
我的解决方案尝试遵循以下过程:
- 考虑所有可能的排列(即数组的重新排序)
- 根据它们包含的所谓身份置换的数量,将这些置换划分为不相交的集合。这有助于将问题减少到均匀排列。
- 给定置换是偶数(且具有特定的长度),请确定获得标识置换的概率。
- 对这些概率求和,以获得阵列未更改的整体概率。
1)可能的结果
请注意,for循环的每次迭代都会创建一个交换(或transposition),该交换将导致以下两种情况之一(但不会同时发生):
- 交换了两个元素。
- 元素与自身交换。就我们的意图和目的而言,数组是不变的。
我们标记第二种情况。让我们定义一个身份转置如下:
一个身份换位当一个号码与自己交换发生。也就是说,在上述for循环中,当n == m时。
对于所列代码的任何给定运行,我们都组成N
换位。有可能0, 1, 2, ... , N
出现在这个“产业链”的身份换位。
例如,考虑一种N = 3
情况:
Given our input [0, 1, 2].
Swap (0 1) and get [1, 0, 2].
Swap (1 1) and get [1, 0, 2]. ** Here is an identity **
Swap (2 2) and get [1, 0, 2]. ** And another **
请注意,存在奇数个非同一性换位(1),并且更改了数组。
2)基于身份换位的数量进行分区
让我们K_i
以i
身份置换出现在给定排列中的事件为例。请注意,这形成了所有可能结果的详尽划分:
- 排列不能同时具有两个不同数量的身份换位,并且
- 所有可能的排列都必须在
0
和N
换位之间。
因此我们可以应用总概率定律:
现在,我们终于可以利用分区了。请注意,当非同一性换位的数目为奇数时,数组将无法保持不变*。从而:
*从群体理论来看,排列是偶数或奇数,但不会两者都。因此,奇数置换不能是身份置换(因为身份置换是偶数)。
3)确定概率
因此,我们现在必须确定两个概率N-i
:
第一学期
第一项,,表示获得具有i
身份置换的置换的概率。事实证明这是二项式的,因为对于for循环的每次迭代:
- 结果与之前的结果无关,并且
- 创建身份置换的可能性相同
1/N
。
因此,对于N
试验而言,获得i
身份易位的可能性为:
第二学期
所以,如果你走到今天这一步,我们已经将问题归结为寻找为N - i
偶数。这代表在给定i
换位为身份的情况下获得身份置换的可能性。我使用一种幼稚的计数方法来确定实现身份置换的方法数量超过可能的置换数量。
首先考虑排列(n, m)
和(m, n)
等效项。然后,将M
可能的非身份置换数目设为。我们将经常使用此数量。
这里的目标是确定可以组合换位的集合以形成标识置换的方式的数量。我将尝试在的示例旁边构造一般的解决方案N = 4
。
让我们考虑N = 4
所有身份换位(即 i = N = 4
)的情况。让X
代表身份转置。对于每种X
,都有N
可能(它们是:)n = m = 0, 1, 2, ... , N - 1
。因此,存在N^i = 4^4
实现身份置换的可能性。为了完整起见,我们添加了二项式系数C(N, i)
来考虑身份换位的顺序(此处等于1)。我试图用上面元素的物理布局和下面可能性的数量来描述这个问题:
I = _X_ _X_ _X_ _X_
N * N * N * N * C(4, 4) => N^N * C(N, N) possibilities
现在,无需显式替换N = 4
and i = 4
,我们可以查看一般情况。将以上内容与先前找到的分母结合起来,我们会发现:
这很直观。实际上,除此以外的任何其他值1
都可能会警告您。想想看:我们被认为所有的N
换位都是身份。在这种情况下,数组可能保持不变?显然,1
。
现在,再次针对N = 4
,让我们考虑2个身份换位(即 i = N - 2 = 2
)。按照惯例,我们将两个身份放在最后(并在以后订购)。现在我们知道,我们需要选择两个换位,当组成时,它们将成为身份置换。让我们将任何元素放在第一个位置,称为t1
。如上所述,有M
可能假设t1
不是身份(不可能,因为我们已经放置了两个身份)。
I = _t1_ ___ _X_ _X_
M * ? * N * N
剩下的唯一可能出现在第二个位置的元素是的逆t1
,这实际上是t1
(并且这是唯一的具有逆唯一性的元素)。我们再次包含二项式系数:在这种情况下,我们有4个开放位置,并且我们打算放置2个身份置换。我们有多少种方法可以做到这一点?4选择2。
I = _t1_ _t1_ _X_ _X_
M * 1 * N * N * C(4, 2) => C(N, N-2) * M * N^(N-2) possibilities
再次查看一般情况,这全部对应于:
最后,我们在N = 4
没有身份换位的情况下(即 i = N - 4 = 0
)进行处理。由于存在很多可能性,因此开始变得棘手,我们必须注意不要重复计算。类似地,我们从将单个元素放在第一位开始并找出可能的组合。首先采取最简单的方法:相同的换位4次。
I = _t1_ _t1_ _t1_ _t1_
M * 1 * 1 * 1 => M possibilities
现在让我们考虑两个独特的元素t1
和t2
。(因为不能等于),所以存在M
可能性t1
,只有M-1
可能性。如果我们用尽所有安排,我们将获得以下模式:t2
t2
t1
I = _t1_ _t1_ _t2_ _t2_
M * 1 * M-1 * 1 => M * (M - 1) possibilities (1)st
= _t1_ _t2_ _t1_ _t2_
M * M-1 * 1 * 1 => M * (M - 1) possibilities (2)nd
= _t1_ _t2_ _t2_ _t1_
M * M-1 * 1 * 1 => M * (M - 1) possibilities (3)rd
现在,让我们考虑三个独特的元素,t1
,t2
,t3
。t1
首先放置,然后放置t2
。和往常一样,我们有:
I = _t1_ _t2_ ___ ___
M * ? * ? * ?
我们还不能说可能t2
有多少个,我们将在一分钟内看到原因。
现在t1
,我们排名第三。注意,t1
必须走到那里,因为如果要走到最后一个位置,我们将只是重新创建(3)rd
上面的安排。重复计算是不好的!这将第三个唯一元素保留t3
到最终位置。
I = _t1_ _t2_ _t1_ _t3_
M * ? * 1 * ?
那么,为什么我们需要花一点时间t2
仔细考虑s的数量呢?该换位t1
而t2
不能是不相交的置换(即他们必须分享他们的一个(且只有一个,因为他们也不能等于)n
或m
)。这样做的原因是因为如果它们不相交,我们可以交换排列顺序。这意味着我们将重复计算该(1)st
安排。
说t1 = (n, m)
。t2
必须是以下形式的(n, x)
或(y, m)
为一些x
与y
以是非不相交的。请注意,x
可能不是n
或,m
而y
很多不是n
或m
。因此,t2
实际上可能存在的可能排列数2 * (N - 2)
。
因此,回到我们的布局:
I = _t1_ _t2_ _t1_ _t3_
M * 2(N-2) * 1 * ?
现在t3
必须是的反函数t1 t2 t1
。让我们手动完成:
(n, m)(n, x)(n, m) = (m, x)
因此t3
必须(m, x)
。请注意,这并非不相交t1
且不等于t1
或不相等,t2
因此在这种情况下没有重复计数。
I = _t1_ _t2_ _t1_ _t3_
M * 2(N-2) * 1 * 1 => M * 2(N - 2) possibilities
最后,将所有这些放在一起:
4)放在一起
就是这样了。向后工作,将我们发现的结果代入步骤2中给出的原始求和中。我计算出N = 4
以下情况的答案。它非常接近另一个答案中找到的经验值!
N = 4
M = 6 _________ ______________ _________
| Pr(K_i)| Pr(A | K_i)| 产品展示
_________ | _________ | _____________ | _________ |
| | | | |
| i = 0 | 0.316 | 120/1296 | 0.029 |
| _________ | _________ | _____________ | _________ |
| | | | |
| i = 2 | 0.211 | 6/36 | 0.035 |
| _________ | _________ | _____________ | _________ |
| | | | |
| i = 4 | 0.004 | 1/1 | 0.004 |
| _________ | _________ | _____________ | _________ |
| | |
| 总和:0.068 |
| _____________ | __________ |
正确性
如果在小组理论中有结果可以在这里应用,那就太酷了,也许还有!当然,这将使所有繁琐的计数工作完全消失(并将问题简化为更优雅的方法)。我停止在上班了N = 4
。对于N > 5
,给出的仅是一个近似值(我不确定该如何好)。很清楚为什么要考虑这一点:例如,给定N = 8
换位,显然有一些方法可以用四个独特的元素来创建身份,而这在上面并没有说明。随着置换的时间变长(据我所知...),方法的数量似乎变得难以计数。
无论如何,在面试范围内,我绝对不能做这样的事情。如果幸运的话,我将达到分母步骤。除此之外,它看起来还很讨厌。
N
固定种子和固定种子,概率为0
或,1
因为它根本不是随机的。