• Nenhum resultado encontrado

CI1055: Algoritmos e Estruturas de Dados I

N/A
N/A
Protected

Academic year: 2022

Share "CI1055: Algoritmos e Estruturas de Dados I"

Copied!
18
0
0

Texto

(1)

CI1055: Algoritmos e Estruturas de Dados I

Profs. Drs. Marcos Castilho, Bruno M¨uller Jr, Carmem Hara

Departamento de Inform´atica/UFPR

1 de agosto de 2020

Resumo umeros primos

(2)

Objetivos da aula

Desenvolver um dos mais completos programas desta fase do curso

Praticamente integrando diversas t´ecnicas b´asicas Discutir princ´ıpios de eficiˆencia dos algorimos

(3)

N´ umeros primos

Um n´umero natural positivo A´e dito primo se n˜ao possui divisores pr´oprios, isto ´e, n˜ao existem divisoresd no intervalo 2≤d ≤A−1.

(4)

Subproblemas

Se soubermos quantos divisores um dado n´umero apossui a solu¸c˜ao ficaria trivial, n˜ao?

1 begin

2 read (n) ;

3 num div proprios:= ‘ ‘ calcula o numero de d i v i s o r e s proprios de n’’;

4 i f num div proprios = 0 then

5 writeln (’SIM’)

6 else

7 writeln (’NAO’) ;

8 end.

(5)

Rascunho 1

1 program primos v0 ;

2 var n , i , cont : longint ;

3 begin

4 read (n) ;

5 cont:= 0;

6 i := 2;

7 while i <= n−1do

8 begin

9 i f n mod i = 0 then

10 cont:= cont + 1;

11 i := i + 1;

12 end;

13 i f cont = 0 then

14 writeln (’SIM’)

15 else

16 writeln (’NAO’)

17 end.

(6)

Problema

Ineficiente!

Executa n−2 itera¸c˜oes sempre Poderia parar se achar algum divisor!!!

(7)

Rascunho 2: para no primeiro divisor encontrado

1 program primos v1 ;

2 var n , i , cont : longint ; eh primo : boolean;

3 begin

4 read (n) ;

5 cont:= 0;

6 eh primo:= true;

7 i := 2;

8 while eh primo and ( i<= n−1) do

9 begin

10 i f n mod i = 0 then

11 eh primo:= false;

12 i := i + 1;

13 end;

14 i f eh primo then

15 writeln (’SIM’)

16 else

17 writeln (’NAO’)

18 end.

(8)

Ainda pode ser melhor

Ineficiente!

E um pouquinho melhor do que o primeiro´ Mas, no pior caso, ainda executa n−2 Isso ocorre quando n ´e primo

(9)

Como melhorar?

S´o existe um ´unico n´umero par que ´e primo, o 2 Todos os outros primos s˜ao ´ımpares

Ent˜ao vamos testar se n ´e par. Se for, resta saber se ´e o 2 ou outro par qualquer

Depois resta testar todos os ´ımpares

Assim, no pior caso, temos um primo ´ımpar e o algoritmos´o vai iterar na ordem de metade das vezes

(10)

Rascunho 3: separa pares de ´ımpares

1 program primos v2 ;

2 var n , i , cont : longint ; eh primo : boolean;

3 begin

4 read (n) ;

5 cont:= 0;

6 i f nmod2 = 0 then (∗ eh par ∗)

7 i f n = 2 then eh primo:= true

8 else eh primo:= f a l s e

9 else (∗ eh impar ∗)

10 begin

11 eh primo:= true;

12 i := 3;

13 while eh primo and ( i<= n−1) do

14 begin

15 i f nmod i = 0 then

16 eh primo:= f a l s e;

17 i := i + 2;

18 end;

19 end;

20 i f eh primo then writeln (’SIM’)

(11)

Pode ser BEM melhor

Ineficiente!

E, de novo, um pouquinho melhor do que o anterior´

Mas, no pior caso, ainda executa n−22

Matematicamente, dado um n´umero n, o maior divisor que ele pode ter ´e √

n

(12)

Vers˜ ao final: vai at´ e √ n

1 program p r im o s f i na l ;

