Jak wyświetlić k-elementowe kombinacje bez powtórzeń z n-elementowego zbioru?


Chciałbyś wyświetlić na ekranie wszystkie k-elementowe kombinacje z n-elementowego zbioru danych? Wystarczy, że zaimplementujesz w swoim skrypcie następującą funkcję.

<?
function kombinacje($zbior, $k) {
  global $wynik;
  $dlugosc = count($zbior);
    if($dlugosc > $k)
      foreach($zbior as $klucz => $wart)
        kombinacje(array_diff_key($zbior, array($klucz => $wart)), $k);
    else
      $wynik[] = $zbior;
  return $wynik;
}
?>

Użycie powyższej funkcji jest bardzo proste – wystarczy podać dwa argumenty:
zbior – n-elementowa tablica zawierająca zbiór, z którego będziemy wyznaczać kombinacje
k – rozmiar podzbiorów z kombinacjami.

Poniższy przykład obrazuje wypisanie wszystkich 2-elementowych kombinacji ze zbioru 3-elementowego {1,2,3}.

<?
print_r(kombinacje(array(1,2,3), 2));
?>

,

  1. #1 by Dawid Szałęga on October 27th, 2009

    Fajna funkcja, tylko ma jeden problem – nie działa ;)
    Funkcja daje kombinacje z powtórzeniami.

  2. #2 by lio on October 28th, 2009

    bardzo fajne rozwiazanie

(will not be published)

  1. No trackbacks yet.