REVISÃO PROVA 2
CONCEITOS BÁSICOS
Organiza um conjunto de acordo com uma estrutura hierárquica.
Contém elementos que são chamados de nós O “pai de todos” é a raiz – 1º. da hierarquia O conteúdo de um nó pode ser de qualquer tipo que se deseje representar
As árvores da computação têm a curiosa tendência de crescer para baixo…
CONCEITOS BÁSICOS
Um único nó é uma árvore. Este nó é raiz da árvore.
Suponha que n é um nó e T1, T2, ...,Tk sejam árvores com raízes n1,n2,...,nk , respectivamente.
Podemos construir uma nova árvore tornando n a raiz e T1, T2, ...., Tk sejam subárvores da raiz. Nós n1, n2, ..., nk são chamados filhos do nó n.
ÁRVORE BINÁRIA
Uma árvore binária é um conjunto finito de elementos que está vazio ou é particionado em três subconjuntos disjuntos.
O primeiro subconjunto contém um único elemento, chamado raiz da árvore. Os outros dois subconjuntos são em si mesmos árvores binárias, chamadas subárvores esquerda e direita da árvore original.
Uma subárvore esquerda ou direita pode estar vazia.
ÁRVORE BINÁRIA DE BUSCA
Uma árvore binária de pesquisa é uma
árvore binária em que cada nó contém
uma chave de pesquisa e apresenta a
seguinte propriedade:
Cada nó da subárvore à esquerda tem
valor da chave menor que a chave do
nó;
Cada nó da subárvore à direita tem valor
da chave maior que a chave do nó.
EXEMPLO
Árvore Binária
– Cada nó tem no máximo dois filhos.
• Obs: a árvore ao lado não impõe nenhuma ordenação em seus nodos.
CAMINHO
Um caminho de ni a nk , onde ni é antecedente a nk , é a sequência de nós para se chegar de ni a nk .
Se ni é antecedente a nk , nk é descendente de ni.
OUTROS CONCEITOS
Nó que não tem antecedente: raiz;
Nós que não tem descendentes são chamados de folhas. (Os outros são os nós internos)
A altura de um nó na árvore é o caminho de maior comprimento que se pode fazer deste nó a uma folha.
A altura da árvore é a altura de sua raiz.
A profundidade de um nó é o comprimento da raiz até o nó (só existe um caminho)
PROCEDIMENTO DE INSERÇÃO NA ÁRVORE
Algoritmo de inserção de uma chave, key , em uma árvore: se a árvore é vazia: criar uma nova árvore com a nova chave;
se a chave de busca é menor que a do nó: insere na subárvore da esquerda; se a chave de busca é maior que a do nó: insere na subárvore da direita.
REMOÇÃO EM ÁRVORE
REMOÇÃO DE NÓ COM UM FILHO. REMOÇÃO DE NÓ COM DOIS FILHOSRETIRADA DE UM ELEMENTO DA ÁRVORE
Para retirar o registro com chave 5 da árvore basta trocá-lo pelo registro com chave 4 ou pelo registro com chave 6, e então retirar o nó que recebeu o registro com chave 5.
CAMINHAMENTO EM ÁRVORE
● Diversas formas de percorrer ou caminhar em uma árvore listando seus nós, as principais:
○ Pré-ordem (Pré-fixada) ○ Central (Infixada)
○ Pós-ordem (Pós-fixada)
● Para todas elas:
○ Se T é uma árvore nula, então a lista é nula.
CAMINHAMENTO EM ÁRVORE
● PRÉ-ORDEM: Caminha visitando primeiro o nó pai então segue para o nó filho da esquerda e só então visita o nó filho da direita.
● ORDEM CENTRAL: Caminha visitando primeiro os nós mais a esquerda, depois os nós pais e então os nós a direita
● PÓS-ORDEM: Caminha visitando primeiro os nós da esquerda, depois os nós da direita e então os nós pais.
SAÍDA: 1 2 4 7 A B 3 5 6 8 C 9
CAMINHAMENTO CENTRAL
CAMINHAMENTO PÓS-ORDEM
ÁRVORE BALANCEADA
Uma árvore é balanceada se a diferença da altura de suas subárvores de qualquer nó na árvore é no máximo um.
O nome AVL vem de seus criadores soviéticos Adelson Velsky e Landis.
INSERÇÃO E REMOÇÃO
A implementação é semelhante da árvore binária de busca.
➢ inserção deve reorganizar a árvore caso fique desbalanceada após inserir um novo elemento;
➢ remoção deve reorganizar a árvore caso fique desbalanceada após remover um item.
FATOR DE BALANCEAMENTO
Para o rebalanceamento da árvore é necessário calcular o Fator de
Balanceamento (FB) para verificar qual rotação deve ser efetuada
afim de rebalanceá-la.
FB = h da subárvore direita - h da subárvore esquerda
Se FB é negativo, as rotações são feitas à direita
Se FB é positivo, as rotações são feitas à esquerda
FATOR DE BALANCEAMENTO
Cada nó numa árvore binária balanceada (AVL) tem
balanceamento de 1, -1 ou 0.
Se o valor do balanceamento do nó for diferente de 1, -1 e 0.
Essa árvore não é balanceada (AVL).
NÓ DA AVL
typedef struct no_AVL AVL; struct no_AVL {
int info;
int fb; // fator de balanceamento AVL *esq;
AVL *dir; }NODEPTR;
ALGORITMO DE BALANCEAMENTO
Algoritmo de Rotação à direita:
void rot_dir(NODEPTR p){
NODEPTR q, temp;
q = p->esq;
temp = q->dir;
q->dir = p;
p->esq = temp;
p = q;
}
24ALGORITMO DE BALANCEAMENTO
Algoritmo de Rotação à esquerda:
void rot_esq(NODEPTR p){
NODEPTR q, temp;
q = p->dir;
temp = q->esq;
q->esq = p;
p->dir = temp;
p = q;
}
25ALGORITMO DE BALANCEAMENTO
Algoritmo de Rotação a direita
no caso 2:
void rot_esq_dir(NODEPTR p){
rot_esq(p->esq);
rot_dir(p);
}
26ALGORITMO DE BALANCEAMENTO
Algoritmo de Rotação à
esquerda no caso 2:
void rot_dir_esq(NODEPTR p){
rot_dir(p->dir);
rot_esq(p);
}
27BUBBLE SORT
CÓDIGO BUBBLE SORT
Fácil implementação, maior custo computacional. Ordem de complexidade O(n²). Pior caso O(n²).Caso Médio O(n²). Melhor Caso O(n).
SELECTION SORT
É um algoritmo de ordenação baseado em se passar sempre
o menor valor do vetor para a primeira posição (ou o maior
dependendo da ordem requerida), depois o de segundo
menor valor para a segunda posição, e assim é feito
sucessivamente com os (n-1) elementos restantes, até os
últimos dois elementos.
SELECTION SORT
31 Complexidade O(n²)
SELECTION SORT
INSERTION SORT
É um método parecido com o que se faz para ordenar
cartas, pois pega-se a segunda carta a ser ordenada e
compara com a primeira carta que foi pega, se a segunda
for menor que a primeira coloque a primeira no lugar da
segunda e a segunda no lugar da primeira e pegue a
próxima carta e compare com as anteriores e troque de
lugar com as que forem menor.
INSERTION SORT
34 Melhor Caso é O(n)
Caso médio é O(n²) Pior caso é O(n²)
INSERTION SORT
COMPARAÇÃO
36
Algoritmo Tempo
Melhor Médio Pior
Bubble sort O(n) O(n2) O(n2)
Insertion sort O(n) O(n2) O(n2)
MERGE SORT
Sua ideia básica consiste em Dividir (o problema em vários sub-problemas e resolver esses sub-problemas através da recursividade) e Conquistar (após todos os sub-problemas terem sido resolvidos ocorre a conquista que é a união das resoluções dos sub-problemas). Como o algoritmo
Merge Sort usa a recursividade, há um alto consumo de memória e tempo de execução, tornando esta
técnica não muito eficiente em alguns problemas .
Os três passos úteis dos algoritmos dividir-para-conquistar, ou divide and conquer, que se aplicam ao
merge sort são:
1. Dividir: Dividir os dados em subsequências pequenas;
2. Conquistar: Classificar as metades recursivamente aplicando o merge sort; e 3. Combinar: Juntar as metades em um único conjunto já classificado.
COMPLEXIDADE
38
Melhor Médio Pior
MERGE SORT
MERGE SORT EXERCÍCIO EXEMPLO
MERGE SORT PASSO A PASSO
MERGE SORT
QUICK SORT
O Quicksort adota a estratégia de divisão e
conquista. A estratégia 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
QUICK SORT
É o algoritmo mais eficiente que existe para uma grande variedade de
situações. O algoritmo é recursivo, o que demanda uma pequena
quantidade de memória adicional. Pior caso realiza O(n²) operações.
O principal cuidado a ser tomado é com relação à escolha do pivô.
A escolha do elemento do meio do arranjo melhora o desempenho quando o arquivo está total ou parcialmente ordenado .
O pior caso tem uma probabilidade muito pequena de ocorrer quando os elementos forem aleatórios.
QUICK SORT
Os passos são:
1. Escolha um elemento da lista, denominado pivô;
2. 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 posição final e haverá duas sublistas não
ordenadas. Essa operação é denominada partição;
3. Recursivamente ordene a sublista dos elementos menores e a
sublista dos elementos maiores;
COMPLEXIDADE
48
Melhor Médio Pior
QUICK SORT
COMPARAÇÃO
50
Algoritmo Tempo
Melhor Médio Pior
Merge sort O(n*log(n)) O(n*log(n)) O(n*log(n))
Quick sort O(n*log(n)) O(n*log(n)) O(n2)
Bubble sort O(n) O(n2) O(n2)
Insertion sort O(n) O(n2) O(n2)