140 likes | 342 Views
Aplica ţ ii ale ridic ă rii la putere în informatic ă. F ă r ă ridicarea la putere o parte din informatic ă ar fi complet inaccesibil ă . Ea are o varietate de aplica ţ ii şi este esen ţ iala în rezolvarea unor probleme în timp optim .
E N D
Fărăridicarea la putere o parte din informaticăarficompletinaccesibilă. Ea are o varietate de aplicaţiişiesteesenţialaînrezolvareaunorproblemeîntimpoptim. • Cu ajutorulacesteiprezentărivomarăta la ceesteutilăridicarea la putereîninformatică. • Pentru a nu mărilungimeaprezentării am decis căunelesurse de la probleme se vor găsi la o adresa web specificată.
Probleme de numărare • Problemele de numărare sau de combinatoricăsuntcaracterizate de naturaloratipică, ceimpune din partearezolvitoruluiingeniozitate, flexibilitateşiperseverenţăîn căutareasoluţiei. • In continuarevomprezenta 2 probleme de combinatoricăîn a cărorrezolvare, ridicarea la putereeste predominantă.
1. Pătrate(preluata de pe site-ulinfoarena) • Fie A o matrice cu N liniişi N coloane. Se cere să se găsească numărulposibilităţilor de a completamatricea A cu elemente din mulţimea {-1, 1, -5, 5} astfelîncâtprodusulnumerelor de pefiecareliniesaucoloanăeste -5 sau 5. • Rezolvare: Din cerinţă ne dăm seama căpefiecareliniesaucoloanătrebuie săavem un 5 sau -5. Astfelpe prima linieavem N posibilităţi de a plasa 5 sau -5. Pelinia 2 avem N-1 posibilităţi, pelinia 3 avem N-2, etc. In total avem 1*2*3*….*N=N!(se citeste N factorial) configuraţii. Pentrucele N celule din fiecareconfiguraţieavemposibilităţi de a plasa 5 sau -5. Acum ne mai rămâne săplasăm pecele N*N-N celule 1 sau -1. Pentrufiecareconfiguraţieavemposibilităţideciîn total avemposibilităţi de a completamatricea A cu elemente din mulţimea {-1,1,-5,5} astfelîncâtprodusul de pefiecareliniesaucoloană să fie 5 sau -5.
2.Funcţii(din listaluiFrancu) • Pentru N şi S date, câtefuncţiisurjective definite pemulţimea { 1,2,3,4..N } cu valoriînmulţimeanumerelor { 0,-1,1 } existăastfelîncât |f(1)| + |f(2)| + .. |f(N)| =S (toatesuntînmodul) . • Rezolvare: • Din faptul căfuncţiilesuntsurjectiverezultă cătrebuie săavemcelpuţin un 1,un 0 şi un -1.Deoarece valoarealui |f(i)|,1 i N, poatefidoar 0 sau 1 ne dăm seama cătrebuie săavem S de f(i),1 I N, pentru care |f(i)|=1. • Pentrufiecare din cei S de f(i) avem 2 posibilităţi( 1 sau -1) deciîn total sunt . Observăm că am numărat şivariantele 1,1,1,…1 şi -1,-1,-1…-1 care nu suntcorectedeoarecefuncţiilesuntsurjective. Deci numărulcorectesteposibilităţi de a alege S valori de 1 sau -1 astfelîncâtfuncţiile să fie corecte. Mai rămân N-S valori de 0, care pot fialeseîn C(N,N-S) ( combinări de N luatecâte N-S). In final numărulfuncţiilorsurjective cu proprietatea din enunţeste .
Ridicare la putereîntimplogaritmic • Proprietăţileputerilor pot fifolositepentru a ridica un număr la o putereîntimplogaritmic. • In limbajul C++ există o instrucţiune: pow(inta,int b) care ridică a la puterea b, însă ea esteliniară( o(b) ) deoareceefectueazăprodusul a*a*…*a(b termeni). Folosindproprietateaputemcalculaînmodulurmător: • Dacă b este par calculăm . • Dacă b esteimparcalculăm . • Deoareceputerea se tot înjumătăţestecomplexitateaestelogaritmică. • In continuareprezentăm o funcţierecursivăcecalculeazăîntimplogaritmic.
intpow(inta,int b) { int nr; if(b==0) return 1; if(b%2==0) { nr=pow(a,b/2); return nr*nr; } else return pow(a,b-1) * a; } • Aceastametodă de ridicare la puterepoatefifolosita ca optimizareînmulteproblemeceimplicăputeri, reducândtimpul de execuţie.
Ridicare la putere de matrici • O serie de probleme din informaticăpresupuncalculareaunorrecurenţe. De exemplu: care este al n-lea termen Fibonacci.Metodanaivăestecalcularea pas cu pas al fiecaruitermenpânăajungem la al n-lea termen , aceastăsoluţieavândcomplexitatealiniară. Pentruvalorimari ale lui n, rezolvareanici nu se încadreazăîntimp. • Astfel de problemesunt date la concursuripentru a partajaconcurenţii. Ele nu suntfoartegreledartrebuie un pic de experienţă, ingeniozitateşicunoştintematematice. • In continuareprezentăm o problemă importantă, însă care necesităcunoştinematematicemaiavansate.
1. Al n-lea termen Fibonacci( preluat de pe site-ulinfoarena) • Fie şirullui Fibonacci datprinrecurenţa: F0=0 , F1=1, … , Fn=Fn-1+Fn-2 • Sa se calculeze al n-lea termen al şirului, 0 n 1000000. • Rezolvare: • Observam ca la pasul n cunoaştem Fn-1 şi Fn-2 şidorim săaflăm Fn. • Considerăm matricea (Fn-2 Fn-1). Acumtrebuiesa căutam o matrice Z astfelîncât Z (Fn-2 Fn-1) să fie egal cu (Fn-1 Fn). • O astfel de matriceestedeoarece: • (Fn-2 Fn-1) = ( Fn-2*0 + Fn-1*1 Fn-2*1 + Fn-1*1 )=( Fn-1 Fn) • Notăm (Fi-1 Fi) cu Mi. Astfelobservăm că Mi= Mi-1 Z , dar Mi-1=Mi-2 Z. Deci Mi = Mi-2 . Inductivdeducem că Mi=M1 • Calculăm maiîntâifolosindridicarea la putereîntimplogaritmic (descrisămaisus) apoiînmulţimmatricearezultată cu M1. • Complexitatea finalăeste O( logK ). Astfel, folosindridicarea la putere am calculatFkîntimplogaritmic, soluţieceobţinepunctajul maxim.
Aplicaţii diverse • Ridicarea la putere are o mulţime de utilizăripelângacelespecificatemaisus. In continuareprezentăm câtevachestiunice pot fidesluşiteprinridicare la putere: • 1. Câtenumereînbaza 2 de n cifre există? • Rezolvare: Observăm căpentrufiecarecifrăavem 2 opţiuni 1 sau 0. Deci numărul total vafi . • 2. Un călător vreasaviziteze n insule. Acesteasunt legate întreeleprincâte 5 podurişisuntdipuseliniar. Ultimainsulăestelegată de precedentanumaiprin 3 poduri. Câtedrumuri de la insula 1 la insula n există?
Rezolvare: • Problemaesteoarecumasemănătoare cu cea de maisus. • Observăm ca peinsula 2 putemajungeîn 5 moduri(traversândcele 5 poduri), peinsula 3 în 5*5 moduri, peinsula 4 în 5*5*5 moduri ……, peinsulai in , i 0. Formula de maisusestegreşităpentrui=n deoareceinsula n-1 estelegată de insula n doarprin 3 poduri. Deci numărul de drumuri de la insula 1 la insula n este . • 3. Care estecomplexitatea căutariibinareîncelmaidefavorabilcaz ? • Rezolvare: • Să considerăm cămetodaesterecursivă. Celmaidefavorabilcazînseamna căelementul căutat x nu se află
în vector sau x se aflăîn vector darestedepistatdoar la ultimulapel al funcţiei. • La fiecareapelrecursivspaţiul de căutare se injumătaţeste. Dupăprimulapel din cele n elementeiniţiale, rămân n/2 elemente. După al doileaapel, rămân n/ , etc. Inductivputemafirma că după k apeluri recursive spaţiul de căutarevaconţine n/ elemente. In final, numărul de elemente din spaţiul de căutaretrebuie să fie celmult 1 deci: • n/ 1 deci n . In final se obţine k=log n.
Problemepropuse • 1.Tritzi(preluată de pe site-ulinfoarena, text modificat) • Un triteste o unitate logică care poatelua 3 valori: 0, 1 şi 2. Sirurile de tritzi au o proprietate specială : doitritziavândvalorile 0 şirespectiv 1 nu pot fipuşiunul dupăaltul. Astfel, existăşiruri de tritzivalideşiinvalide (care conţincelpuţin o pereche de tritzi alăturaţiegali cu 0 şi 1). De exemplu, şirul 02212212000211 este un şir valid, darşirurile 0122212 sau 2221022 nu suntvalide. • Determinaţi numărul de şiruri de tritzivalide, de lungime N. • Indiciu: ridicare la putere de matrici • 2.Suma şinumaruldivizorilor • Pentru un număr n dat să se determine număruldivizoriloracestuiaşisumalorfolosintridicarea la putereîntimplogaritmic.