Utilizator:
Parola:
Am uitat parola... | Cont nou!


Articole Resurse Echipe Competiții Proiecte Forum DevBlogs Locuri de muncă GDROMag Issue#1 GDROCon 2007

 
Forum » Comunitate » Discuţii generale » Problema zilei




Pagina 1 din 3 [ 1 | 2 | 3 ]

Mesaj Info autor
    Postat la 07 Aug 2009 14:28:35    Subiect: Problema zilei
Deliverance info:

Deliverance:

De ceva vreme am obsevat cu totii ca nu prea exista activitate pe forum si ma gandeam sa introducem poate o sectiune numita Problema zilei care ar consta in propunerea unei mici probleme de algoritmica. In functie de caracteristicle datelor de intrare se pot discuta solutii cat mai bune. Pot sa incep eu cu urmatoarea problema:

Se dau doua siruri de numere naturale A, B si un numar S. Sa se determine toate combinatiile de 2 numere, unul din A si altul din B, astfel incat suma lor sa fie S. Care e cea mai mica complexitate care se poate obtine? Very Happy

Edit:
A si B contin numere in ordine aleatoare

Ultima editare efectuată de Deliverance pe 07 Aug 2009 14:59:36; 2 editări în total


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 07 Aug 2009 14:48:20    Subiect: < fara subiect >
Katalin info:

Katalin:

Ok ii dau o incercare. Pai am putea lua primul sir de numere A si le-am compara cu S. Tot ce este mai mic sau egal trece primul test. Apoi am face acelasi lucru si cu sirul B. Pentru fiecare numar din sirul A care a trecut testul facem adunarea cu fiecare numar din sirul B care a trecut testul iar atunci cand rezultatul este egal cu S avem o pereche de numere care satisface cerintele.

Ultima editare efectuată de Katalin pe 07 Aug 2009 15:05:00; 2 editări în total

Fighting on the internet is like running in the special olympics: even if you win, you're still retarded !


Status:
Înregistrat pe:
02 May 2007 18:38:03
Vârsta: 23 ani
Mesaje: 84
Locatie: Slatina
Programator
LightningTeam
 
    Postat la 07 Aug 2009 15:00:48    Subiect: Re:
Deliverance info:

Deliverance:

Katalin a scris:

Ok ii dau o incercare. Pai am putea lua primul sir de numere A si le-am compara cu S. Tot ce este mai mic sau egal trece primul test. Apoi pentru fiecare numar care a trecut testul am putea face adunarea dintre el si fiecare numar din sirul B. Daca rezultatul adunarii este S atunci avem o pereche de numere care satisfac cerintele. Parerea mea Very Happy Banuiesc totusi ca metoda asta este foarte lenta si sunt variante mult mai rapide.

EDIT: Daca numerele din siruri sunt in ordine consecutiva se pot face cateva optimizari.


Ce zici de complexitatea solutiei tale? Eu afirm ca este de ordinul lui O(N*M) unde N este lungimea primului sir si M este lungimea celui de-al doilea. Very Happy
Cu siguranta se poate si mai bine, cine poate gasi O(N logM)?

Ultima editare efectuată de Deliverance pe 07 Aug 2009 15:13:55; 2 editări în total


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 07 Aug 2009 16:07:21    Subiect: < fara subiect >
Sir Game-a-lot info:

Sir Game-a-lot:

Se parcurge fiecare sir si se contruieste cate un arbore binar cu valorile ordonate, in cazul primului sir de la mare la mic, in cazul celui de-al doilea, ordonate de la mic la mare (pt. acelasi tip de parcurgere). Se adauga doar valorile < suma.

Se parcurge apoi primul arbore si pt. fiecare valoare se parcurge arborele 2, oprindu-se in cazul arborelui 2 cand suma este mai mare decat targetul.

Nine women working in perfect harmony can't have a baby in 1 month.


Status:
Înregistrat pe:
25 Aug 2007 18:20:41
Vârsta: 33 ani
Mesaje: 116
Locatie: Cluj-Napoca
Programator
Zamolxis Interactive
 
    Postat la 07 Aug 2009 16:44:49    Subiect: Re:
