dmx81 Temat założony przez niniejszego użytkownika |
szukam algorytmu aby wypisal wszystkie mozliwe kombinacje » 2010-04-12 22:22:58 szukam pomocy, bo dzis ciezko mi sie juz skupic, chodzi mi o algorytm lub podpowiedz, aby mozna bylo wypisac wszytskie mozliwe kombinacje, tzn:
mamy np 3 zmienne, niech beda typu bool, a trzeba, aby wyszukac wszystkie mozliwosci: wszystkie zmienne = 0, wszystkie =1, jedna =1, reszta 0, druga 1, reszta 0 itd... potem pary na zmiane razem 1, trzecia = 0;
co do 3 zmiennych, to da rade wypisac wszystkie mozliwosci, ale jak bedzie ich 20... a wiadomo, chodzi o czas:P
ogolnie widze, ze chodzi o cos podobnego przy dodawaniu bitow (suma logiczna, bo tam o ile sie nie mysle zachodzi podobna zaleznosc)
a chce to umiescic w petli for, no i przy kazdym przejsciu bedzie sie cos zmienialo wg tego algorytmu, az do wykorzystania wszytskich mozliwosci |
|
DejaVu |
» 2010-04-13 00:45:39 for( int i = 0; i < 123; i++ ) for( int j = 0; j < 123; j++ ) for( int k = 0; k < 123; k++ ) { }
W Twoim przypadku wartość 123 zastąpisz wartością 2. Jeśli chcesz mieć zmienną ilość pętli zagnieżdżonych to zastosuj rekurencję. Jeśli potrzebujesz mieć dostęp do wszystkich wartości jakie są obecnie ustawione - utwórz jakiegoś vector'a, który będzie przechowywał obecny stan zmiennych. Pi razy drzwi będzie to wyglądało tak: #include <vector> #include <iostream>
void obliczenia( std::vector < int >& klopsy ) { for( long i = 0; i < klopsy.size(); i++ ) std::cout << klopsy[ i ]; std::cout << std::endl; }
void szoruj( std::vector < int >& klopsy, int indeks ) { if( indeks >= klopsy.size() ) { obliczenia( klopsy ); return; } for( int i = 0; i < 7; i++ ) { klopsy[ indeks ] = i; szoruj( klopsy, indeks + 1 ); } }
int main() { std::vector < int > ble; ble.resize( 3 ); szoruj( ble, 0 ); return 0; }
Uhm... kiedy to ja ostatnio coś sensownego na forum napisałem :P chyba w zeszłym roku - czuj się wyróżniony, że mi się chciało :) |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-04-13 19:35:53 wielkie dzieki :) 1. dlugo zajelo rozwiazanie problemu? 2. rozwiazanie przyszlo przez logiczne rozpatrzenie problemu, czy przez np duze doswiadczenie i uzycie znanego z wielu innych problemow sposobu? 3. dlaczego rozwiazanie dziala dla argumentow do resize(8) a powyzej juz nie? |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-04-13 20:00:13 4. probuje zanalizowac program i nie potrafie jeszcze do konca...
pierwsz krok (index=0 wiec mniejszy od ble.size(),i=0) ble[0]=0 ==> index+1 wiec mniejszy od ble.size(), i=0) ble[1]=0 ==> index+1+1 wiec mniejszy od ble.size(), i=0) ble[2]=0 ==> index+1+1+1 wiec = ble.size,wypisanie wynikow i....??
i krok drugi,??? (index=0, i= 1??) ble[0]=1; ble[1]=1; ble[2]=1
??....
nie wiem jak powinienem poprawnie ten kod rozpisac, help, czy w ogole dobrze zaczynam i co dalej
(bo np rekurencje z silnia rozumiem co i jak, a tego przykladu nie potrafie ...) |
|
DejaVu |
» 2010-04-13 22:14:04 1,2,3,4) nie wiem czy jest na to jakieś gotowe rozwiązanie - ja sobie takie wymyśliłem na poczekaniu. Rozwiązanie, które przytoczyłem jest efektem doświadczenia i rozwiązania iteracyjne są akurat w tym wypadku katorgą w implementacji. Odpal debugger'a i sprawdź jak działa rekurencja poprzez przejście krok po kroku - tłumaczenie tego jest bez sensu ;p po prostu najlepiej to zobaczyć. Kontynuując swój wywód - spróbuj dać: for( int i = 0; i < 10; i++ ) bla.push_back( 0 ); zamiast bla.resize(); |
|
« 1 » |