[ Kretosh @ 09.04.2006. 00:01 ] @
Napravio sam funkicju koja ispisuje sve moguce kombinacije od zadatog tipa slova,ali je proces ispisivanja svih kombinacija dosta spor,pa me interesuje da li neko zna neki bolji algoritam za ovako nesto,ili mozda moze da poboljsa moj Code: #include <iostream> int NumOfLetts; void Function(char * Letters,int n); int main() { int broj; std::cout << "Unesi broj slova" << std::endl; std::cin>>broj; NumOfLetts=broj; char * Slova=new char[broj]; std::cout<<"Unesi slova"; for(int i=0;i<broj;i++) std::cin>>Slova[i]; Function(Slova,broj); return 0; } void Function(char * Letters,int n) { int zamena=1; char Backup[n]; for(int i=0;i<n;i++) Backup[i]=Letters[NumOfLetts-n+i]; //backup for(int i=0;i<n;i++) for(zamena;zamena<=n;zamena++) { if(zamena !=1) { int z=n; char aid=Letters[NumOfLetts-n]; for(int i=0;i<z-1;i++) Letters[i+NumOfLetts-n]=Letters[i+NumOfLetts-n+1]; Letters[NumOfLetts-1]=aid; } if(n==2) { for(int j=0;j<NumOfLetts;j++) std::cout<<Letters[j]; std::cout<<"\n"; continue; } Function(Letters,n-1); } for(int i=0;i<n;i++) Letters[NumOfLetts-n+i]=Backup[i]; return; } Dakle funcija najpre backupuje array tako sto svaki pojedinacni karakter stavlja redom u pomocni array,odakle ce se pre izlaska funkcije svako slovo vratiti na svoje mesto. Funkcija ulazi u for petlju koja se obavlja onoliko puta koliko je slova koja se mogu zameniti.Ukoliko smo dosli do 2 poslednja slova stampamo ceo aray i ne idemo dalje. Sada se poziva sama funkcija sa n umanjenim za 1(osim ako je n 2). Posto se izvrsi for petlja vracamo karaktere gde su bili pre ulaska funkcije(kako bi funkcija koja je rekuzirvno pozvala ovu funkciju mogla da sama izvrsi odgovarajucu zamenu karaktera). (evo vidim da postoji par ispravki koje bi ubrzale delimicno program ali ne dovoljno(npr NumOfLetts-n nije potrebno stalno racunati posto se uvecava za svaki ulazak u novu funkciju za 1 ali mrzi me da sad to ispravljam). Da bi se ispisale sve kombinacije od 10 slova potrebno je vise od 5 minuta sto je cini mi se jako puno.Ako vidite neke znacajne greske u algoritmu ispravite me plz. [Ovu poruku je menjao Kretosh dana 09.04.2006. u 02:43 GMT+1] |