Complexitatea Algoritmilor

Curs
7/10 (1 vot)
Conține 1 fișier: doc
Pagini : 6 în total
Cuvinte : 5213
Mărime: 21.34KB (arhivat)
Publicat de: Carla Grecu
Puncte necesare: 0

Extras din curs

Etapele rezolvării unei probleme

Este cunoscut faptul că rezolvarea unei probleme presupune în principal trei etape: I. Analiza problemei, II. Proiectarea soluţiei şi III. Implementarea şi testarea soluţiei în practică.

În funcţie de gradul de generalitate a analizei efectuate, în a doua etapă se întîlnesc două situaţii: proiectarea unei soluţii particulare, valabilă doar pentru acea problemă, şi proiectarea unei soluţii generale, valabilă pentru orice instanţiere a acelei probleme (soluţia generalizată).

În timp ce soluţia particulară este valabilă doar pentru o instanţă a problemei, soluţia generală este independentă de parametrii problemei şi oferă o metodă generală de rezolvare a problemei.

Astfel, soluţionarea imediată a ecuaţiei x3+1=0 este particulară faţă de soluţionarea ecuaţiei generalizate ax3+bx2+c=0.

Noţiunea de algoritm şi cea de program

Atunci cînd metoda generală de rezolvare a unei probleme este prezentată precis, pe paşi ce se efectuează într-o ordine bine precizată şi care conduc în timp finit la soluţia oricărei instanţieri a problemei, vorbim de algoritmul de rezolvare a problemei.

De exemplu, algoritmul de determinare a unei soluţii reale a ecuaţiei polinomiale P(x)=0, cu o aproximare  dată, prin metoda tangentei.

Avantajul major al proiectării unui algoritm de soluţionare a problemei este dat de faptul că efortul de rezolvare poate fi transferat unei maşini automate (calculator) sub forma programului executabil ce implementează algoritmul general de soluţionare.

Implementarea algoritmului general de soluţionare a problemei într-un program pe calculator permite o importantă economie prin faptul că efortul major de analiză şi proiectare a soluţiei a fost efectuat o singură dată iar rezolvarea problemei se reduce la efortul foarte redus de executare (rulare) a programului cu ajutorul calculatorului pentru fiecare instanţă diferită a problemei.

Modelul abstract al Maşinii Turing

Primul model teoretic riguros de maşină automată de calcul este Modelul maşinii abstracte Turing (1936). Acest model teoretic a stat la baza apariţiei efective a primei maşini electronice de calcul, denumită mai tîrziu computer (calculator) după denumirea operatorului uman (tehnicianului) care era angajat să facă toate calculele inginereşti sau contabile ale unui proiect sau ale unei firme.

Teza Turing-Church

Rezultă că, în ultimă instanţă, puterea de rezolvare a unui calculator se reduce la puterea de calcul a maşinii Turing. Iar puterea de calcul a acestei maşini abstracte riguroase este exprimată sub forma Tezei Turing-Church: O maşină Turing poate face tot ceea ce poate face un computer uman înzestrat cu creion, oricîte foi de hîrtie şi reguli precise ( mecanice sau automate ) de calcul.

Există, pe lîngă această formulare iniţială a lui Turing, o serie de alte formulări echivalente ale acestei teze unanim acceptate de teoreticienii ce au pus bazele teoriei informatice şi a ştiinţei calculatoarelor (computer science). Să observăm că această teză (propoziţie acceptată fără demonstraţie ca avînd valoarea logică de adevărat) stabileşte o echivalenţă perfectă între puterea de calcul a unui computer uman şi puterea de calcul a unui computer maşină .

Echivalarea subînţeleasă (tacită) a noţiunii teoretice vagi de algoritm cu noţiunea matematică riguroasă de Maşină Turing a însemnat acceptarea unanimă a Tezei Turing-Church de către iniţiatorii informaticii. În consecinţă, studiul eficienţei unui algoritm în soluţionarea unei probleme revine în studiul eficienţei în funcţionare a maşinii Turing şi implicit a eficienţei în funcţionare a programului ce implementează acel algoritm de rezolvare.

