set reduction递归算法

时间:2015-07-09 07:06:41

标签: php algorithm

给定(A,B,C,D)

什么是可以将其减少为大小为n的唯一非重复集的算法。

例如,如果n是3.

[A,B,C]
[A,C,D]
[A,B,D]
[B,C,D]

你注意到A,A,A不能有效A,A,B和[A,C,D] = [C,A,D] = [A,C,D] = [D,C,A] =等..

有没有办法不生成powerset并减少它,因为7个元素的powerset是n ^ 7,很快就会详尽无遗。

1 个答案:

答案 0 :(得分:3)

看看Math_Combinatorics

<?php
require 'Combinatorics.php';

$combinatorics = new Math_Combinatorics;
$result = $combinatorics->combinations( ['A','B','C','D'], 3 );
var_export($result);

打印

array (
  0 => 
  array (
    0 => 'A',
    1 => 'B',
    2 => 'C',
  ),
  1 => 
  array (
    0 => 'A',
    1 => 'B',
    3 => 'D',
  ),
  2 => 
  array (
    0 => 'A',
    2 => 'C',
    3 => 'D',
  ),
  3 => 
  array (
    1 => 'B',
    2 => 'C',
    3 => 'D',
  ),
)

它还有permutations方法(即[A,B,C]!= [A,C,B],因此两者都在结果集中)