Lista de Figuras Figura 1–1: Módulo de Memória DRAM 26 Figura 1–2: Um Disco Magnético com Três Pratos e Seis Superfícies 28 Figura 1–3: Geometria de uma Superfície de Disco Magnético 29 Figura 1–4: Um Setor Geométrico e um Setor (de Trilha) 29 Figura 1–5: Acesso a Blocos num Disco Magnético 31 Figura 1–6: Configuração de um Disco SSD 34 Figura 1–7: Bastão de Memória USB (Pen drive) 34 Figura 1–8: Acesso à Memória Principal 36 Figura 1–9: Conexão de Dispositivos de Entrada e Saída 37 Figura 1–10: Leitura de um Setor: CPU Faz a Solicitação 39 Figura 1–11: Leitura de um Setor: Envio de Dados para Memória Principal 40 Figura 1–12: Leitura de um Setor: Envio de Sinal de Interrupção para CPU 41 Figura 1–13: Hierarquia de Memória 42 Figura 1–14: Memórias Cache 44 Figura 1–15: Caching numa Hierarquia de Memória 45 Figura 1–16: Lapso de Cache e Desalojamento de Bloco 47 Figura 1–17: Exemplo de Bom Uso de Memória Cache 51 Figura 1–18: Padrões de Referência para Acesso a Arrays 53 Figura 2–1: Escrita Formatada 77 Figura 2–2: Leitura Formatada 78 Figura 3–1: Analogia entre uma Tabela de Busca e um Arquivo de Escritório 166 Figura 3–2: Transposição e Movimentação para Início em Lista Indexada 177 Figura 3–3: Transposição e Movimentação para Início em Lista Encadeada 181 Figura 3–4: Exemplo de Lista com Salto 191 Figura 3–5: Busca numa Lista com Salto 191 Figura 3–6: Lista Simplesmente Encadeada com Cabeça 193 Figura 3–7: Iniciação de uma Lista com Salto 194 Figura 3–8: Inserção numa Lista Simplesmente Encadeada com Cabeça 196 Figura 3–9: Inserção numa Lista com Salto 1 199 Figura 3–10: Inserção numa Lista com Salto 2 200 Figura 3–11: Inserção numa Lista com Salto 3 200 Figura 3–12: Remoção numa Lista Simplesmente Encadeada com Cabeça 201 Figura 3–13: Remoção numa Lista com Salto 203 Figura 3–14: Busca de Fibonacci: Chave Encontrada 207 Figura 3–15: Busca de Fibonacci: Chave Não Encontrada 208 Figura 4–1: Representação Esquemática de uma Árvore Ordinária 213 Figura 4–2: Duas Árvore Binárias Diferentes com Dois Nós 215 ix x | Lista de Figuras Figura 4–3: Árvore Binária Inclinada à Esquerda 215 Figura 4–4: Árvore Binária Perfeita 217 Figura 4–5: Árvore Binária Completa 217 Figura 4–6: Árvore Binária Inclinada Representada em Array 218 Figura 4–7: Árvore Binária Completa Representada em Array 219 Figura 4–8: Representação Esquemática de um Nó de Árvore Binária 219 Figura 4–9: Caminhamentos em Árvore Binária 221 Figura 4–10: Caminhamento Prefixo em Árvore Binária 222 Figura 4–11: Caminhamento Infixo em Árvore Binária 222 Figura 4–12: Caminhamento Sufixo em Árvore Binária 222 Figura 4–13: Representação de Expressão Aritmética em Árvore Binária 1 223 Figura 4–14: Representação de Expressão Aritmética em Árvore Binária 2 223 Figura 4–15: Caminhamento por Nível em Árvore Binária 224 Figura 4–16: Duas Árvores Binárias Semelhantes 227 Figura 4–17: Duas Árvores Binárias Não Semelhantes 227 Figura 4–18: Árvore Binária Costurada em Ordem Infixa à Direita 231 Figura 4–19: Inserção numa Árvore Binária de Busca 235 Figura 4–20: Inserção numa Árvore Binária de Busca 235 Figura 4–21: Inserção numa Árvore Binária de Busca 236 Figura 4–22: Árvore Binária de Busca 236 Figura 4–23: Chaves Ordenadas Inseridas numa Árvore Binária de Busca 237 Figura 4–24: Inserção numa Árvore Binária de Busca 238 Figura 4–25: Remoção de Nó numa Árvore Binária de Busca 1 242 Figura 4–26: Remoção de Nó numa Árvore Binária de Busca 2 242 Figura 4–27: Remoção de Nó numa Árvore Binária de Busca 3 243 Figura 4–28: Árvores AVL e Árvores Perfeitamente Balanceadas 247 Figura 4–29: Balanceamento de Nós numa Árvore AVL 248 Figura 4–30: Possíveis Inserções numa Árvore AVL 1 249 Figura 4–31: Possíveis Inserções numa Árvore AVL 2 250 Figura 4–32: Rotações numa Árvore AVL 251 Figura 4–33: Inserção numa Árvore AVL 1 253 Figura 4–34: Inserção numa Árvore AVL 2 254 Figura 4–35: Inserção numa Árvore AVL 3 254 Figura 4–36: Inserções que Podem Tornar uma Árvore AVL Desbalanceada 1 255 Figura 4–37: Inserções que Podem Tornar uma Árvore AVL Desbalanceada 2 256 Figura 4–38: Remoção de um Nó de uma Árvore AVL 1 262 Figura 4–39: Remoção de um Nó de uma Árvore AVL 2 262 Figura 4–40: Remoção de um Nó de uma Árvore AVL 3 263 Figura 4–41: Remoção de um Nó de uma Árvore AVL 4 263 Figura 4–42: Remoção de um Nó de uma Árvore AVL 5 264 Figura 4–43: Remoção de um Nó de uma Árvore AVL 6 264 Lista de Figuras | xi Figura 4–44: Remoção de um Nó de uma Árvore AVL 7 265 Figura 4–45: Remoção de um Nó de uma Árvore AVL 8 265 Figura 4–46: Árvore Binária com afunilamento 267 Figura 4–47: Árvore Binária Autoajustável 267 Figura 4–48: Árvore Binária Autoajustável 268 Figura 4–49: Árvore Binária Autoajustável 268 Figura 4–50: Árvore Binária Autoajustável 269 Figura 4–51: Árvore Binária Afunilada 269 Figura 4–52: Árvore Binária Afunilada 269 Figura 4–53: Árvore Binária Afunilada 270 Figura 5–1: Árvore de Busca Multidirecional de Ordem 4 288 Figura 5–2: Árvore de Busca Multidirecional Descendente de Ordem 3 288 Figura 5–3: Árvore de Busca Multidirecional Balanceada de Ordem 3 289 Figura 5–4: Busca e Inserção em Árvore Multidirecional de Busca 303 Figura 5–5: Inserção de Chaves em Folhas de uma Árvore Multidirecional de Busca 305 Figura 5–6: Inserção de Chaves numa Árvore Multidirecional de Busca I 306 Figura 5–7: Inserção de Chaves numa Árvore Multidirecional de Busca II 306 Figura 5–8: Remoção de Chave numa Árvore Multidirecional de Busca I 313 Figura 5–9: Remoção de Chave numa Árvore Multidirecional de Busca II 313 Figura 5–10: Inserção de Chaves numa Árvore B I 317 Figura 5–11: Inserção de Chaves numa Árvore B com Tendência Esquerda 318 Figura 5–12: Inserção de Chaves numa Árvore B com Tendência Direita 318 Figura 5–13: Inserção de Chaves numa Árvore B com Divisão de Nós I 319 Figura 5–14: Inserção de Chaves numa Árvore B com Divisão de Nós II 319 Figura 5–15: Inserção de Chaves numa Árvore B com Divisão de Nós III 320 Figura 5–16: Inserção de Chaves numa Árvore B com Criação de Nova Raiz 320 Figura 5–17: Criação de uma Árvore B I 320 Figura 5–18: Criação de uma Árvore B II 320 Figura 5–19: Criação de uma Árvore B III 321 Figura 5–20: Criação de uma Árvore B IV 321 Figura 5–21: Criação de uma Árvore B V 321 Figura 5–22: Criação de uma Árvore B VI 321 Figura 5–23: Criação de uma Árvore B VII 321 Figura 5–24: Criação de uma Árvore B VIII 322 Figura 5–25: Remoção de Chaves de uma Árvore B 1 332 Figura 5–26: Remoção de Chaves de uma Árvore B 2 332 Figura 5–27: Remoção de Chaves de uma Árvore B 3 333 Figura 5–28: Remoção de Chaves de uma Árvore B 4 333 Figura 5–29: Remoção de Chaves de uma Árvore B 5 333 Figura 5–30: Remoção de Chaves de uma Árvore B 6 334 Figura 5–31: Remoção de Chaves de uma Árvore B 7 334 Figura 5–32: Remoção de Chaves de uma Árvore B 8 334 Figura 5–33: Remoção de Chaves de uma Árvore B 9 334 Figura 5–34: Remoção de Chaves de uma Árvore B 10 335 Figura 5–35: Ilustração do passo 2 do algoritmo JuntaNos 336 Figura 5–36: Ilustração do passo 3 do algoritmo JuntaNos 336 Figura 5–37: Ilustração do Passo 4.1 do Algoritmo JuntaNos 337 Figura 5–38: Ilustração do Passo 4.2 do Algoritmo JuntaNos 337 Figura 5–39: Árvore B+ 340 Figura 6–1: Funcionamento da Função strtok() 367 Figura 6–2: Casamento de Strings por Força Bruta 371 Figura 6–3: Algoritmo de Knuth, Morris e Pratt (KMP) 373 Figura 6–4: Boyer e Moore (BM) 1 374 Figura 6–5: Boyer e Moore (BM) 2 374 Figura 6–6: Boyer e Moore (BM) 3 374 Figura 6–7: Boyer e Moore (BM) 4 374 Figura 6–8: Algoritmo de Rabin e Karp 1 375 Figura 6–9: Trie 1 376 Figura 7–1: Inserção de Chaves numa Tabela de hashing com e sem Colisão I 412 Figura 7–2: Inserção de Chaves numa Tabela de hashing com e sem Colisão I 414 Figura 7–3: Inserção de Chaves numa Tabela de hashing com e sem Colisão II 415 Figura 8–1: Árvore Binária Completa e Respectivo Array Associado 429 Figura 8–2: Heap Binário Ascendente e Respectivo Array Associado 431 Figura 8–3: Inserção de Nó em Heap Binário Ascendente 1 432 Figura 8–4: Inserção de Nó em Heap Binário Ascendente 2 432 Figura 8–5: Remoção e Ordenação de um Heap Ascendente 435 Figura 9–1: Ordenação pelo Método de Bolhas (Bubble Sort) 447 Figura 9–2: Ordenação pelo Método Quicksort 449 Figura 9–3: Ordenação pelo Método Árvore Binária de Busca 453 Figura 9–4: Ordenação pelo Método de Inserção Simples 457 Figura 9–5: Ordenação pelo Método de Shell 459 Figura 9–6: Ordenação pelo Método de Intercalação (Merge Sort) 463 Figura 10–1: Exemplos de Grafos 489 Figura 10–2: Exemplos de Dígrafos 490 Figura 10–3: Grafo Representando Conexões entre Cidades 490 Figura 10–4: Grafo Direcionado vs Grafo Não Direcionado 491 Figura 10–5: Grafo Não Direcionado Representando um Conjunto de Vértices 491 Figura 10–6: Grafo Direcionado Representando um Conjunto de Vértices 492 Figura 10–7: Grafos Completos 492 Figura 10–8: Grafo Representando Cidades e Distâncias entre Elas 493 Figura 10–9: DAG493 Figura 10–10: Um Grafo Complexo 494 Figura 10–11: Busca com Retrocesso 494 Figura 10–12: Matriz de Adjacência 495 Figura 10–13: Lista de Adjacência 495 Figura 10–14: Grafo e Campo de Informação Correspondente 496 Figura 10–15: Caminhamento em Profundidade 497 Figura 10–16: Caminhamento em Largura 497 Figura 10–17: Caminhamento em Profundidade 498 Figura 10–18: Árvore de Abrangência 499 Figura 10–19: Árvore de Abrangência Mínima 500