Entendendo Algoritmos - Introdução
Tags: beginners, python, programming, hacktoberfest23
Published: 2023-10-01 13:53:41

> Este texto é direcionado a galera iniciante que vai acompanhar a leitura mas não possui conhecimento técnico aprofundado. Caso você já possua uma experiência prévia, este texto pode te complementar algo, mas não é direcionado a você.

Se você está chegando agora no mundo da programação e não sabe onde tá amarrando o jegue, vou te explicar partes necessárias para absorver 100% o que o livro se propõe a nos ensinar. 

## Fundamentação teórica

De antemão é necessário ter o conhecimento de alguns elementos que estão presentes em todo o livro. Há sempre uma breve explicação dentro do livro, mas considero que não é suficiente pra você que estar caindo de paraquedas na área e deseja prosseguir com o estudo.  

### Matemática básica

O algoritmo é uma solução aplicada a um problema computacional que nos resulta em uma resposta. Por mais que a sua representação seja feita em linhas de código, a lógica, o custo e a sua representação ainda serão matemática. Por isso será necessário **revisar** alguns conceitos.  Sim, eu sei, "Ain não precisa de matemática para programar" é, sim, claro, concordo em discordar... O livro trata de custo computacional entre os algoritmos então, vamos apenas relembrar 3 conceitos. Abaixo, o tema e links que vão te ajudar a não passar batido por estes temas: 

 - Conjuntos - [vídeo](https://www.youtube.com/watch?v=ZZmPGJ6IRyU) / [artigo](https://www.todamateria.com.br/teoria-dos-conjuntos/)

 - Funções - [vídeo](https://www.youtube.com/watch?v=xpv-SWbDUr8) / [artigo](https://www.todamateria.com.br/funcao/)

 -  Logaritmo - [vídeo](https://www.youtube.com/watch?v=oxlWLX4kwCQ) / [artigo](https://www.todamateria.com.br/logaritmo/)

### Pseudocódigo

Passou, passou. A matemática malvada foi embora. O neném pode voltar a fingir que não utilizamos matemática para programar. Só que, vamos ter que fazer pior neste exato momento. Vamos utilizar o português!

Calma, volta aqui. Não vamos escrever um texto longo e cansativo como este, somente um passo a passo do que o seu algoritmo deve fazer, afinal não é todo mundo que tem disponível o tempo hábil de programar. Pessoas com a senioridade maior apenas deixam escritas uma "receita" para que outro desenvolvedor possa transcrever. Não é mesmo sênior de 2 anos? rs. Vamos ao exemplo:

```
Leia valor e multiplicador

Se valor Multiplicado por multiplicador for Maior que 10:
    retorne valor multiplicado por multiplicador;

Se valor for negativo:
    retorne 0;

se valor Multiplicado por multiplicador for Menor que 10:
   retorne valor;

Caso não se encaixe em nada:
   retorne 0;
```

Um pseudocódigo totalmente léxico é complexo, além de ser bem chato de se fazer. Vamos simplificar misturando símbolos operacionais:

```
Leia valor, multiplicador

Se (valor * multiplicador > 10):
    retorne (valor * multiplicador);

Se valor < 0:
    retorne 0;

Se (valor * multiplicador < 10):
   retorne valor;

retorne 0
```
Simples, legível e explicado. Até pessoas que não são da área entendem quais são os passos a seguir no seu código. Desta maneira você poderá resolver o máximo de questões possíveis. Algumas empresas utilizam pseudocódigo na entrevista técnica, é legal saber montar um. 

## Linguagem de programação

Tá, mas e se existisse uma linguagem de programação que fosse tão simples quanto um pseudocódigo para ajudar? Daí que entra o Python. 
O Python é uma linguagem de programação que emula a facilidade da escrita de um algoritmo por pseudocódigo. Vamos tentar reproduzir o pseudocódigo anterior em Python:

```python
def example():
    value = int(input())
    multiple = int(input())

    if((value * multiple) > 10):
        return value * multiple
    
    if(value < 0):
        return 0
    
    if((value * multiple) < 10):
        return value
    
    return 0
```
Se você sabe algo de inglês dá pra se notar que não há quase nada de diferença entre o pseudocódigo com o Python. Pra mim esta é a beleza da linguagem. A sua facilidade. 

Caso você ainda não possua Python na sua máquina, baixe [aqui](https://www.python.org/downloads/). Vai ser importante ter uma linguagem simples durante o curso para exercitarmos alguns conteúdos. 

Caso você ainda não possua uma IDE instalada no seu computador, baixe o Vscode [aqui](https://code.visualstudio.com/). 

### Big O notation

Temos a teoria e o ferramental para se desenvolver um algoritmo, agora precisamos de algo que os classifique. Para isso, temos a notação Big O. Algoritmos em computação tem vários comportamentos que variam sobre muitas circunstâncias. Tempo de execução, tamanho de dados, tipo de processamento, velocidade da máquina, tudo isso interfere no cálculo e no desempenho de um algoritmo.
![Big O Graph](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l4488lg8splke7fgwjlq.png)

Então para a padronização, cientistas da computação (sempre eles...) inventaram a notação em Big O, que reflete o custo do algoritmo no pior caso possível. Levando em consideração a lei de Murphy. Aquela famosa regrinha, prepare-se para o pior. 
Para saber mais sobre o Big O notation, acesse o [link](https://www.freecodecamp.org/portuguese/news/o-que-e-a-notacao-big-o-complexidade-de-tempo-e-de-espaco/) da freeCodeCamp, onde você vai encontrar um post com a explicação do que exatamente é o Big O, como calcular, como classifica-lo etc. Vale conferir.  


## Exercícios

Ok, com tudo pronto, vamos apenas seguir os exercícios do livro? ah mas vocês acham mesmo? Mas é óbvio que **não**! Vamos explorar o mundo da programação competitiva, só que de uma maneira café com leite.
Iremos utilizar o [beecrowd](https://www.beecrowd.com.br/judge/pt/login) para exercitar os algoritmos.O beecrowd é uma plataforma de competições online que armazena milhares de exercícios com vários temas de algoritmo. Não iremos participar de competições mas podemos resolver questões de competições anteriores para exercitar o que aprendemos. Para participar o beecrowd não é necessário pagar nada, só concluir o seu cadastro e navegar pelo site. As questões são separadas em níveis e diferentes temas de exercício. 


![niveis_perguntas](https://i.im.ge/2023/09/30/NxOgID.Captura-de-tela-2023-09-30-152637.md.png)

A plataforma é bem intuitiva, nós temos uma questão e um campo de submissão (que pode ser apenas um copiar e colar). Sem muito galho. 

![beecrowd](https://i.im.ge/2023/09/30/NxOcMY.Captura-de-tela-2023-09-30-152014.md.png)

Ao longo da semana, irei postar os materiais extras sobre os capítulos e alguns links de exercícios do beecrowd, então seria como um desafio extra ao finalizar a leitura do livro, para aprender aquele tal  algoritmo. 

Espero que este material tenha te ajudado até aqui e se for possível compartilha, me deixa um comentário, uma reação, um sinal jedi que for e me grita se tiver dificuldade em algum destes passos. 

![n gostei do apelido yoda, amei](https://i.im.ge/2023/10/01/Nx2Kl1.5eb575887c708e00012c06ad-image-d4fcfcdf.md.jpg)