Aula 02 – complexidade de algoritmos
COMPLEXIDADE DE ALGORITMOS
Voltar para página principal do blog
Todas as aulas desse curso
Aula 01 Aula 03
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Esse é o link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Meu github:
https://github.com/toticavalcanti
Lista de desafios de códigos (Coding Challenges)
Quero aproveitar para deixar essa lista para vocês programadoras e programadores que querem aprimorar suas habilidades com algoritmos e lógica de programação.
Trata-se de uma lista de sites de desafios de códigos, isto é, Competitive Programming Sites, ou ainda, Coding Challenges:
- GeeksforGeeks Practice
- LeetCode
- Kaggle
- HackerRank
- CodeChef
- Brilliant
- HackerEarth
- CodeForces
- Codewars
- Topcoder
- InterviewBit
- Project Euler
- SPOJ
- CodingBat
- LintCode
- Codingame
- CodeFights
- Codility
- CoderByte
- UVA Online Judge
- Kattis
- CheckiO
- Rosalind
- PythonChallenge
- SQL-EX.RU
- Urionlinejudge
É muito legal e divertido 😉
Pode ser uma opção interessante colocar no seu currículo sua página nesses sites, lá normalmente tem a sua classificação no hancking, os problemas que conseguiu resolver, entre outras informações.
Dessa forma, contratantes interessados no seu trabalho como programador, podem constatar sua capacidade e habilidade, seu nível de nerd, como se fosse um “nerdômetro”.
Agora, voltando a falar de complexidade de algoritmos, vamos a um exemplo prático.
Vamos ver agora como podemos melhorar a eficiência de um código, esse desafio é do Uri Online Judge:
A solução deve ser O(sqrt (n))
URI Online Judge | 1221
Primo Rápido
Por Neilor Tonin, URI Brasil
Timelimit: 1
Mariazinha sabe que um Número Primo é aquele que pode ser dividido somente por 1 (um) e por ele mesmo. Por exemplo, o número 7 é primo, pois pode ser dividido apenas pelo número 1 e pelo número 7 sem que haja resto. Então ela pediu para você fazer um programa que aceite diversos valores e diga se cada um destes valores é primo ou não. Acontece que a paciência não é uma das virtudes de Mariazinha, portanto ela quer que a execução de todos os casos de teste que ela selecionar (instâncias) aconteçam no tempo máximo de um segundo, pois ela odeia esperar.
Entrada
A primeira linha da entrada contém um inteiro N (1 ≤ N ≤ 200), correspondente ao número de casos de teste. Seguem N linhas, cada uma contendo um valor inteiro X (1 < X < 231) que pode ser ou não, um número primo.
Saída
Para cada caso de teste imprima a mensagem “Prime” (Primo) ou “Not Prime” (Não Primo), de acordo com o exemplo abaixo.
Exemplo de Entrada
3
123321
123
103
Exemplo de Saída
Not Prime
Not Prime
Prime
Veja duas soluções, a verde é a mais eficiente.
import time
from math import sqrt
T = int(input())
def isPrime_fast(num):
for i in range(2, int(sqrt(num)) + 1):
if num % i is 0:
return False
return True
def isPrime_slow(num):
for i in range(2, num):
if num % i is 0:
return False
return True
for n in range(T):
num = int(input())
t0= time.clock()
print("Prime") if num >= 2 and isPrime(num) else print("Not Prime")
t1 = time.clock() - t0
print("Time elapsed: ", t1 - t0)
No código acima, a função em verde é muito mais rápida do que a em vermelho, veja o vídeo do post para ver os resultados.
Ficamos por aqui, valeu, até mais. 🙂
Aula 01 Aula 03
Todas as aulas desse curso
Voltar para página principal do blog
Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no
Facebook
Esse é o link do código fluente no Pinterest
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Meu github:
https://github.com/toticavalcanti
Obrigado, até a próxima e bons estudos. 😉