DEV Community

Cover image for Entendendo Algoritmos - Introdução
Lorem Impsu
Lorem Impsu

Posted on

Entendendo Algoritmos - Introdução

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:

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;
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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:

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
Enter fullscreen mode Exit fullscreen mode

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. 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.

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

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 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 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

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

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

Top comments (8)

Collapse
 
fernandofrichenbruder profile image
Fernando Frichenbruder

Essa historia de não precisar de matemática pra programar me incomoda bastante. As pessoas acham que a matemática envolvida eh o X > 1. As pessoas sequer sabem o que é matemática e reduzem ela a fazer contas. "Vou numa festa, mas se chover não vou", isso é matemática. Se tu arrumar teu armário e separar as roupas por cores, é matemática....
Absolutamente tudo que se faz em programação é matemática. Atribuir um valor, mesmo que string ou booleano numa variável, é matemática. Lógica É matemática. Essas coisas são tão matemática quanto fazer contas, que é uma pequena parte da matemática.

Por isso tem tanto programador meia boca hoje em dia. Se a pessoa acha que ela não precisa de matemática pra programar, meu amigo... essa pessoa tá ali a passeio...

Collapse
 
loremimpsu profile image
Lorem Impsu

Concordo contigo. É irritante ter que explicar que matemática está em tudo e não somente em funções aritméticas. Por enquanto eu tento dobrar o pessoal no papo, depois de um tempo conscientizar.

Collapse
 
cherryramatis profile image
Cherry Ramatis

Essas bases sempre foram fracas em mim (big o, algoritmos, estruturas d dados) como dev, inclusive sempre tive mto medo de matemática por achar q eh só aritmética, leituras como essa ajudam mto a desmitificar e perder o medo. To estudando recentemente essas bases e teus artigos ajudam mto 🙏

Collapse
 
loremimpsu profile image
Lorem Impsu

Obrigada 💙 o intuito é deixar fácil algo que pode ser apresentado como um bicho de sete cabeças

Collapse
 
naiaranunes profile image
Naiara

Muito bomm!! obrigada!<3

Collapse
 
loremimpsu profile image
Lorem Impsu

Disponha 💙

Collapse
 
eduardoklosowski profile image
Eduardo Klosowski

Beecrowd eu acho legal, mas se não for para praticar para programação competitiva tem algumas coisas que desagradam. Como deixam totalmente as segas quando um programa não passa. Se você não tiver o conhecimento para resolver um problema, você não vai saber o que pesquisar. Não tem uma progressão legal dos desafios, e nem sempre eles estão classificados corretamente. A programação competitiva em si incentiva muito mais o código rápido do que um bom código, organizado, seguro. Dessa forma, principalmente para iniciantes, eu recomendaria muito mais o Exercism, que também tem problemas para resolver, mas guia por quais exercícios seguir, diz quais as habilidades que você tem que desenvolver, da para rodar todos os testes localmente para entender porque ele não foi aceito, depois de resolver um exercício você pode pedir mentoria para melhorar a solução. É muito mais focado para desenvolver as habilidades de programação, do que treinar para programação competitiva.

Collapse
 
joaogutierrre profile image
João Gutierre • Edited

Perdão, não sei se foi pq eu cheguei aqui de paraquedas, mas você menciona um livro ao longo do artigo, qual seria este livro? Procurei no texto todo e não encontrei...