Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 011 Generare de permutari  (Citit de 22825 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« : Februarie 27, 2008, 20:26:50 »

Aici puteţi discuta despre problema Generare de permutari.
Memorat
anna_bozianu
De-al casei
***

Karma: 5
Deconectat Deconectat

Mesaje: 111



Vezi Profilul
« Răspunde #1 : Februarie 27, 2008, 21:53:48 »

O idee alternativa este generarea iterativa.
 O scurta descriere :
Fie p[1],p[2],...p[n] o permutare data.
1. Se cauta din coada prima pozitie de crestere adica adica
p[ i ]<p[ i+1 ] ( 1<= i  < n ) i=maxim
2. Se cauta din coada prima pozitie j pentru care in care p[ j ] > p[ i ] .
3. Se schimba intre ele elementele din pozitiile i si j .
4. Se reverseaza secventa  i+1 -> n.
Astfel se genereaza permutarea urmatoare in ordine lexicografica
Memorat
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #2 : Februarie 27, 2008, 22:09:20 »

Ceva asemanator face si next_permutation in STL. Cred ca ar trebuie mentionata si solutia asta in indicatii. O alta posibilitate mai e sa iei fiecare numar de la 1 la N! si sa determine ce permutare reprezinta.
Memorat
anna_bozianu
De-al casei
***

Karma: 5
Deconectat Deconectat

Mesaje: 111



Vezi Profilul
« Răspunde #3 : Februarie 27, 2008, 22:25:22 »

Dap. Scazand factoriale in ordine descrescatoare.
Memorat
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« Răspunde #4 : Februarie 27, 2008, 22:33:07 »

Trebuia mentionata si solutia cu dancing links.
Memorat
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #5 : Februarie 27, 2008, 22:36:30 »

Cred ca cel mai bine cand vine cineva cu o solutie noua e sa adauge el la indicatii de rezolvare, asa e greu sa te gandesti din prima la toate solutiile Rolling Eyes. Adica problemele pot fi modificate si pe parcurs, dupa ce ies la rampa. In plus, daca mai stiti probleme similare care folosesc algoritmii prezentati, completati ca sa obtinem o lista cat mai buna.
Memorat
bogdan2412
Echipa infoarena
Nu mai tace
*****

Karma: 410
Deconectat Deconectat

Mesaje: 951



Vezi Profilul
« Răspunde #6 : Februarie 28, 2008, 09:24:37 »

Cred ca cel mai bine cand vine cineva cu o solutie noua e sa adauge el la indicatii de rezolvare, asa e greu sa te gandesti din prima la toate solutiile Rolling Eyes. Adica problemele pot fi modificate si pe parcurs, dupa ce ies la rampa. In plus, daca mai stiti probleme similare care folosesc algoritmii prezentati, completati ca sa obtinem o lista cat mai buna.

Nu trebuie sa fii decat admin Tongue Se poate face o noua pagina /problema/nume/indicatii care sa fie editabila de oricine si inclusa in problema.
« Ultima modificare: Februarie 28, 2008, 09:30:56 de către Bogdan Tataroiu » Memorat
vlad_oltean
Strain
*

Karma: 2
Deconectat Deconectat

Mesaje: 25



Vezi Profilul
« Răspunde #7 : Martie 02, 2008, 12:28:59 »

Am postat solutia folosind si backtracking, si generarea permutarii urmatoare, dar totusi imi iese din timp la ultimul test. de ce? Fool
Memorat
flo_demon
Strain
*

Karma: 20
Deconectat Deconectat

Mesaje: 46



Vezi Profilul
« Răspunde #8 : Martie 02, 2008, 12:38:24 »

@vlad_oltean
Fa scrierea si citirea in C, si scrie functia afis()  inline.
Memorat

Marines don't die! They go to hell and regroup
vlad_oltean
Strain
*

Karma: 2
Deconectat Deconectat

Mesaje: 25



Vezi Profilul
« Răspunde #9 : Martie 02, 2008, 14:57:22 »

Fa scrierea si citirea in C, si scrie functia afis()  inline.

multumesc pentru sfat, am modificat si am luat si eu suta Thumb up dar oricum, de ce stdio merge mai repede decat fstream??  Eh?
Memorat
flo_demon
Strain
*

Karma: 20
Deconectat Deconectat

Mesaje: 46



Vezi Profilul
« Răspunde #10 : Martie 02, 2008, 17:52:35 »

sorry mods, nu e chiar ontopic
@vlad_oltean
Actualy nu e stdin si fstream Tongue astea sunt headere, care contin definitiile functiilor de citire.

Nu intodeuna citirile in C sunt mai rapide decat cele in C++.
Toate depind de implementarea lor data de compilator. Depinde de ce flaguri de compilare folosesti,
depinde de ce optimizari mai ai in cod etc..
Sa nu repet familia de functii de citire in C si C++, am sa ma refer la scanf si cin.
Nu poti zice cu siguranta ca "scanf" e mai rapida decat "cin" sa zicem.
Oricum in cazul asta si in majoritatea cazurilor unde folosesti direct functiile, diferenta de viteza e in fravoarea scanf clar.
Provine de la faptul ca cin e un obiect de tip istream, care trebuie construit, distrus, manipulat, e mare.. in fine.. e un obiect si se misca mai greu (object overhead). Bineinteles cum se misca de optimizarile compilatorului. "scanf" nu foloseste obiecte ci e o functie caruia ii dai un pattern de citire si niste pointeri, acesul in memorie se face mai rapid in cazul asta.
Niste linkuri pe tema asta:

http://forums.topcoder.com/?module=Thread&threadID=508058&start=0&mc=7
http://www.cplusplus.com/reference/iostream/
Ah si discutia prea funny in care brahle e cam owned pe subiectul asta Smile
http://www.daniweb.com/forums/thread40450.html
Memorat

Marines don't die! They go to hell and regroup
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #11 : Martie 03, 2008, 00:54:30 »

Ar merge un articol in care se discuta chestiile astea.
Memorat
chibicitiberiu
Strain
*

Karma: 3
Deconectat Deconectat

Mesaje: 49



Vezi Profilul
« Răspunde #12 : Aprilie 17, 2009, 09:03:20 »

Am facut problema cu next_permutation din STL. Cu streamuri (pe calcul meu) compilatorul MinGW spunea ca executia a durat 0.5 secunde, cu stdio doar 0.2 secunde.
Memorat
DxH5dIMHN
Strain


Karma: -5
Deconectat Deconectat

Mesaje: 9



Vezi Profilul
« Răspunde #13 : Noiembrie 27, 2012, 08:14:55 »

Cu ifstream si ofstream (68ms testul 5 pentru N=8) merge mai repede decat cu freopen (80ms testul 5 pentru N=8)
Memorat
popoiu.george
Vorbaret
****

Karma: 19
Deconectat Deconectat

Mesaje: 162



Vezi Profilul
« Răspunde #14 : Noiembrie 27, 2012, 08:54:03 »

WOOW !  Shocked Pe bune ?!?
Memorat
Sapientia
Strain
*

Karma: 0
Deconectat Deconectat

Mesaje: 29



Vezi Profilul
« Răspunde #15 : Noiembrie 10, 2013, 16:49:09 »

Ce complexitate are functia  next_permutation? O(1)?
Memorat
rares96cheseli
Client obisnuit
**

Karma: 45
Deconectat Deconectat

Mesaje: 60



Vezi Profilul
« Răspunde #16 : Noiembrie 10, 2013, 18:05:49 »

http://www.cplusplus.com/reference/algorithm/next_permutation/
Memorat
harababurel
Client obisnuit
**

Karma: 23
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #17 : Noiembrie 10, 2013, 18:06:09 »

"Up to linear in half the distance between first and last (in terms of actual swaps)." (http://www.cplusplus.com/reference/algorithm/next_permutation/)

Deci O(N/2), care poate fi aproximat la O(1) (pentru N <=8).
Memorat
Steff94
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #18 : Mai 09, 2018, 15:04:45 »

https://infoarena.ro/job_detail/2202619?action=view-source

80 puncte, fail pe ultimul test.
Any ideas?  Smile
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines