Você está na página 1de 15

\ApostilaColaborativaparaaEE1

Explicaoeexerccios

ndice
Estrutura de Dados
BST
AVL
Rotaes...
Heap (Heaps dont lie)
Hashing
Algoritmos de ordenao
Estabilidade de algoritmo de ordenao
Questo de Ordem
Heapsort
Mergesort
Quicksort
Exerccios
Links e pdfs recomendados

EstruturadeDados

BST
BST (Binary Search Tree) uma estrutura de dados representada por uma arvore (ooooh), em que os valores
menores so adicionados a esquerda e maiores ou igual (depende da implementao) a direita do n.

AVL
uma BST, s que temos um avano: ela balanceada, o que significa que a
diferena entreaalturadonadireitacomonaesquerdanomaiorque1.
Isso tem como objetivo diminuir a complexidade, que numa rvore BST O(n)
(no pior caso a rvore uma lista).NaAVL,O(logN).Paradeixarmosarvore
balanceada, ns devemos aplicar rotaes(simplesoudupla)apsasinseres,
ouremoes.

Algunsnomes...
- N critico: primeiro n desbalanceado, de baixo pra cima, a partir de
ondefoitemporariamenteinseridoumvalor.
- Fator de balanceamento (usando padro deKatia):altura(maiorcaminhodonatumafolha,que
umnsemfilhos)dadireitamenosalturadaesquerda.

Rotaes...

Heap(Heapsdontlie)
uma estrutura de dados voltada para os casos onde precisamos ter acesso constante ao menor
(min-heap) ou maior (max-heap) valor de uma coleo, isto , uma fila de prioridade. A inseroocorreda
esquerda para da direita, s avana a insero s ocorre no nvel (n+1) apenas quando o nvel n estiver
completo.Remooemheapaconteceapenasnaraiz.

- Pai:(index-1)/2
- Filhoaesquerda:(2*index)+1
- Filhoadireita:(2*index)+2




Hashing
uma estruturadedadosqueresolveoproblemadeacessodoArray:umabuscanoarraytemcomplexidade
O(n), j que no pior caso todo o array ser percorrido. Em hash, constante na maioria dos casos ( O(1)).
Mas como se faz isso? criada uma funo em que transforma a chave em um ndice do array, a quando
precisarmos acessar tal chave s a gente rodar a funo que saberemos onde o item est. S que temos
um novo problema, as vezes chaves diferentes resultam no mesmo ndice. Para solucionarissotemosvrios
mtodos,comoOpenAdressing(rehashing)ouClosedAdressing(lista).

Uma forma de melhorar a estrutura de Hash escolhendo uma funo que distribua as chaves de forma
homognea pelo array interno. Uma m funo de hashing, resulta em clustering, isto , muitas chaves
sendomandadasparaomesmolugarecongestionandooarrayemalgumasdesuaspartes.

ClosedAdressing:aformamaissimplesjquesecriaumalistaligadadeNodesdeinteiros.Adesvantagem
que essa lista pode ficar muito grande devido as colises da o jeito call RESTART (banda). (Eu no me
responsabilizo pelos danos das piadas de chiu) (mandaeleirdormirplosh)(azoeiraestsemprel,mesmo
queoculta)
OpenAdressing(rehashing):
Podeserde2tipos:
1- Linear Probing: O ndice da chave, resultante de uma funo anterior, aplicado numa
nova funo de modo que varre o array at encontrar a prxima posio livre. Essanovafunodaforma
rehash(i)=(i+1)modh;ondei==indicedachaveeh==tamanhodoarray.
2- Double Hashing: Precisa-se de uma funo incremento que retorne um novo ndice para a
chave quefoicolidida(d=HashIncre(K)),onded==novoindice e K==Chave.Depoisdesseprocesso,a
funo rehash criada a partir do Double Hashing fica: rehash(j, d) = (j + d) mod h. Onde j == indice da
coliso,d==novoindice,h==tamanhodoarray.


Algoritmosdeordenao

Estabilidadedealgoritmodeordenao

Um algoritmo de ordenao estvel (= stable) se no altera a posio relativa de elementos com mesmo
valor. Por exemplo, se o vetor v [0..n-1] tiver dois elementos iguais a 222, primeiro um azul e depois um
vermelho,umalgoritmodeordenaoestvelmantmo222azulantesdovermelho.






