Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wszystkie mozliwe kombinacje, algorytm
deniol13
post
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 2
Dołączył: 30.11.2009

Ostrzeżenie: (10%)
X----


witam, poszukuje skryptu/algorytmu ktory z jakiejs tablicy ktora zawiera integery wszystkie kombinacje bez powtorzen
np

$tab[a] = 1;
$tab[b] = 2;
$tab[c] = 3;

wszystkie kombinacje to
123
213
321
312
231
i moze jeszcze pare
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Masz tutaj dwie metody:

  1. <?php
  2.  
  3. function silnia($x) {
  4. if ($x == 0) {
  5. return 1;
  6. }elseif ($x > 0) {
  7. for ($i=1,$y=1; $i <= $x; $i++) {
  8. $y *= $i;
  9. }
  10. return $y;
  11. }else{
  12. return 0;
  13. }
  14. }
  15.  
  16. function permutation($array) {
  17. $x = array();
  18. $l = silnia(count($array));
  19.  
  20. while (count($x) != $l) {
  21. $temp = implode('', $array);
  22. $temp = str_shuffle($temp);
  23. if (!in_array($temp, $x)) {
  24. $x[] = $temp;
  25. }
  26. }
  27.  
  28. return $x;
  29. }
  30.  
  31. function permutation_r($array) {
  32. static $temp = array();
  33. if (count($temp) != silnia(count($array))) {
  34. $x = implode('', $array);
  35. $x = str_shuffle($x);
  36. if (!in_array($x,$temp)) {
  37. $temp[] = $x;
  38. }
  39. unset($x);
  40. return permutation_r($array);
  41. }else{
  42. return $temp;
  43. }
  44. }
  45.  
  46. echo '<pre>';
  47. $t = permutation(array('a','b','c','d','e','f'));
  48. print_r($t);
  49.  
  50. ?>
  51.  


Jednak z góry piszę, że nie są one optymalne.
permutation będzie działało najprawdopodobniej szybciej od permutation_r - albo przynajmniej mniej pamięci zje.

Ten post edytował fifi209 7.07.2010, 21:03:53
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 19:01