Sei sulla pagina 1di 9

Estrutura de Dados _______________________________________

Algoritmos de Busca Busca linear (listas) o Examina cada elemento da estrutura seqencialmente
o o

Complexidade: O(n) Pode ser usado diretamente em uma lista no-processada (desordenada)

o Muito lento para grandes quantidades de dados, mas aceitvel para listas pequenas e que mudam constantemente

Implementao (iterativa):
private int linearSearch(int a[], int valueToFind) { for (int i=0; i<a.length; i++) { if (valueToFind == a[i]) { return i; } } return -1; }

Busca binria (listas) o Realiza sucessivas divises do espao de busca, comparando o elemento buscado com o elemento no meio da subdiviso (diviso e conquista)
o

Complexidade: O(log n)

o Parte do pressuposto que a lista de acesso aleatrio e est ordenada o timo desempenho comparado busca linear para grandes quantidades de dados. Tem a desvantagem de requerer uma ordenao da lista aps cada alterao na mesma

Implementao (recursiva):
BinarySearch(A[0..N-1], value, low, high) { if (high < low) return -1 // not found mid = (low + high) / 2 if (A[mid] > value) return BinarySearch(A, value, low, mid-1) else if (A[mid] < value) return BinarySearch(A, value, mid+1, high) else return mid // found }

Busca em rvores
o

Depth-first (busca em profundidade)

Vai at uma determinada folha da rvore e faz backtracking

Breadth-First (busca em largura) Faz a procura por nveis. Comea na raiz e pesquisa todos os ns adjacentes no mesmo nvel e, se no achar o elemento procurado, desce para o prximo nvel e repete o processo

Algoritmos de Ordenao Simples O(n2)

Bubble Sort
o

A idia percorrer a lista diversas vezes, fazendo o maior elemento deslocar-se para o final da mesma aps sucessivas comparaes

o Compara v[i] com v[i+1]. Se estiverem desordenados, h um swap (troca). Isso repetido para todos os elementos da lista dois-a-dois
for(i = 0; i < v.length-1; i++){ for(j = 0; j < v.length-1;j++){ if(v[j] > v[j+1]){ swap(v[j],v[j+1]); } } }

Selection Sort o O algoritmo funciona da seguinte forma: Ache o valor mnimo da lista Troque-o pelo elemento na primeira posio

Repita esses passos para o restante da lista (comeando de ndice+1)

public int int for

void SelectionSort(int[] v) { index_min; aux; (int i=0; i<v.length; i++) { index_min = i; for (int j=i+1; j<v.length; j++) { if (v[j]<v[index_min]) { index_min=j; } if (index_min!=i) { aux = v[index_min]; v[index_min] = v[i]; v[i] = aux; } }

} }

Insertion Sort
o

Em termos gerais, percorre um vetor de elementos da esquerda para a direita e medida que avana vai deixando os elementos mais esquerda ordenados.

public static void insertionSort(int[] vetor) { for (int i = 0; i < vetor.length; i++) { int aux = vetor[i]; int j = i; while (j > 0 && vetor[j - 1] > aux) { vetor[j] = vetor[j - 1];

j = j - 1; } vetor[j] = aux; }

Algoritmos de Ordenao Avanados O(n log n)

Mergesort o Conceitualmente o mergesort funciona da seguinte forma:

Divida a lista no-ordenada em duas sublistas de aproximadamente metade do tamanho da original Divida cada uma das sublistas recursivamente at termos listas de tamanho 1, onde, ento, elas so retornadas Junte (merge) as duas sublistas em uma lista ordenada

function mergesort(m) var list left, right, result if length(m) 1 return m else var middle = length(m) / 2 for each x in m up to middle add x to left for each x in m after middle add x to right left = mergesort(left) right = mergesort(right) result = merge(left, right) return result

Quicksort o Os passos so: Escolha um elemento , chamado de piv, na lista

Rearranje a lista de forma que todos os elementos anteriores ao piv sejam menores ou iguais a ele, e todos os elementos posteriores ao piv sejam maiores ou iguais a ele. Ao fim do processo o piv estar em sua posio final. Essa operao denominada partio

Recursivamente ordene a sublista dos elementos menores e a sublista dos elementos maiores

Complexidade: O (n log n) , mas , no pior caso, pode chegar a O(n2)

o Tipicamente, o quicksort bem mais rpido do que os outros algoritmos que rodam a O(n log n), pois seu loop interno pode ser otimizado na maioria das arquiteturas

function quicksort(array) var list less, equal, greater if length(array) 1 return array select a pivot value pivot from array for each x in array if x < pivot then append x to less if x = pivot then append x to equal if x > pivot then append x to greater return concatenate(quicksort(less), equal, quicksort(greater))

Estrutura de dados: Array

Estrutura de dados linear, homognea (contm elementos do mesmo tipo) e armazenada contiguamente Elementos so acessados diretamente (acesso aleatrio) atravs de um ndice. Acesso rpido Tm tamanho fixo , no podem ser incrementados ou diminudos sem implicar complexos processos de cpia Estrutura de dados: Stack (Pilha) Estrutura do tipo Last in , First Out (LIFO)

Uma pilha uma lista linear na qual o primeiro elemento a entrar o ltimo elemento a sair. Ela possui apenas uma entrada, chamada de topo, a partir da qual os dados entram e saem dela muito usada em compiladores para parsing e como estrutura para armazenar variveis locais a um bloco de funo Operaes: push (empilhar) , pop (desempilhar) e peek (olhar o contedo do topo) Os itens em uma pilha podem ser empilhados e desempilhados em tempo constante de O(1), sendo desnecessrio qualquer tipo de comparao Estrutura de dados: Queue (Fila) Estrutura do tipo First in , First Out (FIFO) Semelhante pilha, s que neste caso s so permitidas inseres no final da fila e remoes no comeo. Esse tipo especfico de estrutura muito usado em aplicaes que requerem que os itens sejam acessados na ordem em que foram adicionados lista Outros tipos de filas:
o

Deque (double-ended queue): permite remover/inserir elementos em qualquer lado Priority Queue: mantm os elementos ordenados de acordo com algum critrio de prioridade

Estrutura de dados: Linked List (Lista Ligada) Estrutura de dados do tipo linear e dinmica composta por clulas que apontam para o prximo elemento da lista Uma lista ligada deve guardar as referncias para o seu primeiro e ltimo elementos (este, por sua vez, tem seu apontador voltado para uma referncia nula) Vantagem: A insero de um elemento no meio da lista no implica mover todos os elementos Desvantagem: o acesso sequencial, para eliminao ou insero de um elemento no meio da lista Variao: lista duplamente encadeada

Cada n tem referncia para ambos o anterior e o prximo elemento

o Melhora o desempenho de algumas operaes sobre a lista, como remover um elemento do final ou mostrar os elementos na ordem inversa

Estrutura de dados: Binary Trees (rvores Binrias) Uma rvore binria uma estrutura caracterizada por: o Ou no tem elemento algum (rvore vazia) o Ou tem um elemento distinto, denominado raiz, com dois apontadores para duas estruturas diferentes, denominadas sub-rvore esquerda e sub-rvore direita Cada elemento pode ter at, no mximo, dois filhos Em uma rvore binria de busca, todos os ns que so descendentes esquerda de um n A tm valores menores que A. Todos os ns que so descendentes direita de A tm valores maiores que A rvores binrias fazem buscas, inseres e delees em O(log n) Percorrer uma rvore significa visitar todos os seus ns em uma determinada ordem. Pode-se percorrer de 3 formas: o Pr ordem Visite a raiz Percorra a sub-rvore esquerda
o

Percorra a sub-rvore direita

Em ordem Percorra a sub-rvore esquerda Visite a raiz Percorra a sub-rvore direita

Ps ordem Percorra a sub-rvore esquerda

Percorra a sub-rvore direita Visite a raiz Uma rvore binria balanceada aquela em que a diferena de profundidade (nvel) entre todas as folhas (elementos sem filhos) de, no mximo, 1. O nmero mximo de folhas por nvel dado por 2i, onde i = nvel

Estrutura de dados: Hashtable (Tabela hash)

uma estrutura de dados especial, que associa chaves de pesquisa (hash) a valores Seu objetivo , a partir de uma chave simples, fazer uma busca rpida e obter o valor desejado baseada em arrays Funo de espalhamento: responsvel por gerar um ndice a partir de uma determinada chave. Idealmente, este ndice deve ser nico para evitar colises Para resolver colises pode-se usar:
o

Algoritmo de rehash, que calcula um novo hash baseado em uma determinada funo, caso haja coliso Encadeamento, onde encontra-se uma posio disponvel na tabela e indicamos que est posio a que deve ser buscada em seguida

Potrebbero piacerti anche