Algunsalgoritmosdeordenaoestveis:Bubblesort,Cocktailsort,Insertionsort,Mergesort,Bucketsort.

Algunsalgoritmosdeordenaonoestvel:QuickSort,HeapSort

QuestodeOrdem
- Ordemtotal:
- Ordemparcial:nemtodos

Exemplo:
Heap:ordemparcial,poisapropriedade(desermaioroumenor)ssemantementreopaieosfilhos(ex:
nummax-heap,osfilhossomenoresqueospais,masapropriedadenosemantementredoisfilhos,logo
nosocomparveis)
BST:Ordemtotal



Heapsort
Comeando aqui..

Jeito mais tosco de fazer: pegue um MinHeap H, crie um array A do tamanho H.heapSize, percorra esse array
da posio 0 at H.heapSize - 1, sempre preechendo A[i] com o resultado de H.remove()

Para fazer com uma MaxHeap s preencher o array de H.heapSize at 0, ao invs de 0 at H.heapSize.




Mergesort

O merge sort, ou ordenao por mistura, um exemplo de algoritmo de ordenao do tipo
dividir-para-conquistar.
Sua ideia bsica consiste em Dividir(o problema em vrios sub-problemas e resolver esses sub-problemas
atravs da recursividade) e Conquistar(aps todos os sub-problemas terem sido resolvidos ocorre a conquista
que a unio das resolues dos sub-problemas).Como o algoritmo do Merge Sort usa a recursividade (no
necessariamente: lembre-se sempre, todo algoritmo recursivo pode ser implementado de forma interativa) em
alguns problemas esta tcnica no muito eficiente devido ao alto consumo de memria e tempo de
execuo.

Os trs passos teis dos algoritmos dividir-para-conquistar, ou divide and conquer, que se aplicam ao merge
sort so:
-Dividir: Dividir os dados em subsequncias pequenas;
-Conquistar: Classificar as duas metades recursivamente aplicando o merge sort;
-Combinar: Juntar as duas metades em um nico conjunto j classificado.
Quicksort

O Quicksort um algoritmo de ordenao por comparao no-estvel.

O Quicksort adota a estratgia de diviso e conquista. A estratgia consiste em rearranjar as chaves de modo
que as chaves "menores" precedam as chaves "maiores". Em seguida o Quicksort ordena as duas sublistas
de chaves menores e maiores recursivamente at que a lista completa se encontre ordenada. Os 3 passos
so:
-Escolha um elemento da lista, denominado piv;
-Rearranje a lista de forma que todos os elementos anteriores ao piv sejam menores que ele, e todos os
elementos posteriores ao piv sejam maiores que ele. Ao fim do processo o piv estar em sua posio final e
haver duas sublistas no ordenadas. Essa operao denominada partio;
-Recursivamente ordene a sublista dos elementos menores e a sublista dos elementos maiores;

A base da recurso so as listas de tamanho zero ou um, que esto sempre ordenadas. O processo finito,
pois a cada iterao pelo menos um elemento posto em sua posio final e no ser mais manipulado na
iterao seguinte.

Exerccios

(EE1-2008.1)(3,0)Questo1:Sejamf(n)eg(n)funesassintoticamentecrescentes.Paracadaumadas
afirmaesabaixo,justifiqueformalmente(usandodefinies,lgebraeimplicaes)seforverdade,ou
dumcontra-exemploseforfalso.

a)f(n)=O(g(n))=>g(n)=O(f(n))

a) Falso.Contra-exemplo:sejaf(n)=neg(n)=n.

b)f(n)=(f(n/2))

b) Anotaoexprimeofatodequeduasfunespossuemamesmaordemde
grandezaassinttica.Comonen/2possuemamesmaordemdegrandezaentoaafirmativaest
correta
Falso,contra-exemplo:sejaf(n)=2^n.NoexistemCpositivoen0>1taisqueparatodon>=n0
2^n<=C*2^(n/2)sejaverdade.Alguemsabeprovar?Contra-prova:http://bit.ly/1oQ2hgN
huehuehue



