Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Calculul complexitatii in cazul sortarii prin insertie

Matematica


Probleme

  1. Calculul complexitatii in cazul sortarii prin insertie

S se calculeze T(n) pentru algoritmul de sortare prin insertie.



Notatii: A - tabloul de sortat (numere intregi)

n - lungime[A] 10, 7, 5, 2,1

ci - costul instructiunii din linia respectiv (de obicei in unitati de timp)

tj numarul de executii ale testului din linia 4 (pentru fiecare j = 2,3lungime[A]

Procedura  sortInsert (A)

Cost instructiune

Numǎr executii

pentru j 2, lungime[A]  execut

c1

n-1

Temp A [j]

c2

n-1

i j -1

c3

n-1

catTimp i > 0 si Temp < A [i] execut

c4

A [i +1] A [i]

c5

I i - 1

c6

sfCatTimp

A [i +1] Temp

c7

n - 1

sfPentru

sfProcedur

Atunci:

Pentru a calcula efectiv T(n) vom considera 3 cazuri.

1o. Cazul cel mai favorabil cand A e sortat crescǎtor

Pentru fiecare j = 2,3lungime[A] avem Temp ³ A[i] Þ tj = 1.

Deci

= an + b = W (n)

(o functie liniarǎ de n)

2o. Cazul cel mai nefavorabil cand A e sortat descrescǎtor

Pentru fiecare j = 2,3lungime[A] avem cheie < A[i] Þ tj = j

iar si

Deci:

= an2 + bn+c = O(n2) (o functie polinomiala patratica de n)

3o. Cazul mediu cand

Pentru fiecare j = 2,3lungime[A] avem tj = j/2, adica jumatate din elementele secventei sunt sortate crescator, o presupunere destul de realista

iar si

Deci an2 + bn+c = O (n2) (o functie polinomiala patratica de n)

Concluzie: T(n)=O(n2)

  1. Sortarile fara comparatii intre elementele secventei

a)      Sortarea distributiilor (MathSort), determinarea T(n)=O(n), deci complexitate liniara

b)      Sortarea prin evaluarea cifrelor (RadixSort), determinarea T(n)=O(n), deci complexitate liniara

  1. Sa se determine complexitatea (T(n)=?) pentru algoritmul

Pt i 1, n executa C1

j i C2

CatTimp j ¹ 0 executa C3

j j div 2 C4

SfCatTimp

SfPt

Cost instructiune

Numǎr executii

C1

n+1

C2

n+1

C3

C4

Avem

Þ T(n) = (c1+c2)n + (c1+c2) + c3(nlog2n + 2n) + c4(nlog2n +n)=

= (c1+c2+2c3+c4) n + (c3+c4) nlog2n + (c1+c2) = O(n *log2n).

  1. Turnurile din Hanoi

Procedura Hanoi(n,A,B,C)

Daca n=1

Atunci @ Se muta discul 1 de pe A pe B

Altfel Hanoi (n-1, A,C,B)

@ Se muta discul n de pe A pe B

Hanoi (n-1,C,B,A)

SfDaca

SfProcedura

Recurenta dedusa este

Rezolvare: iteram si adunam membru cu membru apoi reducem:

T(n) = 2T(n-1) + 1

2T(n-1) = 22T(n-2) + 2

22T(n-2) = 23T(n-3) + 22

2n-2 T(2) = 2n-1 T(1) + 2n-2

__________ ______ ____ _______

T(n)= 1 + 2 + 22 + +2n-2 + 2n-1 =

  1. Probleme pentru teorema Master.

Reamintim metoda Master

Aceasta metoda se aplica problemelor recursive care au timpul de executie de forma:

Avem 3 cazuri (demonstrate in CORMEN, THOMAS H. LEISERSON, CHARLES

RIVEST,  RONALD R.: Introducere in algoritmi. Cluj-Napoca: Editura Computer Libris Agora,

2000).

1o Daca pentru o anumita constanta e Þ

2o Daca Þ

3o Daca , pentru o anumita constanta e > 0, si daca (numita si conditie de regularitate) pentru o constanta c si n suficient de mari, atunci

Observam ca practic se compara f(n) cu si solutia o va da cea mai mare dintre ele; f(n) trebuie sa fie polinomial mai mica (in primul caz) si polinomial mai mare (in cazul 3) decat .

Sa se rezolve:

T(n) = 4T(n/2) +n; T(n) = 4T(n/2) +n2;

T(n) = 4T(n/2) +n3; T(n) = 2T(n/2) +n3;

T(n) = T(9n/10) +n; T(n) = 16T(n/4) +n2;

T(n) = 7T(n/3) +n2; T(n) = 7T(n/2) +n2;

T(n) = 2T(n/4) +; T(n) = 3T(n/2) +nlog2n;

T(n) = 2T(n/2) +n/log2n;  T(n) = T(n-1) +n;

T(n) = T() +1 T(n) = T(n-1) +1/n;

T(n) = T(n-1) +log2n;  T(n) = T() +n;

T(n) = T(n/2) +Q cautare binara

  1. Alte probleme

a)      Problema steagului olandez (bile de 3 culori, amestecate la inceput, trebuie puse compact pe culori distincte, parcurgand o singura data secventa de bile)

