Bit (Binary Digit) é a menor unidade de armazenamento de informação dentro do computador; Byte é a união de 8 bits capaz de representar 256 informações diferentes; Tipos Primitivos são implementados nas linguagens de programação (inteiro, real, caracter, lógico e ponteiro); Tipos Estruturados: estruturas criadas a partir de tipos primitivos; Tipos Abstratos de Dados (TAD): estruturas heterogêneas criadas a partir dos tipos anteriores
É um TAD que representa uma coleção de elementos cuja característica é a posição relativa entre seus elementos. Sabemos onde começa e termina a lista; Não existe nenhum elemento antes do primeiro e nem depois do último; Existe uma ordem entre os elementos, assim sabemos que o 5º elemento está entre o 4º e o 6º. Alocação Estática Alocação Sequencial Alocação Dinâmica Alocação Encadeada
Tipo especial de Lista Linear onde as inserções e remoções são feitas pela mesma extremidade TOPO Estrutura do tipo LIFO (Last In, First Out); Podemos implementar com alocação estática-sequencial ou dinâmica encadeada; Push: insere um elemento no topo da pilha Pop: remove um elemento do topo da pilha Top: acessa o elemento que está no topo da pilha
Usada em situações onde a ordem de entrada é o contrário da ordem de saída (LIFO) Controle de Retorno de Subrotinas: Rotina B Rotina C S.O. Rotina A Rotina C Avaliação de Expressões (Notação Polonesa Reversa):
Tipos de Lista Linear onde as inserções são feitas em uma extremidade (fim) e as remoções na outra (começo); Podem ser implementadas com alocação estática-sequencial ou dinâmica encadeada; Ordem de entrada é a mesma ordem de saída (FIFO First-In/First- Out). Métodos principais: Enqueue insere no fim da Fila Dequeue remove do início da Fila Aplicação de Filas Simulação de Atendimentos (FIFO) Colorir Regiões Gráficas
Estrutura auto-ajustável de modo que a cada inserção ou remoção a estrutura continua ordenada; Como a inserção e remoção no meio da estrutura é inevitável, a implementação com alocação estática sequencial é inviável, melhor realizada com alocação dinâmica encadeada; Aplicações de Listas Ordenadas Sistemas onde os elementos precisam estar sempre ordenados Variáveis Polinômio 3x 5 + 2x² - 5x + 1
Recursividade: Um algoritmo que para resolver um problema divide-o em subproblemas mais simples, cujas soluções requerem a aplicação dele mesmo, é chamado recursivo. Árvores: Conjunto finito de n > = 0 nós. Se n = 0, temos uma árvore nula. Se n > 0, temos uma árvore com as seguintes características: 1. Existe um nó especial chamado raiz 2. Os demais são particionados em T 1, T 2,..., T k estruturas disjuntas de árvores (garantindo que um nó não aparecerá em mais de uma subárvore); 3. As estruturas T 1, T 2,..., T k denominam-se árvores.
Elementos menores que a raiz devem ser armazenados na subárvore esquerda e os outros na subárvore direita Veja a inserção dos elementos h, a, b, c, i e j Temos 3 possibilidades para remoção de nós, quando o nó a ser removida não tem filhos, quando tem apenas um e quando tem 2 filhos. A) Nó sem filhos: Nesse caso, podemos apenas excluir o nó; B) Nó tem apenas um filho: Nesse caso, o seu único filho irá substituir o nó que foi excluído; C) Nó tem 2 filhos: Nesse caso, temos que eleger algum descendente que irá substituir o nó a ser excluído. Apesar de os candidatos poderem ser o maior valor da subárvore esquerda ou o menor da subárvore direita, usaremos sempre o maior da esquerda.
A grande vantagem das árvores de busca binária é a rapidez na busca, porém, isso é perdido se não estiverem balanceadas; Árvore AVL possui balanceamento dinâmico onde a cada inserção ou remoção a árvore é rebalanceada usando rotações: a) RSE (Rotação Simples para a Esquerda) Seqüência: 1-2-3 b) RSD (Rotação Simples para a Direita) Seqüência: 3-2-1 c) RDE (Rotação Dupla para a Esquerda) Seqüência: 1-3-2 d) RDD (Rotação Dupla para a Direita) Seqüência: 3-1-2
Para acessar memória secundária, algoritmos como ABB e AVL não são tão eficientes pois a cada acesso só trazem um elemento; Árvores M-vias ou multivias implementam agrupamento de chaves em um mesmo nó ou página; Uma árvore B é uma árvore M-vias constantemente balanceada proposta por Bayer and McGreight em1972; Utilizada para criação de índices de arquivos de dados Ordem da árvore B (t): define a quantidade de chaves dentro de um nó Número mínimo de chaves (exceto raiz): t-1 Número máximo de chaves: 2t-1
Os elementos são inseridos, removidos ou pesquisados em uma posição determinada por uma função de hashing (Hash Code), que conforme uma chave de entrada, determina qual a posição do elemento deve seguir. Quando uma função de hashing gera o mesmo Hash Code para duas ou mais chaves distintas, temos uma colisão. Podemos tratar colisões de 2 formas: Closed Address Hashing (endereçamento fechado) Também chamado de Hashing encadeado, onde cada entrada da tabela é uma lista encadeada, onde a cada colisão os elementos são inseridos dinamicamente Open Address Hashing (endereçamento aberto) Todas as chaves são armazenadas dentro da tabela Hash. Quando há uma colisão, há um processo de rehashing para calcular um novo Hash Code para o elemento. Podemos usar 2 técnicas Rehashing por linear probing Rehashing por double hashing
Estrutura de Dados baseada em nós onde cada nó (vértice) pode se conectar a qualquer outro (até à ele mesmo) através de arestas. Em um AFD, para cada símbolo de entrada (ação) só existe uma transição de estado possível Exemplo: Autômato que reconhece a linguagem de números binários com quantidade ímpar de 1s. M = (, Q,, qo, F) Q = { qo, q1 }, = { 0, 1 }, F = { q1 } Forma Tabular : Forma Gráfica : 0 1 q o q 1 q o q 1 q 1 q o q q 1 o 0 1 0
Responsável pelo Conteúdo: Prof. Ms. Amilton Souza Martha www.cruzeirodosulvirtual.com.br Campus Liberdade R. Galvão Bueno, 868 01506-000 São Paulo SP Brasil Tel: (55 11) 3385-3000