freeCodeCamp/guide/portuguese/algorithms/index.md

53 lines
3.8 KiB
Markdown

---
title: Algorithms
localeTitle: Algoritmos
---
## Algoritmos
Na ciência da computação, um algoritmo é uma especificação inequívoca de como resolver uma classe de problemas. Algoritmos podem realizar cálculos, processamento de dados e tarefas de raciocínio automatizado.
Um algoritmo é um método efetivo que pode ser expresso dentro de uma quantidade finita de espaço e tempo e em uma linguagem formal bem definida para o cálculo de uma função. Partindo de um estado inicial e de uma entrada inicial (talvez vazia), as instruções descrevem uma computação que, quando executada, passa por um número finito de estados sucessivos bem definidos, produzindo eventualmente "saída" e terminando em um estado final final. A transição de um estado para o outro não é necessariamente determinista; alguns algoritmos, conhecidos como algoritmos aleatórios, incorporam entrada aleatória.
Existem certos requisitos que um algoritmo deve respeitar:
1. Definitividade: Cada passo no processo é precisamente indicado.
2. Computabilidade efetiva: Cada etapa do processo pode ser executada por um computador.
3. Finiteness: O programa terminará com sucesso.
Alguns tipos comuns de algoritmos incluem algoritmos de classificação, algoritmos de pesquisa e algoritmos de compactação. As classes de algoritmos incluem Gráfico, Programação Dinâmica, Classificação, Pesquisa, Strings, Matemática, Geometria Computacional, Otimização e Diversos. Embora tecnicamente não seja uma classe de algoritmos, as Estruturas de Dados geralmente são agrupadas com elas.
### Eficiência
Os algoritmos são mais comumente julgados pela sua eficiência e pela quantidade de recursos computacionais necessários para concluir sua tarefa. Uma maneira comum de avaliar um algoritmo é analisar sua complexidade temporal. Isso mostra como o tempo de execução do algoritmo aumenta à medida que o tamanho da entrada aumenta. Como os algoritmos atuais precisam operar com grandes entradas de dados, é essencial que nossos algoritmos tenham um tempo de execução razoavelmente rápido.
### Algoritmos de Ordenação
Algoritmos de classificação vêm em vários sabores, dependendo da sua necessidade. Alguns, muito comuns e amplamente utilizados são:
#### Ordenação rápida
Não há discussão de classificação que possa terminar sem ordenação rápida. O conceito básico está no link abaixo. [Ordenação rápida](http://me.dt.in.th/page/Quicksort/)
#### Merge Sort
É o algoritmo de classificação que se baseia no conceito de como as matrizes ordenadas são mescladas para fornecer uma matriz ordenada. Leia mais sobre isso aqui- [Merge Sort](https://www.geeksforgeeks.org/merge-sort/)
O currículo do freeCodeCamp enfatiza fortemente a criação de algoritmos. Isso ocorre porque os algoritmos de aprendizado são uma boa maneira de praticar habilidades de programação. Em geral, os entrevistadores testam candidatos em algoritmos durante entrevistas de emprego de desenvolvedores.
### Mais recursos
[Introdução aos Algoritmos | Crash Course: Ciência da Computação](https://www.youtube.com/watch?v=rL8X2mlNHPM)
Este vídeo fornece uma introdução acessível e animada a algoritmos com foco na classificação e no gráfico de algoritmos de pesquisa.
[O que é um algoritmo e por que você deve se importar? | Khan Academy](https://www.youtube.com/watch?v=CvSOaYi89B4)
Este vídeo apresenta algoritmos e discute brevemente alguns usos de alto perfil deles.
[15 Algoritmos de Ordenação em 6 Minutos | Timo Bingmann](https://www.youtube.com/watch?v=kPRA0W1kECg)
Este vídeo demonstra visualmente alguns algoritmos de classificação populares que são comumente ensinados em cursos de programação e ciência da computação.
[Visualizador de Algoritmo](http://algo-visualizer.jasonpark.me)
Este também é um projeto de código aberto muito bom que ajuda você a visualizar algoritmos.