b)      Sa se arate ca parcurgand o singura dat o secventa de n elemente se poate determina atat valoarea minima cat si valoarea maxima efectuand cel mult 3*[n/2] +C comparatii unde C este o constanta ce trebuie determinata.

c)      Algoritmi pe o tabla de operatii (asociativitate, comutativitate, elemente neutru, element invers ) cu determinarea complexitatii, se poate da ca si tema de casa;

d)      Pentru urmatoarea secventa de pseudocod sa se numere cate atribuiri se fac:

Pentru i ← n-2,-2,-1 executa // n intreg

Pentru j ← i+3,n executa

@ o(una) atribuire

SfPentru

SfPentru

Rezolvare posibila:

Nr(atribuiri) =

Doar pentru n ≥1. Pentru valorile lui n <1 avem nr(atribuiri)=0.

Altfel: vom incerca sa dam valori succesive lui n apoi sa vedem ce multimi parcurg indicii i si j;

Pentru inceput observam ca trebuie ca n-2≥-2, pentru ca sa se intre in primul ciclu deci n≥0. Concluzie pentru valorile lui n I nr(atribuiri)=0.

In tabelul urmator vom da valorile indicilor i si j

n

i

j

atribuiri

iI jIÆ

iI

i=-1 avem jIÆ

i=-2  avem jI

iI

i=0  avem jIÆ

i=-1  avem jI

i=-2  avem jI

total 3

iI

i=1  avem jIÆ

i=0 avem jI

i=-1  avem jI

i=-2  avem jI

total 6

Concluzia nr(atribuiri)=n(n+1)/2, pentru n ≥1.

  1. Se executa pe doua calculatoare 2 programe de sortare pentru a sorta 1 milion (106) de numere.

Primul calculator este un SuperComputer(notat Super) care executa 108 operatii pe secunda, iar al 2-lea este un PC care executa 106 operatii pe secunda.

Pe Super s-a codificat un program de sortare care are T(n) = 2n2, iar pe PC s-a impementat un program cu T(n) = 50nlog2n. Sa vedem ce nevoie de timp are fiecare computer:

Pentru Super:

Pentru PC:

  1. Despre Heap-ul binar.

ReMakeHeap - pentru intretinerea proprietatii de heap;

BuildHeap - genereaza un heap dintr-un vector neordonat, furnizat la intrare. 

HeapSort  - ordoneaza un vector in spatiul alocat acestuia.

Reconstituirea proprietatii de Heap (ReMakeHeap)

-se presupune ca la apel pentru nodul i, subarborii cu radacina STANGA(i) si DREAPTA(i) sunt

heap-uri.

-sarcina procedurii este de a ,"scufunda" in HEAP pe A[i] astfel incat subarborele, care are

radacina valorii A[i] sa devina un heap.

Procedure ReMakeHeap(A,i)

l ← STANGA(i) // l=2i

r ← DREAPTA(i) // l=2i+1

Daca l ≤ DimHeap[A]si A[l] > A[i]

Atunci maxim ← l

Altfel maxim ← i

SfDaca

Daca r ≤ DimHeap[A] si A[r] > A[maxim]

Atunci maxim ← r

SfDaca

Daca maxim ≠ i

Atunci

A[i] ↔ A[maxim]

ReMakeHeap (A,maxim)

SfDaca

SfProcedura.

Complexitate

Dimensiunea unui subarbore binar este cel mult 2n/3, pentru un arbore binar de n noduri.

Deci T(n)≤T(2n∕3)+Θ(1) ══> T(n)=0(log2n)

Suntem in cazul 2 al teoremei master:

a=1, b=3/2, f(n) = Θ(1)

══> T(n)=0(log2n) sau pentru inaltimea h avem O(h).

Dam in continuare procedura de construire a unui heap dintr-un vector:

Procedure BuildHeap(A)

DimHeap[A] ← Lungime[A]

Pentru i ← ,1,-1 executa

ReMakeHeap(A,i)

SfPentru

SfProcedura.

Complexitate

Pentru o inaltime h oarecare (interioara, inaltimea arborelui fiind log2n) a unui arbore binar

aproape complet de n noduri, exista cel mult noduri de inaltime h.

Avem

deoarece:

, aplicand formula , pentru x=1/2.

Dam in continuare procedura de sortare a unui heap:

Procedure HeapSort(A)

BuildHeap(A)

Pentru i ← ,2,-1 executa

A[1] ↔ A[i]

DimHeap[A] ← DimHeap[A]-1

ReMakeHeap(A,1)

SfPentru

SfProcedura.

Complexitatea este evidenta: T(n) = O(n) +O(nlog2n) = O(nlog2n)

Aplicatii la vector (array)

TAD Polinom. Sa se scrie doi algoritmi pt. calculul valoarea unui polinom intr-un punct .si pt suma polinoamelor. Se cere ca unul dintre algoritmi sa aiba complexitatea de ordinul Q(n), iar celalalt - de ordinul: Q(n2).

Discutie despre DS folosita:

Pt pol de gr. N folosesc un array de n+1 elem

Sau folosesc un vector dynamic cu elemente (grad,valoare)

10. Propunere de tema. Se considera problema de a determina daca un sir arbitrar de numere contine cel putin 2 termeni egali. Aratati ca exista un algoritm care rezolva aceasta problema in Q(n log(n)).


Document Info


Accesari: 4017
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )