Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zacma permutacyjna
nospor
post
Post #1





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Hej, mam zacme matematyczną i albo nie moge sobie przypomniec, albo mi sie wydaje ze to cos ma nazwe (IMG:style_emoticons/default/wink.gif)

Jak sie nazywa takie cos, co z liczb 1 2 3 da mi ciagi:
1 2 3
1 2
1 3
2 3

A z liczb 1 2 3 4
1 2 3 4
1 2 3
1 2 4
1 3 4
2 3 4
1 2
1 3
1 4
2 3
2 4
3 4


itd itd
Ma to jakąs nazwe?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




@com poprosilbym w kolejnosci i w zbiorze wynikow dokladnie takim, jaki podalem (IMG:style_emoticons/default/wink.gif)
@Crozin jest tam wiele ciekawych rzeczy, ale wiekszosc w c,z ktorym juz dawno nie mialem do czynienia, a przez co nie rozumiem idei.
Dorwalem jeden js stamtad, ktory chyba robi to co chce, ale kurka po przerobieniu tego na php juz nie robi tego co chce (IMG:style_emoticons/default/wink.gif)

js:
Kod
function k_combinations(set, k) {
    var i, j, combs, head, tailcombs;
    
    if (k > set.length || k <= 0) {
        return [];
    }
    
    if (k == set.length) {
        return [set];
    }
    
    if (k == 1) {
        combs = [];
        for (i = 0; i < set.length; i++) {
            combs.push([set[i]]);
        }
        return combs;
    }
    
    // Assert {1 < k < set.length}
    
    combs = [];
    for (i = 0; i < set.length - k + 1; i++) {
        head = set.slice(i, i+1);
        tailcombs = k_combinations(set.slice(i + 1), k - 1);
        for (j = 0; j < tailcombs.length; j++) {
            combs.push(head.concat(tailcombs[j]));
        }
    }
    return combs;
}


Ferelna przerobka na php
  1. $t = array(1,2,3,4);
  2. function k_combinations($set, $k) {
  3. //$ i, j, combs, head, tailcombs;
  4.  
  5. if ($k > count($set) || $k <= 0) {
  6. return array();
  7. }
  8.  
  9. if ($k == count($set)) {
  10. return $set;//[set];
  11. }
  12.  
  13. if ($k == 1) {
  14. $combs = array();
  15. for ($i = 0; $i < count($set); $i++) {
  16. $combs[]=$set[$i];
  17. }
  18. return $combs;
  19. }
  20.  
  21. // Assert {1 < k < set.length}
  22.  
  23. $combs = array();
  24. for ($i = 0; $i < count($set) - $k + 1; $i++) {
  25. $head = array_slice($set, $i,1);//set.slice(i, i+1);
  26. $tailcombs = k_combinations(array_slice($set, $i+1), $k - 1);
  27. for ($j = 0; $j < count($tailcombs); $j++) {
  28. $tmp = $head;
  29. $tmp[]=$tailcombs[$j];
  30. $combs[]=$tmp;
  31. }
  32. }
  33. return $combs;
  34. }
  35.  
  36. $tt = k_combinations($t,3);
  37. print_r($tt);
  38.  


Albo w c, ten kod, robi to co chce:
Kod
public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k)
{
  return k == 0 ? new[] { new T[0] } :
    elements.SelectMany((e, i) =>
      elements.Skip(i + 1).Combinations(k - 1).Select(c => (new[] {e}).Concat(c)));
}

var result = Combinations(new[] { 1, 2, 3, 4, 5 }, 3);

Tylko z C juz nie mialem bardzo dawno do czynienia i nie potrafie przetlumaczyc :/

edit:
Dobra, mam. Post crozina nakierowal mnie na wlasciwą szukajkę (IMG:style_emoticons/default/smile.gif)
Powód edycji: [nospor]:
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: 15.10.2025 - 00:10