Aceasta este consecinţa faptului că, în accepţiunea originală, algoritmul de soluţionare a unei probleme este destinat unui computer uman, dar puterea de calcul a acestuia este aceeaşi cu puterea de calcul a unei maşini Turing=computer maşină care este pusă în mişcare printr-un program executabil.

Analiza, Proiectarea şi Implementarea algoritmilor şi Complexitatea algoritmilor

Reluînd ideea iniţială, în rezolvarea automată a unei probleme (adică rezolvarea cu ajutorul calculatorului a oricărei instanţe diferite problemei) se trece prin cele trei etape: Analiza teoretică a problemei, Proiectarea algoritmului de soluţionare şi Implementarea algoritmului într-un program executabil pe calculator.

În timp ce în prima etapă –analiza problemei- rezultatul cheie, pe care se concentrează preponderent efortul de analiză, este demonstrarea corectitudinii soluţiei, în a doua etapă –proiectarea algoritmului de soluţionare- cuvîntul cheie este eficienţa de rezolvare. Studiul cu un pronunţat caracter teoretic conţinut în această a doua etapă îşi propune să prevadă eficienţa în funcţionare (necesarul de timp şi spaţiu calculator) a programului executabil ce va implementa algoritmul, eventual prin compararea teoretică a algoritmilor de soluţionare diferiţi.

De exemplu, în cazul problemei sortării unui şir de n chei prin comparaţii se poate estima teoretic comparativ că algoritmul de sortare QuickSort este printre cele mai eficiente soluţii.

Disciplina informaticii care se ocupă cu studiul teoretic al eficienţei algoritmilor este numită Complexitatea algoritmilor.

Operaţia de bază, cheia studiului complexităţii

La baza studierii complexităţii unui algoritm stă detectarea în descrierea algoritmului a operaţiei sau a operaţiilor de bază, acea operaţie (acele operaţii) aflată (aflate) în cel mai interior corp de ciclu repetitiv şi a cărei (a căror) contorizare permite estimarea în avans, înainte de lansarea în execuţie, a timpului de execuţie a programului executabil corespunzător.

În majoritatea cazurilor există o legătură foarte strînsă între operaţia de bază (cea mai repetată operaţie) şi operaţia care este dedusă în etapa de analiză a problemei ca fiind operaţia inevitabilă pentru rezolvarea problemei.

De exemplu, în cazul problemei sortării unui şir de n chei prin comparaţii este limpede că operaţia de comparare a “mărimii” cheilor este operaţia inevitabilă şi deasemenea ea va fi şi operaţia de bază a cărei contorizare va permite estimarea, înainte de execuţie, a duratei de funcţionare a programului ce implementează algoritmul de sortare respectiv.

Clase de algoritmi

În această situaţie, toţi algoritmii diferiţi care soluţionează aceeaşi problemă şi care se bazează pe aceeaşi operaţie de bază (inevitabilă) formează clasa algoritmilor de soluţionare a problemei. Deobicei numele clasei va fi dat chiar de numele acelei operaţii de bază ce este conţinută de fiecare algoritm al clasei în mod inevitabil.

De exemplu, în cazul problemei sortării unui şir de n chei prin comparaţii, algoritmii diferiţi ce soluţionează problema sînt grupaţi în clasa algoritmilor de sortare prin comparaţii, spre deosebire de clasa algoritmilor de sortare prin distribuire ce soluţionează aceeaşi problemă bazîndu-se însă pe altă operaţie de bază: distribuirea cheilor de sortat.

Operaţia de bază a algoritmilor dintr-o clasă de algoritmi poate fi comparată cu o vergea verticală pe care sînt înşiraţi toţi algoritmii clasei. Ea este cea care permite studiul comparativ a eficienţei algoritmilor din acea clasă (ea fiind o veritabilă coloană vertebrală a clasei respective).

Eficienţa algoritmilor

Compararea eficienţei a doi algoritmi diferiţi ce soluţionează aceeaşi problemă se face prin determinarea teoretică a numărului de repetiţii a operaţie de bază în fiecare algoritm şi compararea celor două valori. În final rezultatul comparării va permite estimarea comparativă a duratei de funcţionare a programelor şi alegerea celui mai bun.

