1.1 O que é um algoritmo
Algoritmo – é uma sequência ordenada de etapas ou instruções claramente definidas, destinada a realizar uma determinada tarefa ou resolver um problema específico. Cada etapa do algoritmo deve ser clara e inequívoca, e a execução do algoritmo deve levar a um resultado definido em um tempo finito.
Para que serve um algoritmo:
- Resolução de problemas: Algoritmos permitem abordar sistematicamente a solução de diversas tarefas, desde operações matemáticas simples até problemas computacionais complexos.
- Automatização de processos: Algoritmos são necessários para automatizar tarefas em software, permitindo que computadores realizem ações repetitivas sem intervenção humana.
- Otimização de recursos: Algoritmos bem projetados ajudam a usar eficientemente os recursos, como tempo de execução e memória RAM.
- Repetibilidade e confiabilidade: Algoritmos garantem repetibilidade e previsibilidade dos resultados, o que é importante para o desenvolvimento de software confiável.
Exemplos:
- Tarefas diárias: Por exemplo, o algoritmo da rotina matinal – acordar, escovar os dentes, preparar o café da manhã e assim por diante.
- Operações matemáticas: Algoritmo para encontrar o maior divisor comum (MDC) de dois números.
- Programas de computador: Algoritmos de ordenação (por exemplo, ordenação por bolha) e busca (por exemplo, busca binária).
1.2 O que é uma estrutura de dados
Estrutura de dados – é uma maneira de organizar e armazenar dados de tal forma que eles possam ser usados e processados eficientemente. Diferentes estruturas de dados são destinadas a diferentes tipos de tarefas e operações.
Por que precisamos de estruturas de dados:
- Gestão eficiente de dados: Estruturas de dados permitem organizar dados para que possam ser acessados, modificados e excluídos de forma rápida e eficiente.
- Otimização de algoritmos: Diferentes estruturas de dados são adequadas para diferentes algoritmos, e a escolha correta da estrutura de dados pode melhorar significativamente a eficiência do algoritmo.
- Facilidade de programação: Utilizar as estruturas de dados corretas torna o código mais claro, mantível e expansível.
- Solução de problemas específicos: Algumas estruturas de dados são destinadas a resolver tarefas específicas, como tabelas de hash para pesquisa rápida ou árvores para dados hierárquicos.
Exemplos:
- Arrays: Conjunto de elementos de um tipo, aos quais se pode acessar por índice.
- Listas ligadas: Coleção de elementos, cada um contendo um link para o próximo elemento.
- Pilha: Coleção de elementos com o princípio
LIFO (Last In, First Out). - Fila: Coleção de elementos com o princípio
FIFO (First In, First Out).
1.3 Importância dos algoritmos e estruturas de dados na programação
Importante! Mesmo se você estiver escrevendo um site simples ou um aplicativo móvel básico, você está usando algoritmos e estruturas de dados complexas. O aplicativo roda em um sistema operacional, o site dentro de um navegador, e para que essas coisas funcionem rápido e de forma confiável, são usados algoritmos e estruturas de dados padronizados.
Importância dos algoritmos:
- Princípio fundamental da programação: Algoritmos são a base de qualquer programa, definindo como os dados serão processados para alcançar o resultado desejado.
- Eficiência e desempenho: Algoritmos otimizados garantem execução mais rápida dos programas e uso eficiente dos recursos.
- Solução de problemas complexos: Algoritmos permitem resolver problemas computacionais complexos que não podem ser resolvidos manualmente.
- Universalidade: Muitos algoritmos podem ser aplicados em diferentes áreas, como ordenação, busca, compressão de dados e criptografia.
Importância das estruturas de dados:
- Organização de dados: Estruturas de dados permitem organizar e gerenciar dados de forma eficiente, o que é importante para criar programas eficazes.
- Suporte aos algoritmos: Diferentes estruturas de dados são ideais para diferentes algoritmos, e a escolha correta da estrutura de dados pode melhorar significativamente o desempenho do programa.
- Escalabilidade: Estruturas de dados bem projetadas permitem expandir e modificar programas facilmente.
1.4 Exemplos de algoritmos simples
Algoritmo para encontrar o máximo em um array:
Este algoritmo encontra o maior valor em um array de números dado.
Passo a passo do algoritmo:
- Assumir o primeiro elemento do array como o máximo.
- Passar por todos os outros elementos do array:
- Se o elemento atual for maior que o máximo atual, atualizar o máximo.
- Após ver todos os elementos, retornar o máximo encontrado.
Implementação em Python:
def find_max(arr):
# Presumimos que o primeiro elemento é o máximo
max_val = arr[0]
# Passamos por todos os elementos do array
for num in arr:
# Se o elemento atual for maior que max_val, atualizamos max_val
if num > max_val:
max_val = num
# Retornamos o máximo encontrado
return max_val
# Exemplo de uso:
# numbers = [4, 2, 9, 7, 5, 1]
# result = find_max(numbers)
# Saída: 9
Algoritmo de ordenação por bolha:
Este algoritmo ordena um array, comparando e trocando consecutivamente elementos vizinhos, se eles estiverem na ordem errada.
Passo a passo do algoritmo:
- Começar com o primeiro elemento do array.
- Comparar o elemento atual com o próximo.
- Se o elemento atual for maior que o próximo, trocá-los de lugar.
- Passar para o próximo elemento e repetir os passos 2-3, até o final do array.
- Repetir os passos 1-4 até que nenhum elemento seja trocado em um único percurso pelo array.
Implementação em Python:
def bubble_sort(arr):
n = len(arr)
# Passamos por todos os elementos do array
for i in range(n):
# Os últimos i elementos já estão ordenados
for j in range(0, n - i - 1):
# Comparamos elementos vizinhos
if arr[j] > arr[j + 1]:
# Trocamos os elementos se estiverem na ordem errada
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
# Exemplo de uso:
# numbers = [64, 34, 25, 12, 22, 11, 90]
# sorted_numbers = bubble_sort(numbers)
# Saída: [11, 12, 22, 25, 34, 64, 90]
GO TO FULL VERSION