• Nenhum resultado encontrado

MC Slide 13 Noções de eficiência e buscas

N/A
N/A
Protected

Academic year: 2021

Share "MC Slide 13 Noções de eficiência e buscas"

Copied!
29
0
0

Texto

(1)

MC-102 - Slide 13

Noções de eficiência e buscas

Elaborado por Raoni Teixeira e Editado por Danillo Roberto Pereira

Instituto de Computação – Unicamp

(2)

Introdução

Por que usar computadores?

Fazer “contas”automaticamente. Fazer “contas”rapidamente.

Quão rápido é um computador?

Depende...

...do problema tratado. ...do algoritmo utilizado.

(3)

Introdução

Por que usar computadores?

Fazer “contas”automaticamente.

Fazer “contas”rapidamente.

Quão rápido é um computador?

Depende...

...do problema tratado. ...do algoritmo utilizado.

(4)

Introdução

Por que usar computadores?

Fazer “contas”automaticamente.

Fazer “contas”rapidamente.

Quão rápido é um computador?

Depende...

...do problema tratado. ...do algoritmo utilizado.

(5)

Introdução

Por que usar computadores?

Fazer “contas”automaticamente.

Fazer “contas”rapidamente.

Quão rápido é um computador?

Depende...

...do problema tratado. ...do algoritmo utilizado.

(6)

Introdução

Por que usar computadores?

Fazer “contas”automaticamente.

Fazer “contas”rapidamente.

Quão rápido é um computador?

Depende...

...do problema tratado. ...do algoritmo utilizado.

(7)

Introdução

Por que usar computadores?

Fazer “contas”automaticamente.

Fazer “contas”rapidamente.

Quão rápido é um computador?

Depende...

...do problema tratado.

(8)

Introdução

Por que usar computadores?

Fazer “contas”automaticamente.

Fazer “contas”rapidamente.

Quão rápido é um computador?

Depende...

...do problema tratado. ...do algoritmo utilizado.

(9)

Tartaruga

Problema

A cada segundo, uma tartaruga dá um passo. O primeiro passo tem tamanho 1m, o segundo 1/2m, o terceiro 1/3m e assim por diante. Em quanto tempo ela anda 10m, 20m e 100m?

(10)

Tartaruga - 10 m

double dist; double n; dist = 0; n = 1; while (dist < 10.0) { dist = dist + 1.0/n; n = n + 1.0; }

printf("Ela gastou %lf horas para andar %lf.\n", n / 3600, dist);

(11)

Tartaruga - 10 m

double dist; double n; dist = 0; n = 1; while (dist < 10.0) { dist = dist + 1.0/n; n = n + 1.0; }

printf("Ela gastou %lf horas para andar %lf.\n", n / 3600, dist);

(12)

Tartaruga - 20 m

double dist; double n; dist = 0; n = 1; while (dist < 20.0) { dist = dist + 1.0/n; n = n + 1.0; }

printf("Ela gastou %lf dias para andar %lf.\n", n / 3600 / 24 , dist);

(13)

Tartaruga - 20 m

double dist; double n; dist = 0; n = 1; while (dist < 20.0) { dist = dist + 1.0/n; n = n + 1.0; }

printf("Ela gastou %lf dias para andar %lf.\n", n / 3600 / 24 , dist);

(14)

Tartaruga - 20 m

double dist; double n; dist = 0; n = 1; while (dist < 20.0) { dist = dist + 1.0/n; n = n + 1.0; }

printf("Ela gastou %lf dias para andar %lf.\n", n / 3600 / 24 , dist);

(15)

Tartaruga - 100 m

double dist; double n; dist = 0; n = 1; while (dist < 100.0) { dist = dist + 1.0/n; n = n + 1.0; }

printf("Ela gastou %lf anos para andar %lf.\n", n / 3600 / 24 / 365, dist);

Milhares e milhares de anos!!! E quanto tempo o

computador gasta para calcular isso?

(16)

Tartaruga - 100 m

double dist; double n; dist = 0; n = 1; while (dist < 100.0) { dist = dist + 1.0/n; n = n + 1.0; }

printf("Ela gastou %lf anos para andar %lf.\n", n / 3600 / 24 / 365, dist);

Milhares e milhares de anos!!!

E quanto tempo o

computador gasta para calcular isso?

(17)

Tartaruga - 100 m

double dist; double n; dist = 0; n = 1; while (dist < 100.0) { dist = dist + 1.0/n; n = n + 1.0; }

printf("Ela gastou %lf anos para andar %lf.\n", n / 3600 / 24 / 365, dist);

Milhares e milhares de anos!!! E quanto tempo o

computador gasta para calcular isso?

(18)

Adivinhação

Problema

Você e uma amiga fizeram uma aposta: ela pensa em um número entre 1 e 1.000.000 e você tem que adivinhar esse número. Se errar um palpite, você paga dez centavos, mas se acertar o número, recebe dez reais. A cada resposta errada, sua amiga deve dizer se o número que ela pensou é maior ou menor que o palpite. Escreva um algoritmo para adivinhar o número.

