Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Cuvinte - Programare dinamica  (Citit de 6304 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
maritim
Vorbaret
****

Karma: 59
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« : Septembrie 16, 2011, 18:45:48 »

Salut la toata lumea.

Am gasit intr-o culegere o problema ce suna cam asa:
Se dau N cuvinte (cuvintele contin doar caracterele 'a' ... 'z') si se cere sa se gaseasca cea mai lunga secventa astfel incat pentru fiecare cuvant i din secventa, prima litera a cuvantului i sa fie mai mare decat ultima litera a cuvantului i-1.

De exemplu : N = 4 si cuvintele sunt ana, capat, merge, repede.
Raspuns: cea mai lunga secventa = 3, secventa ana merge repede.

Cuvintele se pot gasi si in alta ordine decat cea initiala.

Solutii ca backtracking sau reprezentarea celor N cuvinte sub forma unui graf orientat si gasirea celui mai lung lant elemntar am gasit si eu. As vrea daca stie cineva daca aceasta problema se poate rezolva cu programare dinamica si daca da cum se poate, sa-mi dea un hint, sau sa-mi explice algoritmul (problema nu e departe de problema Zmeu2 de la OJI 2003) .

V-as fi recunoscator daca mi-ati oferi un raspuns. Va multumesc frumos si o zi buna!
Memorat
skull
Client obisnuit
**

Karma: 17
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #1 : Septembrie 16, 2011, 21:06:16 »

Eu as face asa: best[ i ] = cel mai lung subsir care se incheie la pozitia i(include cuvantul de pe pozitia i). Problema este foarte asemenatoare cu cea a subsirului crescator maximal.

Succes!
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #2 : Septembrie 16, 2011, 21:25:03 »

Eu as face asa: best[ i ] = cel mai lung subsir care se incheie la pozitia i(include cuvantul de pe pozitia i). Problema este foarte asemenatoare cu cea a subsirului crescator maximal.

Succes!

Cred ca ai omis restrictia asta:
Citat
Cuvintele se pot gasi si in alta ordine decat cea initiala.
Memorat

Am zis Mr. Green
maritim
Vorbaret
****

Karma: 59
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« Răspunde #3 : Septembrie 16, 2011, 21:37:57 »

Multumesc frumos pentru raspuns si imi pare rau ca am folosit cuvantul "secventa" deoarece se intelege gresit problema. Dupa cum a punctat si Paul, cuvintele se pot afla si in alta ordine decat cea initiala, altfel rezolvarea s-ar putea reduce la ceea ce ai spus si tu in post Smile.

Any other opinions about the problem Smile ?
Memorat
crushack
De-al casei
***

Karma: 23
Deconectat Deconectat

Mesaje: 108



Vezi Profilul
« Răspunde #4 : Septembrie 17, 2011, 11:25:09 »

e destul de usor , ti un tablou T[ x ] = cat de lung pot sa fac un lant de cuvinte si primul cuvant sa aiba prima litera x,

parcurgi cuvintele intr-o ordine oarecare , si pt fiecare cuvant cu ultima cifra = uc , si prima cifra = pc
faci T[pc]= max( T[pc] , max{ T[ i ] | i='a'..uc-1 } + 1 )

Rezultatul va fi maximul dintre T[ x ] cu x='a'..'z'.
Sper ca te ajuta .
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #5 : Septembrie 17, 2011, 11:37:14 »

e destul de usor , ti un tablou T[ x ] = cat de lung pot sa fac un lant de cuvinte si primul cuvant sa aiba prima litera x,

parcurgi cuvintele intr-o ordine oarecare , si pt fiecare cuvant cu ultima cifra = uc , si prima cifra = pc
faci T[pc]= max( T[pc] , max{ T[ i ] | i='a'..uc-1 } + 1 )

Rezultatul va fi maximul dintre T[ x ] cu x='a'..'z'.
Sper ca te ajuta .

2
D A

Iti da 1.
Treaba cu 'ordinea oarecare' nu prea merge Smile

@maritim esti sigur ca nu e NP-completa?
Memorat
crushack
De-al casei
***

Karma: 23
Deconectat Deconectat

Mesaje: 108



Vezi Profilul
« Răspunde #6 : Septembrie 17, 2011, 11:43:04 »

nu e np completa. Exista algoritm in O(N^2)
Da, ai dreptate. Ma gandeam la o optimizare.
Memorat
maritim
Vorbaret
****

Karma: 59
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« Răspunde #7 : Septembrie 17, 2011, 15:08:16 »

Multumesc pentru raspunsuri.

@Popescu Silviu tot depinde de ordinea initiala a cuvintelor.

@Mihai Calancea nu sunt sigur ca problema nu e NP-completa. Mi s-a parut o problema interesanta si m-am gandit cum as putea sa o rezolv prin programare dinamica, fara sa ajung la o astfel de solutie am dorit s-o impartasesc si celorlalti, poate stie cineva.

Cunoaste cineva vreo rezolvare Smile ?

Multumesc!
Memorat
crushack
De-al casei
***

Karma: 23
Deconectat Deconectat

Mesaje: 108



Vezi Profilul
« Răspunde #8 : Septembrie 17, 2011, 15:23:28 »

Ti se da vre-o limita pentru N?
Acum am inteles cum trebuie problema Very Happy , s-ar putea sa fie NP-completa
Memorat
maritim
Vorbaret
****

Karma: 59
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« Răspunde #9 : Septembrie 17, 2011, 18:17:04 »

Nu Very Happy, nu are nicio limita N-ul. Daca ar fi sa dau o limita de la mine as zice poate 1000...

Daca stie cineva vreo solutie il rog sa posteze aici, daca intradevar e NP-completa ma multumesc cu un astfel de raspuns si cu rezolvarea polinomiala Smile.
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #10 : Septembrie 17, 2011, 21:17:08 »

Nu Very Happy, nu are nicio limita N-ul. Daca ar fi sa dau o limita de la mine as zice poate 1000...

Daca stie cineva vreo solutie il rog sa posteze aici, daca intradevar e NP-completa ma multumesc cu un astfel de raspuns si cu rezolvarea polinomiala Smile.

cu rezolvarea exponentiala*. NP-completa inseamna ca nu exista inca/nu admite rezolvare in timp polinomial.
Memorat
maritim
Vorbaret
****

Karma: 59
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« Răspunde #11 : Septembrie 17, 2011, 21:40:19 »

Yup, ms ca m-ai corectat Very Happy.

Daca se gaseste un raspuns astept posturi pe forum Very Happy .
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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