【问题标题】:find the number of permutations for no two identical elements sit next to each other找出没有两个相同元素彼此相邻的排列数
【发布时间】:2021-04-13 05:07:42
【问题描述】:

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

现在我需要重复元素 3 不应位于其他 3 旁边且与 1 相同的排列。 我想怎么解决这个我看了很多 YouTube 并用谷歌搜索但没有运气 在此先感谢您的帮助。,,,

【问题讨论】:

    标签: math permutation


    【解决方案1】:

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

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

    第 2 步:假设您有一个重复元素 a = [1,3,4,5,6,1]
    在这种情况下,我们有 6!/2!不同的选项(6!来自第 1 步,我们将其除以 2!因为如果将重复元素的位置切换到自身,则数组不会有机会)。
    现在您要排除重复元素彼此相邻出现的选项。诀窍是将它们视为一个元素。所以现在我们有一个 = [(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)]。我们已经为一和三减去了这些选项。有5个!类似的情况(你能猜到为什么吗?)。

    对某些人来说,得到 7!/(2!x2!) - 2x6! + 5!。

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2018-09-07
      • 2018-03-31
      • 2015-01-19
      • 2023-04-03
      • 2015-03-25
      相关资源
      最近更新 更多