(19)

Adivinhação

int palpite, numero; char caractere;

for (palpite = 1; palpite <= 1000000; palpite++) { printf("O numero eh %d? ", palpite);

scanf("%c", &caractere); if (caractere == ’=’) { numero = palpite; break; } }

printf("O número eh %d!", numero);

(20)

Adivinhação

int palpite, numero; char caractere;

for (palpite = 1; palpite <= 1000000; palpite++) { printf("O numero eh %d? ", palpite);

scanf("%c", &caractere); if (caractere == ’=’) { numero = palpite; break; } }

printf("O número eh %d!", numero);

(21)

Adivinhação - Melhorando

int palpite, numero; char caractere;

int maior = 0, passo = 100000; // 100 mil

do {

maior = maior + passo;

printf("O numero eh %d? ", maior); scanf("%c", &caractere);

} while (caractere == ’>’);

for (palpite = maior-passo+1; palpite <= maior; palpite++) { printf("O numero eh %d? ", palpite);

scanf("%c", &caractere); if (caractere == ’=’) { numero = palpite; break; } }

(22)

Adivinhação - Algoritmo melhor (Busca Binária)

int palpite, menor, maior, encontrou, numero; char caractere;

menor = 1; maior = 1000000; encontrou = 0; while (!encontrou) {

palpite = (menor + maior) / 2; printf("O numero eh %d? ", palpite); scanf("%c", &caractere); if (caractere == ’=’) { numero = palpite; encontrou = 1; } else if (caractere == ’<’) { maior = palpite - 1; } else { menor = palpite + 1; } }

(23)

Restos legais

Problema

Escreva um programa que imprima o cubo de cada número entre 1 e 100 cujo o quadrado deixa resto 1 ou 5 quando divididos por 7. Conte o número de multiplicações que seu programa faz. Tente fazer o programa que gaste o menor número de multiplicações possíveis.

(24)

Restos legais

int i; for (i = 1; i <= 100; i++) { if (i*i % 7 == 1 || i*i % 7 == 5) { printf("%d\n", i*i*i); } }

(25)

Restos legais

int i, resto; for (i = 1; i <= 100; i++) { resto = i*i % 7; if (resto == 1 || resto == 5) { printf("%d\n", i*i*i); } }

(26)

Restos legais

int i, resto, quadrado;

for (i = 1; i <= 100; i++) { quadrado = i*i; resto = quadrado % 7; if (resto == 1 || resto == 5) { printf("%d\n", quadrado*i); } }

(27)

Exercício 1: otimizando

1 Escreva um programa que imprima os n primeiras somas parciais da

série n X i =1  (−2)n+i+ 1 2i  .

Conte o número de multiplicações e somas que seu programa faz.

2 (Pequeno desafio) Tente escrever um programa que gaste menos

multiplicações para o problema dos restos legais do que os algoritmos da aula. Dica: os números 1, 8, 15... satisfazem à condição. O que eles têm em comum?

(28)

Exercício 2: busca sequencial

Problema

Escreva um programa que leia um número inteiro n e depois leia uma sequência de n números fracionários. Após isso, o usuário irá digitar um número fracionário m. O seu programa deverá imprimir:

Se o número m está na sequência, a ordem em que m foi inserido na sequência.

Quantos números da sequência são maiores ou iguais a m e a média desses números.

(29)

Exercício 3: busca binária

Problema

Escreva um programa que leia um número inteiro n e depois leia uma sequência de n números fracionários. Após isso, o usuário irá digitar um número fracionário m. O seu programa deverá imprimir:

Todos os números da sequência em ordem decrescente.

Se o número m está na sequência, a ordem em que m foi inserido na sequência. Escreva um programa mais eficiente que conseguir (Dica: use uma busca binária como no problema de advinhação da aula 11) Quantos números da sequência são maiores ou iguais a m e a média desses números.

Referências

Documentos relacionados

Centro de Ensino Superior de São Gotardo Jan-jun 2019 Número XIX Páginas 01-10 Trabalho 01 http://periodicos.cesg.edu.br/index.php/gestaoeengenharia periodicoscesg@gmail.com

O objetivo do presente trabalho foi entender quais os benefícios alcançados por meio da parceria entre a COPASUL, uma empresa com esforços direcionados à comercialização

Parece assim, ter-se contribuído para os estudos sobre a implementação de novas estratégias de ensino e aprendizagem através da literacia visual, enquadradas com a

the human rights legislated at an international level in the Brazilian national legal system and in others. Furthermore, considering the damaging events already

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,

Como parte de uma composição musi- cal integral, o recorte pode ser feito de modo a ser reconheci- do como parte da composição (por exemplo, quando a trilha apresenta um intérprete

Foi membro da Comissão Instaladora do Instituto Universitário de Évora e viria a exercer muitos outros cargos de relevo na Universidade de Évora, nomeadamente, o de Pró-reitor (1976-

Assim sendo, o espaço da estrada é determinante como facilitador de um exercício de uma sexualidade mais plena, aberta e satisfatória, pelo menos para Thelma, e ao