(EE1 - 2003.2) Questo 1: Desenhe a seqncia de rvores obtidas pela insero de cada uma das chaves
abaixo nesta ordem numa rvore AVL originalmente vazia. Caso uma insero venha a quebrar a
propriedade AVL da rvore, indique claramente qual a rotao apropriada para a situao, e mostre a
rvoreresultanteapsarotao.CHAVES:10,80,20,95,40,60,70,55,65,50.
http://s17.postimg.org/uvajmhilp/avl001.jpg
http://s17.postimg.org/brh8655rh/avl002.jpg
http://s17.postimg.org/tvk8qs3fx/avl003.jpg
http://s17.postimg.org/pv8i0snl9/avl004.jpg

(EE1 - 2003.2) Questo 2: Desenhe a rvore original e a rvore obtida aps cada execuo do
procedimento Heapify no processo de transformaodeumarraydesordenadocontendooriginalmenteas
chaves a seguir (nesta ordem) em um heap onde cada n contm um valor maior ou igual ao dos
descendentes:170,289,110,553,328,140,403,580,764,625,800.

max-heap
Filhoesq:2*index+1
filhodir:2*index+2
12345 67 891011\
0 1 2 3 4 5 6 7 8 9 10

170 289 110 553 328 140 403 580 764 625 800

800 625 328

764 580 553

403 140 110

800 403 764 625 289

800 764 403 580 625 170

800 764 403 580 625 140 110 170 553 289 328


(algumconfirma?eufizmasnoseiseissomesmo~imspc)
??noentendir,prafazerpraheapouheapsort?
eissojaresposta(emrvore)?hehe,ntinhavistoocomeodaquesto,noento.
aindanoentendirxD
heapify~~formarheap!=heapsort

(EE1-2003.1)Questo3:
a)Expliquedeformaclaraesucinta(6linhasnomximocada):
-OqueumaTabelaHash,
-Oqueumacoliso,e
-Asmaneirasdetrataraocorrnciadeumacoliso.

[irpraparteterica]

b) Desenhe a seqncia de configuraes da tabela Hash obtida numa tabela de tamanho7,cuja
funo hash dada por H(x) = xmod7,ecolisessoresolvidaspordoublehashing, comasegunda
funo D(x) = (x mod 3) + 1, quandoasseguinteschavessoinseridasnestaordemapartirdatabela
vazia: 42, 56, 63, 70. Mostreaconfiguraoapscadaincluso,indicandoclaramenteondeocorreu
coliso.

0 1 2 3 4 5 6
42

COLISO 56

COLISO 63 56

COLISO 63 70 56

42 63 70 56

tacertoisso? querosabertbm(~imspc)tbmquerosaber(le~ess2)
//nessedoublehash,nonecessriousarorehash?pqeutavavendonoslideaquidekatiaelausa
Eu
///aaaah eu fiz aqui com o rehashednomsmqatuaxD,penseiqvcnusasse,thx.(massasaberquedeu
certoento^^~imspc)


Algum sabe de onde vem esse y do double hash? x. ta errado na
questao.valeu:)


(EE1 -2003.1)Questo4:Mostreasconfiguraesdoarrayapscadaretornodeumachamadarecursiva
durante a execuo do algoritmo Quicksort apresentado em sala, com a entrada: 50, 70, 90, 140, 60, 20,
120,10,130,80,40,30,100.

20 30 40 10 50 60 120 140 130 80 90 70 100

10 20 40 30 50 60 120 140 130 80 90 70 100

10 20 30 40 50 60 120 140 130 80 90 70 100

10 20 30 40 50 60 90 100 70 80 120 130 140

10 20 30 40 50 60 70 80 90 100 120 130 140

Nessa questo cadalinhadatabelaquandofoifeitooquicksorte opivficounaposiojaordenada


dele Por exemplo: na linha 1 foi quando o piv (50)ficounoseulugarfinal,nalinha2foiopiv(20),na
linha3foio(10),nalinha4foio(120)enalinha5foio(90).Entendeu\?
Sim,valeu!=))SlidedeKatiasobreordenao
:D
(EE1 - 2002.1) Questo 3: Explique como funciona uma tabela Hash e d um exemplo desenhando a
seqncia de tabelas Hash obtidas numa tabela de tamanho 13, cuja funo hash dada por H(chave) =
chave mod 13,ecolisessoresolvidasporlinearprobingcrescente,pelainserodaschaves:52,78,48,61,
81,120,79,121,92.

(EE1 - 2002.1) Questo 1: Desenhe a seqncia de rvoresAVL pelainserodasseguinteschavesnesta


