Math 找出没有两个相同元素相邻的排列数

Math 找出没有两个相同元素相邻的排列数,math,permutation,Math,Permutation,对于我一直面临的这个问题,我需要一些帮助 假设我有一个数组=[3,4,1,5,6,1,3] 现在我需要一个排列,重复的元素3不应该和其他元素3并排,并且对于1也是一样的。 我看了很多YouTube,用谷歌搜索了一下,但是运气不好 提前感谢您的帮助。、、、您是在寻找通用案例解决方案还是仅针对特定阵列?如果您正在寻找更一般的情况,我认为您应该指定限制,否则问题会变得太复杂。如果您想编写代码,同样适用。有些语言(如Python)的库使这些工作相对简单,但时间复杂度可能会变得难看 下面是解决这个问题的数

对于我一直面临的这个问题,我需要一些帮助 假设我有一个数组=[3,4,1,5,6,1,3]

现在我需要一个排列,重复的元素3不应该和其他元素3并排,并且对于1也是一样的。 我看了很多YouTube,用谷歌搜索了一下,但是运气不好
提前感谢您的帮助。、、、

您是在寻找通用案例解决方案还是仅针对特定阵列?如果您正在寻找更一般的情况,我认为您应该指定限制,否则问题会变得太复杂。如果您想编写代码,同样适用。有些语言(如Python)的库使这些工作相对简单,但时间复杂度可能会变得难看
下面是解决这个问题的数学方法:

步骤1:假设所有元素都是不同的a=[3,4,5,6,1]
在这种情况下,我们将有5!不同的选项(您有5个选项选择第一个元素,4个选项选择第二个元素,依此类推)

步骤2:假设有一个重复的元素a=[1,3,4,5,6,1]
在这种情况下,我们有6个/2.不同的选项(6!来自步骤1,我们将其除以2!因为如果您将重复元素的位置切换到自身,则数组不会发生变化)。
现在,您希望排除重复元素相邻出现的选项。诀窍是将它们视为一个元素。现在我们有a=[(1,1),3,4,5,6]。有5个!不同的选择。我们从总数中减去这个,就是6/2! - 5.我会给你答案。

步骤3:(您的案例)两个重复元素a=[3,4,1,5,6,1,3]
我们继续用同样的逻辑。我们总共有7个/(2!x2!)选项。从第2步开始,如果我们想排除1出现在1旁边的情况,那么我们必须减去6!从总数中。我们还有3个,也出现了两次。那么,我们再减去6!从总数中。不幸的是,我们已经减去了一些案例两次(你能猜出是哪一个)。如果我们找到减去两次的情况并将它们相加,我们将得到答案。
我们减去两次的情况是,当1在1之后,同时3在3之后,也就是a=[(1,1),4,5,6,(3,3)]。我们已经减去了1和3的选项。有5个!像这样的案例(你能猜出原因吗?。

对一些人来说,拿7分/(2!x2!)-2x6!+5!.

如果您不是在寻找通用的解决方案,那么这些数字并不大,所以您可以编写一个bruteforce代码(为了节省一些时间/空间,请将数组转换为字符串)

我可能在计算中漏掉了一些东西,但如果你遵循逻辑,你就会得到答案。此外,如果你想了解这些东西为什么会起作用,可以尝试使用小数据来获得直觉。如果你需要密码,请告诉我。我将更新解决方案