Escolar Documentos
Profissional Documentos
Cultura Documentos
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 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.
(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
550 410 64
360 90 350
329 22 250
450 295 150
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