给定(A、B、C、D)
什么是一种算法,可以将其减少到大小为n的唯一非重复集。
例如,如果n是3。

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

你会注意到A,A,A不能有效,A,B和[A,C,D]=[C,A,D]=[A,C,D]=[D,C,A]=等等也不能有效。
有没有一种方法可以不生成和减少这个powerset,因为一个包含7个元素的powerset是n^7,它很快就会穷尽。

最佳答案

看看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]因此都在结果集中)

08-24 13:01