Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zacma permutacyjna
nospor
post 17.02.2014, 15:36:50
Post #1





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Hej, mam zacme matematyczną i albo nie moge sobie przypomniec, albo mi sie wydaje ze to cos ma nazwe 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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 17.02.2014, 15:50:16
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Permutacja jest szczególnym przypadkiem wariacji bez powtórzeń? To?


--------------------
Go to the top of the page
+Quote Post
com
post 17.02.2014, 16:40:09
Post #3





Grupa: Zarejestrowani
Postów: 3 033
Pomógł: 366
Dołączył: 24.05.2012

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


Podciąg wink.gif

http://pl.wikipedia.org/wiki/Podci%C4%85g_(matematyka)

ale jako moderator to z nazwa tematu to się nie postarałeś tongue.gif
Go to the top of the page
+Quote Post
rzymek01
post 17.02.2014, 16:45:14
Post #4





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

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


ludzie... to są kombinacje...

dla pragnących poszerzyć swoją wiedzę: https://en.wikipedia.org/wiki/Combination


--------------------
:]
Go to the top of the page
+Quote Post
nospor
post 17.02.2014, 16:59:57
Post #5





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Cytat
ale jako moderator to z nazwa tematu to się nie postarałeś
Jako ze jest to Hydepark, wydaje mi sie ze temat jest w miare ok. No ale nie jestem obiektywny wink.gif

Moze i faktycznie to kombinacje. Mniejsza o wiekszosc.
Bardziej interesuje mnie kod php, ktory wykona to co pokazalem. Jest w stanie ktos z tym pomoc? Wiem, to jest proste, ale mam dzisiaj taką zacme, ze siedze, patze, mysle i guzik :/

Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Crozin
post 17.02.2014, 17:04:22
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


http://stackoverflow.com/questions/127704/...elements-from-n
Go to the top of the page
+Quote Post
com
post 17.02.2014, 17:10:25
Post #7





Grupa: Zarejestrowani
Postów: 3 033
Pomógł: 366
Dołączył: 24.05.2012

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


nospor niech będzie biggrin.gif widzę faktycznie gorszy dzień http://r.je/php-find-every-combination.html wink.gif
Go to the top of the page
+Quote Post
nospor
post 17.02.2014, 18:19:03
Post #8





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




@com poprosilbym w kolejnosci i w zbiorze wynikow dokladnie takim, jaki podalem 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 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ę smile.gif
Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
com
post 17.02.2014, 19:19:02
Post #9





Grupa: Zarejestrowani
Postów: 3 033
Pomógł: 366
Dołączył: 24.05.2012

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


jakby ktoś jeszcze potrzebował http://ideone.com/Mn2niT wink.gif

a Ten js to akurat nie spełniał tego co potrzebowałeś tongue.gif
Go to the top of the page
+Quote Post
nospor
post 18.02.2014, 08:43:27
Post #10





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Cytat
a Ten js to akurat nie spełniał tego co potrzebowałeś
Spelnial. Testowalem i dzialal jak chcialem tongue.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pawel_W
post 19.02.2014, 08:25:43
Post #11





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


prosta rekurencja, bierzesz albo nie bierzesz element smile.gif coś takiego powinno zadziałać:

  1. $arr = array(1,2,3,4,5);
  2. $n = 5;
  3. $k = 3;
  4.  
  5. function gen($arr, $n, $k, $result, $i){
  6. if($i == $n){
  7. //$result bedzie zawierala wygenerowany podciag
  8. } else if($n-$k >= count($result) + $i) { // warunek na to zeby nie leciec dalej z rekurencja jezeli juz nie mamy szans wybrac k elementow
  9. gen($arr, $n, $k, $result, $i+1); // nie bierzemy elementu $arr[$i]
  10. $result[] = $arr[$i];
  11. gen($arr, $n, $k, $result, $i+1); // bierzemy element $arr[$i]
  12. }
  13. }
  14.  
  15. gen($arr, $n, $k, array(), 0);
Go to the top of the page
+Quote Post
nospor
post 19.02.2014, 08:37:28
Post #12





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




@Pawel to mialby byc gotowy kod, czy tylko pseudo pisany z palca bez jakiegokolwiek sprawdzania? wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pawel_W
post 19.02.2014, 17:02:27
Post #13





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


pseudo pisany z palca, jednak poza warunkiem, który podałem zły (powinien być
  1. count($result) == $k
i drugi
  1. $n-$i >= $k - count($result)
wszystko się zgadza, także nie widzę problemu
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.04.2024 - 00:16