假设我们有以下整数集合:{1,1,2}。我们可以通过3种可能的方式安排此集合的顺序:
1,1,2-
1,2,1
2,1,1
我们如何计算一般可以安排整数集合的方式?假设集合的大小非常大(在最坏的情况下为10 ^ 5),但答案总是足够小以适应长。是否存在针对此问题的有效解决方案,如果存在,如何在Java中实现它?
答案 0 :(得分:2)
假设您有n个由整数x_i的n_i副本组成的整数。
计算出数量的安排只需计算
t = n!
但是,由于您并不关心如何安排具有相同值的数字,因此对于i的每个值,减少总数:
t = t / n_i!
在你的情况下,你有3个整数,1个副本2个,2个副本1个。
你计算:
t = 3! = 6
t = t/1! = 6/1 = 6
t = t/2! = 6/2 = 3
所以答案是3。
答案 1 :(得分:0)
我们如何计算一般可以安排整数集合的方式?
遍历集合,计算每个数字在集合中出现的次数。
排列数的公式为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
。