Deliverance info:

Deliverance:

Sir Game-a-lot a scris:

Se parcurge fiecare sir si se contruieste cate un arbore binar cu valorile ordonate, in cazul primului sir de la mare la mic, in cazul celui de-al doilea, ordonate de la mic la mare (pt. acelasi tip de parcurgere). Se adauga doar valorile < suma.

Se parcurge apoi primul arbore si pt. fiecare valoare se parcurge arborele 2, oprindu-se in cazul arborelui 2 cand suma este mai mare decat targetul.


In cazul cel mai defavorabil toate valorile sunt mai mici ca suma. Constructia celor doi arbori are complexitatea O(NlogN + MlogM).

Consideram sirurile sortate:

A: 50 40 30 20 10
B: 10 20 40 60 90

si S = 120

Incepem cu 50 si cautam in al doilea sir, ne oprim abia la sfarsitul celui de-al doilea sir. Incepem cu 40 si ne oprim tot la sfarsitul celui de-al doilea sir. Acesta este un exemplu extrem, pentru ca in practica am face mult mai putine operatii. Totusi complexitatea finala este T2(N,M) = O(NlogN + MlogM + O(N*M)) care desi pare mai mare decat T1(N,M)=O(N*M) este mai buna in practica datorita constantei ascunse din fata lui O(N*M) din T2.

In concluzie, ideea cautarii intr-o entitate sortata e buna...

Ultima editare efectuată de Deliverance pe 07 Aug 2009 16:52:46; 4 editări în total


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 07 Aug 2009 17:17:50    Subiect: Re: Re:
Sir Game-a-lot info:

Sir Game-a-lot:

Deliverance a scris:

Sir Game-a-lot a scris:

Se parcurge...


In cazul cel mai defavorabil toate valorile sunt mai mici ca suma. Totusi complexitatea finala este T2(N,M) = O(NlogN + MlogM + O(N*M)) care desi pare mai mare decat T1(N,M)=O(N*M) este mai buna in practica datorita constantei ascunse din fata lui O(N*M) din T2.

In concluzie, ideea cautarii intr-o entitate sortata e buna...


Acuma orice algoritm din asta isi are inamicul, inclusiv grozavul quicksort.

Idea oricum asta e, sa nu treci de 2 ori peste valorile care nu pot face suma.

Se pot de ex. crea X "galeti" si pus in fiecare valorile [Sum/X * (n-1), Sum/X * n), n apartine [1..x] in fiecare astfel de galeata. Aici caz extrem ar fi ca toate valorile sa fie in aceeasi galeata.

Pe de alta parte, cu binary tree, dupa prima cautare in arborele 2, poti mentine pointeri la "marginile" ferestrei de cautare pe care o largesti/translatezi cu fiecare noua iteratie din primul arbore. Nu e musai ca arborele secund sa fie parcurs in intregime sau pana se indeplineste conditia de > Sum.

Nine women working in perfect harmony can't have a baby in 1 month.


Status:
Înregistrat pe:
25 Aug 2007 18:20:41
Vârsta: 33 ani
Mesaje: 116
Locatie: Cluj-Napoca
Programator
Zamolxis Interactive
 
    Postat la 07 Aug 2009 17:22:35    Subiect: < fara subiect >
Deliverance info:

Deliverance:

Solutia cred ca e mult mai simpla. Sortam vectorul B si procedam astfel:

Cod sursă:

pentru fiecare element x din A
       cauta binar pe S-x in B
       daca exista atunci
            afiseaza perechea (x, S-x)
       sfarsit daca
sfarsit pentru
 


Complexitate sortare B: O(MlogM), complexitate algoritm max(O(NlogM), O(MlogM)). Very Happy


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 07 Aug 2009 18:54:01    Subiect: Re:
Sir Game-a-lot info:

Sir Game-a-lot:

Deliverance a scris:

Solutia cred ca e mult mai simpla. Sortam vectorul B si procedam astfel:

Cod sursă:

pentru fiecare element x din A
       cauta binar pe S-x in B
       daca exista atunci
            afiseaza perechea (x, S-x)
       sfarsit daca