2 var n , i , cont : longint ; eh primo : boolean;

3 begin

4 read (n) ;

5 cont:= 0;

6 i f nmod2 = 0 then (∗ eh par ∗)

7 i f n = 2 then eh primo:= true

8 else eh primo:= f a l s e

9 else (∗ eh impar ∗)

10 begin

11 eh primo:= true;

12 i := 3;

13 while eh primo and ( i<= sqrt (n) ) do

14 begin

15 i f nmod i = 0 then

16 eh primo:= f a l s e;

17 i := i + 2;

18 end;

19 end;

20 i f eh primo then writeln (’SIM’)

(13)

Compara¸c˜ ao das fun¸c˜ oes

n n2

n

1000000 500000 1000

1000000000 500000000 31622 1000000000000 500000000000 1000000

Para n da ordem de 1012

a vers˜ao do rascunho 3 vai levar muito tempo a vers˜ao final seis ordens de grandeza a menos

(14)

Conclus˜ ao

O melhor teria sido analisar completamente o problema antes de fazer qualquer implementa¸c˜ao

Neste caso, felizmente, a adapta¸c˜ao foi simples

Existem casos em que toda a implementa¸c˜ao tem que ser jogada fora para implementar outra, totalmente diferente A busca pela eficiˆencia ´e um diferencial em Ciˆencia da Computa¸c˜ao!

(15)

Conclus˜ ao

Com isso terminamos o cap´ıtulo 7 Passaremos `as quest˜oes de modularidade Depois, finalmente, `as estruturas de dados

(16)

Exerc´ıcios

Fazer os exerc´ıcios 1 a 17 da se¸c˜ao 7.12 do livro [1]

Os exerc´ıcios de 18 a 22 s˜ao desafios

[1]http://www.inf.ufpr.br/cursos/ci055/livro_alg1.pdf

(17)

Fim do t´ opico

este material est´a no livro no cap´ıtulo 7, se¸c˜ao 7.11

(18)

Licen¸ca

Slides feitos em LATEX usando beamer Licen¸ca

Creative Commons Atribui¸ao-Uso N˜ao-Comercial-Vedada a Cria¸ao de Obras Derivadas 2.5 Brasil License.http://

creativecommons.org/licenses/by-nc-nd/2.5/br/

Creative Commons Atribui¸ao-Uso N˜ao-Comercial-Vedada a Cria¸ao de Obras Derivadas 2.5 Brasil License.http://

creativecommons.org/licenses/by-nc-nd/2.5/br/

Referências

Documentos relacionados

A proposta de um modelo de regress˜ ao linear simples pode ser baseada em argumentos te´ oricos, como no caso em que dados s˜ ao coletados para a avalia¸ c˜ ao do espa¸ co

As contribui¸ c˜ oes pioneiras para a ´ area de Redes Neurais (RN) (tamb´ em denominadas redes neuronais, de neurˆ onio), foram as de McCulloch e Pitts (1943), que introduziram a

Inferˆ encia Frequentista, Inferˆ encia Bayesiana Data Mining, Neural Networks, Data Science Statistical Learning, Machine Learning... Aprendizado

O m´ etodo do fator principal est´ a intimamente relacionado com a t´ ecnica utilizada na an´ alise de componentes principais.. Na pr´ atica, as comunalidades e as variˆ

Mais comumente, os dados envolvem valores de v´ arias vari´ aveis, obtidos da observa¸ c˜ ao de unidades de investiga¸ c˜ ao que constituem uma amostra de uma popula¸ c˜ ao. A

Para evitar isso, vocˆ e pode mover os dois comandos do preˆ ambulo para algum lugar ap´ os o comando \tableofcontents ou definitivamente n˜ ao us´ a-los, porque vocˆ e ver´ a que

A an´ alise de dados amostrais possibilita que se fa¸ ca inferˆ encia sobre a distribui¸ c˜ ao de probabilidades das vari´ aveis de interesse, definidas sobre a popula¸ c˜ ao da

Em geral, cada linha da matriz de dados corresponde a uma unidade de investiga¸c˜ ao (e.g. uni- dade amostral) e cada coluna, a uma vari´ avel. Uma planilha bem elaborada