Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

algoritam za ispisivanje svih kombinacija

[es] :: C/C++ programiranje :: algoritam za ispisivanje svih kombinacija

[ Pregleda: 3192 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Kretosh
pol:muski
Tranqiliti

Član broj: 57704
Poruke: 37
*.axpan.net.



Profil

icon algoritam za ispisivanje svih kombinacija09.04.2006. u 00:01 - pre 219 meseci
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]
Dovidjenja,prijatno.
 
Odgovor na temu

Kretosh
pol:muski
Tranqiliti

Član broj: 57704
Poruke: 37
*.axpan.net.



Profil

icon Re: dsdassssssssssssssssssssssssssssssssssssss09.04.2006. u 01:42 - pre 219 meseci
Izvinjavam se za naziv teme, slucajno se desilo :X:X:X
Dovidjenja,prijatno.
 
Odgovor na temu

rumpl

Član broj: 54959
Poruke: 156
*.net81-66-198.noos.fr.



Profil

icon Re: algoritam za ispisivanje svih kombinacija16.04.2006. u 16:38 - pre 219 meseci
Tvoj algoritam i nije toliko los, sad sam ga isprobao sa 10 slova, samo sto sam output ubacivao u jedan fajl
(na linuxu, ./program > fajl ) i program je zavrsio za 20 sekundi!!!
Sto je sasvim dobro za 3628801 linija!!!
A kad sam ga isprobao normalno, zavrsio je za 2 minuta.

U stvari, najsporije u tvom programu je ispisivanje rezutata, probaj da u programu stvoris jedan fajl i da sve rezultate trpas u taj fajl, siguran sam da ce brze raditi.
"The problem with the world is that everyone is a few drinks behind."
-Humphrey Bogart
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.net.t-com.hr.

Sajt: www.dump.hr


Profil

icon Re: algoritam za ispisivanje svih kombinacija16.04.2006. u 17:28 - pre 219 meseci
pogledaj u STL next_permutation(), jedna funkcija rijesava tvoj problem i to leksickim poretkom permutacija
 
Odgovor na temu

rumpl

Član broj: 54959
Poruke: 156
*.net81-66-198.noos.fr.



Profil

icon Re: algoritam za ispisivanje svih kombinacija16.04.2006. u 19:27 - pre 219 meseci
NrmMyth ja mislim da je covke hteo da napise tu funkciju a ne samo da iskoristi jednu vec postojecu
"The problem with the world is that everyone is a few drinks behind."
-Humphrey Bogart
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.cmu.carnet.hr.

Sajt: www.dump.hr


Profil

icon Re: algoritam za ispisivanje svih kombinacija16.04.2006. u 20:33 - pre 219 meseci
pa dobro, neka onda pogleda njen kod...
moj grijeh...
 
Odgovor na temu

@zrael


Član broj: 80614
Poruke: 21
*.adsl.net.t-com.hr.



Profil

icon Re: algoritam za ispisivanje svih kombinacija18.04.2006. u 22:04 - pre 219 meseci
hvala bogu pa su sva slova samo brojevi tako da inkrementiranjem broja dolazi do pomaka u abecedi
 
Odgovor na temu

[es] :: C/C++ programiranje :: algoritam za ispisivanje svih kombinacija

[ Pregleda: 3192 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.