ordemnumarvoreoriginalmentevazia:134,296,175,151,168,156,170,169,154,164,160.

(EE1 - 2002.1) Questo 2: Desenhe a seqncia de configuraes do array obtidas aps a execuo de
HEAPIFY, durante a construo bottom-up de um heap onde o maior elemento est na raiz, a partir de um
array original com as chaves na seguinte ordem: 120, 180, 40, 150, 22, 90, 64, 295, 450, 329, 250, 360, 350,
410,550,490,533.

max-heap
pai:(index-1)/2
filhoaesq:index*2+1
filhoadir:index*2+2
sesquematizeiosindicesdaheapabaixoparafacilitaravisualizaodoheapify


substituiesemnegrito
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

120 180 40 150 22 90 64 295 450 329 250 360 350 410 550 490 533

533 490 295

550 410 64

360 90 350

329 22 250
450 295 150

550 360 410 40 64

450 295 329 490 150 180 295

550 410 360 120 40 64

550 450 410 295 329 360 120 490 150 22 250 90 350 40 64 180 295





(MP1-2012.2)


OalgoritmoApodetermelhordesempenhoemoutroscasos,eoalgoritmoBpodeterpiordesempenhoem
outroscasos.Portanto,nopossvelafirmarqualdosdoisomaisrpidocombasenessasinformaes.

ALGORITMOImprime-Alturas-PosOrdem(root)
ENTRADA:root,umponteiroparaaraizdeumarvorebinria.
SADA:aalturadarvorequetemrootcomoraizeasalturasimpressasderootedosnsdesuas
sub-rvores.
incio
seroot=NILento
devolva0
seno
alturaEsq<-Imprime-Alturas-PosOrdem(root.left)
alturaDir<-Imprime-Alturas-PosOrdem(root.right)
altura<-1+max(alturaEsq,alturaDir)
imprima(altura)
devolvaaltura
fim-se
fim

2012.2

CheckBST(root)
ENTRADA:root.
SADA:umatripla(bst,min,max).
incio
seroot=NILento
devolva(true,+,-)
seno
(bstEsq,minEsq,maxEsq)<-CheckBST(root.left)
(bstDir,minDir,maxDir)<-CheckBST(root.right)
bst<-bstEsq&&bstDir&&root.val>=maxEsq&&root.val<minDir
min<-min(minEsq,minDir,root.val)
max<-max(maxEsq,maxDir,root.val)
devolva(bst,min,max)
fim-se
fim
Heap

Contra-exemplo:
Arraydeentrada(elementoxtalquex(1)idnticoax(2)):
x(1) x(2)
Sadaapsheapsort:
x(2) x(1)

0 1 2 3 4 5 6 7 8 9

13

13 44

21 13 44

21 13 COLISO 64

21 13 44 64 58

20 21 13 44 64 58

20 21 13 44 64 COLISO 38

20 COLISO 81 13 44 64 58 38

20 21 81 13 44 64 98 58 38

(EE1-2009.2)Questo3:paracadaumdositens,expliqueclaramente,usandonomximoonumerode
linhasindicadasemparnteses.
a) Limiteinferiordecomputao(5linhas)
b) Modelodervorededeciso(5linhas,eladeu?)

(EE1-2009.2)Questo2:
ximode5linhasparacadaitem.
a) 10n=O(nlogn)

10n<=C*n*logn
10n/n*logn<=C
10/logn<=C
n0=2eC=10,issosempreverdade.


1000
b) logn= (log n )

logn<=C*logn^(1000)
logn<=C*1000*logn
1<=c*1000
n0=1eC=1,issosempreverdade.
logn>=C*logn^(1000)
logn>=C*1000*logn
1>=c*1000
n0=1eC=1/1000,issosempreverdade.
Comologn=O(logn^(1000))elogn=(logn^(1000)),seguequelogn=(logn^(1000))

c) n3 = (64 log n)

n>=C*64logn
ParaC=1/64etodon>=2issoverdade.Portanton=(64logn).

Linksepdfsrecomendados
[PDF]bemsucintocomtodooassuntomenoshasheheapsort
[PDF]decomplexidade,disponibilizadonogrupo
[YOUTUBE]ExplicaoAVL,rotaes
DEMONSTRAOdeavlemao
ExplicaoComplexidadeAssintotica-ime-sp
Exerciciosresolvidosdecomplexidadeassintotica

Você também pode gostar