Capítulo 1 - Introdução aos Algoritmos
Livro: Aprendendo Algoritmos
Data: 08/12/2024
Tags: algoritmos livros
Conceito Principal
- Algoritmo: Uma sequência finita de instruções bem definidas para resolver um problema ou realizar uma tarefa.
Pontos-Chave
-
O que é um algoritmo?
Um conjunto de passos que descrevem como resolver um problema ou executar uma tarefa. Deve ser:- Claro: Cada passo é bem definido.
- Finito: Deve terminar em algum ponto.
- Eficiente: Desempenha a tarefa com o menor custo de tempo e espaço possível.
-
Por que estudar algoritmos?
- Eficiência: Escolher o algoritmo certo pode reduzir drasticamente o tempo de execução e uso de recursos.
- Escalabilidade: Algoritmos ajudam a lidar com grandes volumes de dados.
- Compreensão de Problemas: A análise de algoritmos ensina a resolver problemas de forma estruturada.
Aplicação Prática
- Cenário:
Um cliente precisa buscar um produto em uma base de dados com milhões de registros.- Solução com algoritmo: Implementar busca binária ao invés de busca linear para reduzir o tempo de pesquisa.
Busca Linear vs. Busca Binária:
- Busca Linear: Examina cada elemento. Tempo: ( O(n) ).
- Busca Binária: Divide os dados ordenados pela metade em cada iteração. Tempo: ( O(\log n) ).
Problemas Resolvidos
- Facilita a organização e escalabilidade de sistemas.
- Permite lidar com grandes volumes de dados com eficiência.
Referência Cruzada
- Notação Big O - Análise de complexidade de algoritmos
- Complexidade de Algoritmos - Medição de eficiência
- Big O Notation - Versão em inglês com exemplos práticos
- Recursão - Técnica fundamental para algoritmos
- Arrays e Listas Encadeadas - Estruturas de dados fundamentais
- Array - Implementação e complexidade
- Introdução às Estruturas de Dados - Fundamentos de estruturas de dados
Capítulo 2 - Ordenação de Seleção
Tags: estruturas_dados arrays listas_encadeadas
Conceito de Array e Lista Encadeada
- Arrays e Listas Encadeadas - Comparação detalhada entre estruturas
- Array - Implementação e análise de complexidade
Como Funciona
- Processo Base:
- Encontra o menor elemento no array
- Troca com o primeiro elemento
- Repete para o restante do array
- Características:
- Simples de entender e implementar
- Performance consistente O(n²)
- Ordenação in-place (não usa memória extra)
Complexidade
- Temporal: *O(n^2)
- Sempre faz n * (n-1)/2 comparações
- Independe da ordenação inicial
- Espacial: *O(1)
- Usa apenas algumas variáveis auxiliares
Capítulo 3 - Recursão
Tags: estruturas_dados arrays listas_encadeadas
Conceito
A recursão é a utilização da função dentro dela mesmo, onde passamos parâmetros diferentes, para que ele para que chegue até um caso de exceção para sair desse looping.
Memória na Recursão
Pilha de Chamadas (Call Stack)
- Empilha um novo quadro na pilha de execução
- Mantém seu próprio conjunto de variáveis locais
- Aguarda a resolução das chamadas mais profundas
- Desempilha após retornar seu resultado
Capítulo 4 - QuickSort
Tags: ordenacao dividir_conquistar recursao
Conceito Principal
O QuickSort funciona assim:
Primeiro, você escolhe uma carta qualquer (que o autor chama de pivô). No livro, ele sugere usar sempre a primeira carta, mas explica que existem outras estratégias para essa escolha. Depois, você vai separando as outras cartas em dois grupos: as menores que seu pivô vão para um lado, as maiores para outro. É como se você estivesse organizando suas cartas na mesa, com o pivô no meio. O autor destaca que é aí que está a mágica da recursão - você continua dividindo e organizando até que todos os grupos estejam ordenados.
Capítulo 5 - Tabelas Hash
Tags: estruturas_dados hash busca colisao
Conceito Principal
É uma estrutura utilizada pra organizar objetos similares, dentro de gavetas enumeradas, isto é ele, parecendo uma união entre arrays e lista encadeiadas, fazemos, ele dentro da estrutura e enumera com um identificador que que utilizamos, isso facilita e reduz a complexidade a para inserção/remoção e busca
Funcionamento Básico
- A função hash transforma a chave em um índice da tabela
- O valor é armazenado na posição indicada pelo índice
- Para recuperar um valor, aplica-se novamente a função hash à chave
Técnicas de Resolução de Colisões
- Encadeamento (chaining):
- Cada posição da tabela mantém uma lista de elementos
- Elementos com mesmo índice são armazenados na mesma lista
- Endereçamento aberto:
- Procura próxima posição livre na tabela
- Métodos comuns: sondagem linear, quadrática e hash duplo