PHP – Combinari de N elemente luate cate K

Acest articol despre “PHP – Combinari de N  luate cate K” trebuie sa fie o mica lectie pentru cei care il citesc.

Cum se foloseste “PHP – Combinari de N luate cate K”?

Lucrand la un proiect, la un moment dat a trebuit sa obtin combinarile dintr-un array de n elemente. Ca sa intelegeti mai bine o sa va dau un exemplu:

 Array: array(0, 1, 2, 3);
 Rezultat dorit:
 1
 2
 3
 0 1
 0 2
 0 3
 1 2
 1 3
 2 3
 0 1 2
 0 1 3
 0 2 3
 1 2 3
 0 1 2 3

Mi-am adus aminte din scoala/facultate de combinari de n luat cate k fara repetare, unde in cazul de fata n este 4 (numarul de elemente din array) si k variaza de la 1 la 4. Ca un ‘bun’ programator ce sunt, am inceput sa pun creierul si degetele in miscare producand o bucatica de cod plina de for-uri, foreach-uri si asa mai departe. Nu dureaza mult si realizez ca foarte probabil cineva a creat deja un pachet pentru asta, iar eu imi bat capul absolut degeaba. Dau rapid un search pe google si gasesc totul deja facut de unele creiere mult mai stralucite decat al meu: un pachet care returneaza permutari si combinari, fara repetari.  😳

DE RETINUT: Noi programatorii avem dese ori tendinta de a reinventa roata fara sa ne dam seama ca foarte probabil a noastra nu va fi la fel de rotunda.  🙂

Solutia pentru problema legata de combinari de n luate cate k:

  1. Descarcati pachetul Math_Combinatorics de pe pear.php.net
  2. Copiati aceste 3-4 linii de cod pentru a face totul:
<?php
require_once 'includes/Combinatorics.php';
$arrayElemente= array(0, 1, 2, 3);
$c = new Math_Combinatorics;
$combinari = $c->combinations($arrayElemente, 2);
for ($i = 0; $i < count($combinari); $i++) {
   $vals = array_values($combinari[$i]);
   $s = implode($vals, ", ");
   print $s . "<br />";
}
?>

Aceasi metoda functioneaza si pentru permutari. Pentru mai multe informatii intrati pe linkul de mai sus de unde se descarca pachetul.

Leave a Reply

Your email address will not be published. Required fields are marked *