Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 153 Siruri  (Citit de 3551 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« : Decembrie 12, 2005, 00:20:26 »

Aici puteţi discuta despre problema Siruri.
Memorat
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #1 : Decembrie 14, 2005, 18:13:45 »

Am redus problema prin niste operatii evidente la aflarea celei mai lungi subsecvente comune ale celor doua siruri.
Si totusi... se poate cobori sub O(M * N)?  Confused
Memorat
andreit1
Vizitator
« Răspunde #2 : Decembrie 14, 2005, 18:31:49 »

Asta e ideea. Se poate aduce la O(N*logN). Exista 2 metode: una cat de cat elementara si alta cu Sufix Array.
Memorat
greco
Nu mai tace
*****

Karma: 144
Deconectat Deconectat

Mesaje: 434



Vezi Profilul
« Răspunde #3 : Decembrie 14, 2005, 18:55:21 »

Cea pe care ai facut-o tu nu stiu daca e cat de cat elementara... ma rog, cealalta e cu suffix array.
Memorat

Jump in the cockpit and start up the engines
Remove all the wheelblocks there's no time to waste
Gathering speed as we head down the runway
Gotta get airborne before it's too late.
cristi8
Vizitator
« Răspunde #4 : Ianuarie 22, 2006, 20:54:40 »

...hmm... si cum se reduce la aflarea celei mai lungi subsecvente comune ?
Memorat
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #5 : Ianuarie 22, 2006, 21:42:01 »

pai daca ai a+b = a[i+1]+b[i+1], atunci a - a[i+1] = b[i+1] - b, si de unde notand X = a + a[i+1] si Y = b[i+1]-b => evident... nu?  Question
Memorat
cristi8
Vizitator
« Răspunde #6 : Ianuarie 23, 2006, 18:54:17 »

ok, am inteles. am redus problema la cea mai lunga secventa comuna, m-am documentat despre suffix arrays, am implementat, si iau 45 pct, pe restul imi iese din timp.

cel mai probabil am inteles suffix arrays gresit.
eu fac asa:
sa zicem ca vreau sa gasesc c m l scv com dintre sirurile x si y.

tin un vector sa cu o permutare a numerelor 1..n, care reprezinta pozitiile de start a sufixelor sirului x, ordonate lexicografix. (aici fac qsort cu functie de comparare de complexitate O(n) pe cazul cel mai defavorabil)

pe urma iau fiecare sufix al lui y, si  caut cel mai lung prefix comun cu un sufix al lui x.
vectorul sa (de pozitii de start a sufixelor) fiind sortat, folosesc cautare binara.

e o implementare destul de "urata" pentru prima data cand am scris-o.
am inteles gresit suffix arrays ? mai pot optimiza mai mult ?
Memorat
domino
Echipa infoarena
Nu mai tace
*****

Karma: 281
Deconectat Deconectat

Mesaje: 1.340



Vezi Profilul WWW
« Răspunde #7 : Ianuarie 23, 2006, 19:36:49 »

Pai construirea suffix array-ului la tine are complexitatea O(N^2*lg N) worst-case daca am inteles bine, e normal sa ia TLE.
Cauta pe net ca exista algoritm O(N*lg N), exista chiar si un articol in GInfo Noiembrie 2005 foarte bun despre ast.a
Memorat
filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #8 : Ianuarie 23, 2006, 20:34:23 »

Memorat
webspider
Strain


Karma: 4
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #9 : Decembrie 16, 2010, 02:03:45 »

Hey, stie cineva daca e vre-un edge case mai ciudat pe testul 13 ca e singurul la care-mi pica cu "prea lunga".
Any input appreciated.

Mersi!
Memorat
StarGold2
Strain
*

Karma: 11
Deconectat Deconectat

Mesaje: 46



Vezi Profilul
« Răspunde #10 : Martie 23, 2016, 23:49:34 »

Se pare ca la aceasta problema se poate lua 100 folosind o solutie cu hashuri gresita (pentru a evita hashurile negative am folosit valoarea absoluta a diferentelor dintre elementele consecutive): pe testul

Cod:
3
1 2 3
3
1 2 3

imi da 3 cand ar trebui sa imi dea 1. Rog pe cineva daca poate sa modifice testele a.i sa dispara mica eroare  Ok
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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