12.07.2015 Views

Finala BURSELE AGORA 2003/2004 - GInfo

Finala BURSELE AGORA 2003/2004 - GInfo

Finala BURSELE AGORA 2003/2004 - GInfo

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Soluþiiconcurs<strong>Finala</strong> <strong>BURSELE</strong> <strong>AGORA</strong><strong>2003</strong>/<strong>2004</strong>Cosmin-Silvestru NegruºeriVã prezentãm în continuare soluþiile celor patru probleme propuse sprerezolvare la etapa finalã a celei de-a V-a ediþii a concursului de programareorganizat de revista noastrã.<strong>GInfo</strong> nr. 14/7 - noiembrie <strong>2004</strong>20P040619: CifreAceastã problemã este o variaþie apãrþii de decompresie a unui algoritmclasic de compresie apãrut în 1994.Algoritmul amintit senumeºte BWT (Borrows-Wheeler Transform) ºi metodade compresie este ceaexplicatã în textul problemei.De fapt, acest algoritm, nu esteDavidWheelerunul de compresie ci unul de transformarea informaþiei. Informaþiatransformatã poate duce la obþinereaunei rate de compresie mai mare decâtcea netransformatã datoritã faptuluicã în urma transformãrii aparºiruri de caractere consecutive identicemai lungi ºi mai multe. Publicaþiaoriginalã poate fi studiatã accesândadresa:http://gatekeeper.research.compaq.com/pub/DEC/SRC/research-reports/abstracts/src-rr-124.htmlProblema propusã a fost folositãºi la finala concursului Bursele Agoradin 2002 precum ºi la Olimpiada Internaþionalãde Informaticã din 2001(ca problemã de rezervã).Problema curentã prezintã o micãmodificare faþã de cea iniþialã, ºirurilefiind sortate în ordine descrescãtoare.Algoritmul original are ºirurileordonate ascendent.Putem trece uºor peste aceastãmodificare, transformând la începutulalgoritmului, fiecare cifrã în: 10 -cifra originală, aplicând algoritmuloriginal, iar la sfârºit aplicânddin nou aceeaºi transformare, pentrua obþine ºirul corect.Sã vedem cum s-au transformatºirurile din exemplu:• prima transformare2457 86534572 65385724 53867245 3865• sortarea elementelor7245 38655724 53864572 65382457 8653Primul pas al algoritmului nostrude decompresie sorteazã cifrele ultimeicoloane, pentru a obþine cifreleprimei coloane (aici: 3, 5, 6, 8).Pentru a realiza aceasta putemfolosi un algoritm de sortare prinnumãrare.Algoritmul de rezolvare a acesteiprobleme constã în urmãtorii paºi,excluzând transformãrile de la începutºi sfârºit:• se determinã frecvenþa de apariþie acifrelor, ceea ce permite obþinereaprimei coloane a matricei (primacoloanã conþine întotdeauna cifreleordonate).• se construieºte un ºir de corespondenþeA între cifrele de pe primacoloanã ºi cele de pe ultima, þinândcont de faptul cã celei de-a i-a apariþiia cifrei c de pe prima coloanã îicorespunde cea de-a i-a apariþie acifrei c de pe ultima.• pentru determinareanumãrului cerut se scriucifrele corespunzãtoarepoziþiilor A[1], A[A[1]],A[A[A[1]]] etc.; pentruaceasta se foloseºte unindice i care, dupã fiecarepas va primi valoareaA[i].Acest algoritm a fost demonstratmatematic de cãtre cei doi cercetãtoriºi algoritmul a primit numele amândurora.Analiza complexitãþiiDatele de intrare constau în citireaºirului cifrelor de pe ultima coloanã;deoarece avem N litere, ordinul decomplexitate al operaþiei este O(N).Determinarea frecvenþelor deapariþie se realizeazã în timp liniarprin simpla parcurgere a ºirului.


Construirea ºirului de corespondenþese realizeazã tot în timp liniardeoarece la fiecare pas este realizatãcâte o corespondenþã.Pentru afiºarea datelor de ieºire(a cuvântului cãutat) se realizeazã osimplã parcurgere a ºirului de corespondenþe,deci aceastã operaþie areordinul de complexitate O(N).Transformarea cifrelor laînceputul ºi sfârºitul algoritmului serealizeazã liniar.În concluzie, algoritmul de rezolvarea acestei probleme are ordinulde complexitate O(N) + O(N) +O(N) + O(N) + O(N)= O(N).P040620: ProdusePentru o permutare data p, produsulelementelor va fi: (n!) p ·(n!) u . Deoarecevor fi înmulþite n! permutari, rezultatulva fi (n!) p+u+1 .Pentru un numãr întreg X, numãrulK de cifre ale acestuia va satisfaceurmãtoarea inegalitate: 10 K ≤ X< 10 K+1 .Logaritmând aceastã inegalitate(în baza 10), obþinem: K ≤ log 10X