sfarsit pentru
 


Complexitate sortare B: O(MlogM), complexitate algoritm max(O(NlogM), O(MlogM)). Very Happy


Corect, insa daca is ambele ordonate poti folosi proprietatea ca odata o valoare gasita in B sau conditia de terminare atinsa, valoarea urmatoare trebuie sa fie in preajma acelei pozitii. Se reduce drastic timpul de cautare in B cu compromisul adaosului timpului necesar crearii arborelui A.
Pt. fiecare valoare din A se cauta mult mai putine valori in B decat prin parcurgerea unui intreg arbore binar.

Nine women working in perfect harmony can't have a baby in 1 month.


Status:
Înregistrat pe:
25 Aug 2007 18:20:41
Vârsta: 33 ani
Mesaje: 116
Locatie: Cluj-Napoca
Programator
Zamolxis Interactive
 
    Postat la 07 Aug 2009 19:42:02    Subiect: Re: Re:
Deliverance info:

Deliverance:

Sir Game-a-lot a scris:

Deliverance a scris:

Solutia cred ca e mult mai simpla. Sortam vectorul B si procedam astfel:

Cod sursă:

pentru fiecare element x din A
       cauta binar pe S-x in B
       daca exista atunci
            afiseaza perechea (x, S-x)
       sfarsit daca
sfarsit pentru
 


Complexitate sortare B: O(MlogM), complexitate algoritm max(O(NlogM), O(MlogM)). Very Happy


Corect, insa daca is ambele ordonate poti folosi proprietatea ca odata o valoare gasita in B sau conditia de terminare atinsa, valoarea urmatoare trebuie sa fie in preajma acelei pozitii. Se reduce drastic timpul de cautare in B cu compromisul adaosului timpului necesar crearii arborelui A.
Pt. fiecare valoare din A se cauta mult mai putine valori in B decat prin parcurgerea unui intreg arbore binar.


Nu te cred, demonstreaza-mi! Asa mi-a zis un profesor din comisia de licenta cand ii spuneam eu ca din scena nu lipseste nici macar un poligon Very Happy. Dar referitor la ce spui tu, cam ce complexitate obtii?


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 08 Aug 2009 20:06:30    Subiect: Re: Re: Re:
Sir Game-a-lot info:

Sir Game-a-lot:

Deliverance a scris:


Nu te cred, demonstreaza-mi! Asa mi-a zis un profesor din comisia de licenta cand ii spuneam eu ca din scena nu lipseste nici macar un poligon Very Happy. Dar referitor la ce spui tu, cam ce complexitate obtii?


Ce fel de poligon era? Adica din ce ti-ai dat tu licenta? Suna interesant. Omul are dreptate oarecum pentru ca una e in teorie si alta, pe masurate, in practica.

E complicat de estimat ordinul pt. solutia mea, probabil ca e mai lenta totusi decat solutia ta, mai ales ca navigarea pe arbore presupune sau recursivitate sau memorie multa initializata la fiecare parcurgere. Ar trebui masurat insa Razz .

Nine women working in perfect harmony can't have a baby in 1 month.


Status:
Înregistrat pe:
25 Aug 2007 18:20:41
Vârsta: 33 ani
Mesaje: 116
Locatie: Cluj-Napoca
Programator
Zamolxis Interactive
 
    Postat la 08 Aug 2009 22:24:31    Subiect: Re: Re: Re: Re:
Deliverance info:

Deliverance:

Sir Game-a-lot a scris:

Deliverance a scris:


Nu te cred, demonstreaza-mi! Asa mi-a zis un profesor din comisia de licenta cand ii spuneam eu ca din scena nu lipseste nici macar un poligon Very Happy. Dar referitor la ce spui tu, cam ce complexitate obtii?


Ce fel de poligon era? Adica din ce ti-ai dat tu licenta? Suna interesant. Omul are dreptate oarecum pentru ca una e in teorie si alta, pe masurate, in practica.

