排列/组合算法速查表
TL;DR
本文简要介绍了数学排列组合之间的区别,解释了排列组合算法背后的主要思想,并包含 JavaScript 中算法实现的链接。
JavaScript 代码示例可以在JavaScript 算法和数据结构库 中找到 。阅读更多内容以了解更多详细信息。
什么是组合和排列
假设我们有一个 集合 或 一组 东西(数字、字母、水果、硬币等的集合),我们需要 从中挑选一些元素 组成另一个集合。例如,假设你从可用数字集合中挑选彩票号码 ({0, 1, 2, 3, 4, 5, 6, 7, 8, 9} → {4, 5, 9})。或者你从可用水果集合中挑选水果来做水果沙拉 ({橙子、苹果、香蕉、葡萄} → {苹果、香蕉})。又或者你正在尝试猜测锁的密码,你需要从 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 中选择 3 个数字来猜测正确的密码 ({1, 1, 2}, {1, 1, 3}, {1, 1, 4}, …)。在所有这些情况下,你都是按照一些规则从另一个集合中创建一个集合。这些规则定义了你的新集合是 排列 还是 组合。
如果 新集合中元素的 顺序很重要, 那么你处理的就是 排列 (例如,在锁密码的情况下,集合 {1, 1, 2} 与集合 {2, 1, 1} 不同)。否则,如果顺序 无关紧要 ,那么你处理的就是 组合 (水果组合 {苹果,香蕉} 来做沙拉——无论你先选苹果还是香蕉都没关系)。
您的新集合 可能包含或不包含重复项(或重复)。例如,在锁定密码中,您可以使用重复的数字,但在处理比赛获胜者集合({Black, Smith, Brown})时,您不允许使用重复的数字,因为让同一个人同时占据两个获胜位置是没有意义的。
为了说明所有这些差异,我创建了小型备忘单,以便更容易记住它们。
排列概念速查表
组合概念速查表
排列/组合算法速查表
如果您想实现排列和组合算法,您可能会发现以下排列/组合算法备忘单很有用。
JavaScript 中的组合和排列
如果您想查看这些算法在 JavaScript 中的确切实现,您可以找到以下链接:
我希望这些备忘单对您有所帮助,并且它们能够帮助您顺利地编写组合/排列算法。
编码愉快!
文章来源:https://dev.to/trekhleb/permutationscombinations-algorithms-cheat-sheets-3job