Compararea eficienţei a doi algoritmi din punct de vedere practic se face prin compararea timpilor medii de execuţie a celor două programe ce îi implementează. Această metodă pragmatică are dezavantajul că necesită rularea programelor care, în anumite situaţii, poate dura un timp surprinzător de mare.

Funcţiile de complexitate

Numărul de repetiţii al operaţiei de bază se exprimă matematic printr-o funcţie de complexitate individuală asociată algoritmului, funcţie ce depinde în mod inevitabil de dimensiunea (mărimea) vectorului datelor de intrare.

Preview document

Complexitatea Algoritmilor - Pagina 1
Complexitatea Algoritmilor - Pagina 2
Complexitatea Algoritmilor - Pagina 3
Complexitatea Algoritmilor - Pagina 4
Complexitatea Algoritmilor - Pagina 5
Complexitatea Algoritmilor - Pagina 6

Conținut arhivă zip

  • Complexitatea Algoritmilor.doc

Alții au mai descărcat și

Algoritmi Simpli Algoritmi de Sortare

Notiunea de algoritm este o notiune de baza pentru programarea calculatoarelor, astfel ca trebuie sa începem cu un studiu atent al acestui concept....

Manual Grafuri

1. Preliminarii 1.1. Algoritmi Toti algoritmii descrisi în cadrul acestei lucrari folosesc structuri de date de tip graf. Unele descrieri sînt...

Manual Limbaj C

1. Generalitati asupra limbajului C 1.1. Introducere Limbajul C a fost creat la începutul anilor '70 de catre Brian W Kernigham si Dennis M...

Noțiuni despre Algoritmi și Programare Structurată

2.1. Noţiuni introductive Rezolvarea problemelor cu ajutorul calculatorului presupune parcurgerea mai multor etape: 1. analiza problemei (cu...

Variabile

6. Variabile Prin variabilă se înţelege o dată a cărei valoare se poate schimba pe parcursul execuţiai programului. Unei variabile i se atribuie...

Instrucțiunile limbajului C++

5. Operaţii de intrare/ieşire În C, spre deosebire de alte limbaje, sistemul intrare/ieşire nu este parte a limbajului, ci este introdus printr-un...

Instrucțiuni

O instrucţiune este o parte a programului care poate fi executată. Aceasta înseamnă că o instrucţiune specifică o acţiune. Standardul ANSI C şi cel...

Instrucțiuni de intrare

7. Instrucţiuni de iterare Instrucţiunile de iterare (ciclare) permit ca un grup de instrucţiuni să se execute repetat, până se îndeplineşte o...

Te-ar putea interesa și

Soft pentru Algoritmi Fundamentali de Determinare a Unui Flux de Cost Minim

“Diferența dintre școală și viață? În școală, înveți o lecție, apoi dai un test. În viață, ai de dat un test care te învață o lecție.” (Tom...

Divide et Impera

1.1.Tema proiectului Sa se dezvolte o aplicatie realizata in Power Point care sa cuprinda informatii despre metoda “Divide et impera”.Aplicatia va...

Complexitatea Calculului

Teoria complexităţii constituie un domeniu foarte important al teoriei algoritmilor care investighează rezolvabilitatea individuală a problemelor...

Proiectarea Algoritmilor

1. INTRODUCERE ÎN PROIECTAREA ALGORITMILOR 1.1. Definiţii Un algoritm este o metodă de rezolvare pas cu pas a problemelor. O problemă este...

Algoritmi și Structuri de Date

Modulul 0. Alocare dinamica in limbajul C Capitolul 0. Pointeri si alocare dinamica. Tipul de date struct 0.1 Pointeri si alocare dinamica O...

Algoritmica grafurilor

Capitolul 1 INTRODUCERE Pentru noţiunile din acest paragraf am consultat Behzad, Chartrand, Foster, Croitoru, Olaru, Tomescu. Alte completări...

Structuri de Date și Algoritmi

Curs 1 Structuri de date Structurile de date erau definite în limbajul C drept organizarea datelor primare. În limbajul C++, acestea reprezinta o...

Metode Numerice

Introducere Ultimele decenii au fost marcate de progresul mijloacelor de calcul. Asistăm la o competiţie între dezvoltarea tehnologică şi...

Ai nevoie de altceva?