E complicat de estimat ordinul pt. solutia mea, probabil ca e mai lenta totusi decat solutia ta, mai ales ca navigarea pe arbore presupune sau recursivitate sau memorie multa initializata la fiecare parcurgere. Ar trebui masurat insa Razz .


Era vorba de calcularea seturilor PVS(pentru rasterizarea interioarelor Very Happy ), si eu spuneam ca oricum ai privi fiecare set PVS e calculat corect. Iar proful amuzat probabil de entuziasmul meu mi-a spus zambind: Nu te cred! Demonstreaz-mi! Din fericire n-am izbucnit in ras. Licenta avea titlul: Tehnici de partitionare spatiala


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 09 Aug 2009 16:37:33    Subiect: Re: Re: Re: Re: Re:
Sir Game-a-lot info:

Sir Game-a-lot:

Deliverance a scris:

Era vorba de calcularea seturilor PVS(pentru rasterizarea interioarelor Very Happy ), si eu spuneam ca oricum ai privi fiecare set PVS e calculat corect. Iar proful amuzat probabil de entuziasmul meu mi-a spus zambind: Nu te cred! Demonstreaz-mi! Din fericire n-am izbucnit in ras. Licenta avea titlul: Tehnici de partitionare spatiala


Sa nu imi zici ca exista in Romania facultati serioase cu ore de grafica 3D !?

Nine women working in perfect harmony can't have a baby in 1 month.


Status:
Înregistrat pe:
25 Aug 2007 18:20:41
Vârsta: 33 ani
Mesaje: 116
Locatie: Cluj-Napoca
Programator
Zamolxis Interactive
 
    Postat la 09 Aug 2009 18:54:17    Subiect: Re: Re: Re: Re: Re: Re:
Deliverance info:

Deliverance:

Sir Game-a-lot a scris:

Deliverance a scris:

Era vorba de calcularea seturilor PVS(pentru rasterizarea interioarelor Very Happy ), si eu spuneam ca oricum ai privi fiecare set PVS e calculat corect. Iar proful amuzat probabil de entuziasmul meu mi-a spus zambind: Nu te cred! Demonstreaz-mi! Din fericire n-am izbucnit in ras. Licenta avea titlul: Tehnici de partitionare spatiala


Sa nu imi zici ca exista in Romania facultati serioase cu ore de grafica 3D !?


Hmm, depinde ce intelegi prin serios.. la cursul de grafica din anul 3 am facut destule chestii interesante Very Happy


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 11 Aug 2009 15:30:59    Subiect: < fara subiect >
Black_Knight info:

Black_Knight:

presupun ca se pot pune orice fel de probleme
ca mai aveam pe acasa diverse teste cerute pe la interviuri etc
poate nu uit sa pun una cand ajung acasa sa vad ce zice lumea


Status:
Înregistrat pe:
07 May 2007 19:49:43
Vârsta: 29 ani
Mesaje: 712
Locatie: Bucuresti
Programator

 
    Postat la 11 Aug 2009 23:20:30    Subiect: < fara subiect >
Deliverance info:

Deliverance:

Un prieten de-ai mei a primit urmatoarea problema la un test de programare pe C#(a primit o parte de algoritmica si o parte de C#). Se da o matrice de m x n cu valori intregi(fiecare linie si coloana sunt sortate crescator) si o valoare x. Sa se determine daca x apartine matricii sau nu. Cu siguranta se cauta ceva mai bun decat O(N*M) (adica doua for-uri imbricate Very Happy ).

Exemplu de matrice:

1 2 3 4 5
2 3 4 5 6
3 4 5 6 7

Atentie: se cauta doar existenta unui element nu toate pozitiile pe care apare. E destul de interesanta problema, poate putin prea complicata pentru incepatori dar merita incercata Very Happy.

Ultima editare efectuată de Deliverance pe 11 Aug 2009 23:22:36; 1 editări în total


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 

Pagina 1 din 3 [ 1 | 2 | 3 ]


Server time: 09:33:07 19.05.2012



[ Termeni si conditii | Contact | F.A.Q. | Funny Pictures ]

© 2006 - 2012 Copyright 7thFACTOR Entertainment - All rights reserved