concursutilizatã în cadrul codului ASCII, ciliterele mici erau considerate dinpunct de vedere lexicografic ca fiindmai mici decât literele mari.Citirea neatentã a propoziþiei cespecificã acest lucru a dus pentruunul dintre concurenþi la pierderea a100 de puncte la aceastã problemã,rezolvarea lui fiind corectã dacã nuar fi fost prezentã aceastã precizare.P040622: NumereUn algoritm corect pentru rezolvareaacestei probleme constã într-o cãutareexhaustivã în spaþiul soluþiilor.Totuºi, o cãutare naivã, care încearcãfiecare permutare ar fi dus laobþinerea a doar jumãtate din punctajulmaxim.Algoritmul de rezolvare propuseste este mult mai rapid ºi este bazatpe anumite observaþii matematice.Dacã în soluþia noastrã avem: b i≤b i+1≤ ... ≤ b j, atunci suma |b i- b i+1| +|b i+1- b i+2| + ... |b j-1- b j| se transformã(explicitând modulele) în b i+1- b i+b i+2- b i+1+ ... + b j- b j-1= b j- b i, iarîn cazul în care avem b i≥ b i+1≥ ... ≥b j, atunci suma |b i- b i+1| + |b i+1- b i+2|+ ... |b j-1- b j| se transformã (explicitândmodulele) în b i- b i+1+ b i+1- b i+2+ ... + b j-1- b j= b i- b j.Pe baza acestei observaþii putemtrage concluzia cã daca notam cu x_iminimele locale (indicii x cu proprietateab x-1≥ b x≤ b x+1) iar cu y_i maximelelocale (indicii y cu proprietateab y-1≤ b y≥ b y+1), atunci observãm cãsuma |b 1- b 2| + .. + |b n- b 1| este dublulsumei elementelor y_i din carese scade dublul sumei elementelorx_i).Dacã sortãm elementele ºirului a,putem folosi un algoritm recursivback(x, nmin, nmax, currentsum),unde x este indicele curent din a, nmineste numãrul de minime locale pe carele avem la pasul curent, nmax numãrulde maxime locale ºi currentsumsuma curentã.La fiecare pas numãrul minimelorlocale trebuie sã fie mai mare sauegal decât numãrul de maxime locale,iar în final numãrul minimelor localetrebuie sã fie egal cu numãrul maximelorlocale.Soluþia va fi reprezentatã sub formaunui ºir sol, în care sol i= 0 dacã a inu este nici minim local nici maximlocal, sol i= 1 dacã a ieste minim local,iar sol i= 2 dacã a ieste maxim local.Putem observa de asemenea cã a 1este minim global, deci ºi minimlocal, iar a neste maxim global, deci ºimaxim local.Implementarea acestei idei ar fidus la obþinerea unui punctaj maxim.O altã idee abordatã cu succes deun concurent a fost o cãutare localãrandomizatã.Mai concret, concurentul a pornitcu o permutare aleatoare a ºiruluia ºi a încercat interschimbãri de elementea icu a jpentru a obþine o sumãcât mai apropiatã de suma cerutã.Dacã nu se mai putea realiza o optimizarea soluþiei curente, concurentulîncerca sã porneascã de la o nouãpermutare.Alþi concurenþi au încercat sãimplementeze idei asemãnãtoare, darnu au obþinuit rezultate comparabile.Analiza complexitãþiiSoluþia prezentatã are cu siguranþãun ordin de complexitate cel multegal cu O(3 n ). Restricþia suplimentarãca numãrul de minime locale sã fiemai mic decât numãrul de maximelocale, ne duce cu gândul la numãrulde parantezãri ºi la numerele luiCatalan.Pentru soluþia inventivã randomizatãeste ºi mai greu de estimat ordinulde complexitate. De astfel desoluþii avem nevoie în cazul unorprobleme foarte greu abordabile cualgoritmii clasici.<strong>GInfo</strong> nr. 14/7 - noiembrie <strong>2004</strong>22

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!