首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算集合而不是集合的排列

如何计算集合而不是集合的排列
EN

Stack Overflow用户
提问于 2015-02-03 03:21:33
回答 2查看 108关注 0票数 2

假设我们有以下整数集合:{1,1,2}。我们可以用3种可能的方式来安排这个集合的顺序:

1,1,2

1,2,1

2,1,1

一般情况下,我们如何计算可以排列整数集合的方式的数量?假设集合的大小非常大(在最坏的情况下是10^5),但是答案总是足够小,可以放入一个长的集合中。这个问题是否存在有效的解决方案,如果存在,如何在Java中实现它?

EN

回答 2

Stack Overflow用户

发布于 2015-02-03 03:24:31

假设您有n个整数,它们是由整数x_i的n_i副本构成的。

要计算出排列的数量,只需计算

代码语言:javascript
复制
t = n!

但是,由于您并不关心具有相同值的数字是如何排列的,因此对于i的每个值,将总数减去:

代码语言:javascript
复制
t = t / n_i!

在您的例子中,您有3个整数,其中1个是2的副本,2个是1的副本。

您可以计算:

代码语言:javascript
复制
t = 3! = 6
t = t/1! = 6/1 = 6
t = t/2! = 6/2 = 3

所以答案是3。

票数 2
EN

Stack Overflow用户

发布于 2015-02-03 05:27:39

一般情况下,我们如何计算排列整数集合的方式的数量?

循环遍历集合,计算每个数字在集合中出现的次数。

排列数的公式是size factorial / number of duplicate integers factorial。在您的示例1,1,2中,大小为3,重复整数的数量为2。

3!/ 2!=3*2*1/2*1= 3;

另一种更加计算机友好的计算3!/ 2的方法!就是先把2的阶乘除以,剩下3。

如果集合没有重复的整数,则排列的数量为size factorial

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28285150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档