Aula 14 - IC/UFF

Propaganda
Informática I
Aula 14
http://www.ic.uff.br/~bianca/informatica1/
Aula 14 - 10/10/2007
1
Ementa
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Noções Básicas de Computação (Hardware, Software e Internet)
HTML e Páginas Web
Internet e a Web
Javascript e páginas dinâmicas
Números e expressões em Javascript
Formulários em HTML
Histórico dos Computadores
Abstração e Definição de Funções
Algoritmos e linguagens de programação
Programação orientada a eventos
Ciência da computação como disciplina
Execução condicional
Representação de dados
Computação e sociedade
Aula 14 - 10/10/2007
2
Algoritmos
• Um algoritmo é uma seqüência finita e
não ambígua de instruções para executar
uma tarefa específica.
• A programação de computadores pode
ser vista como o processo de criar e
implementar algoritmos que o computador
seja capaz de executar.
Aula 14 - 10/10/2007
3
Análise de algoritmos
• Quando mais de um algoritmo existe para
resolver um problema, é necessário
determinar qual é o melhor.
• O critério de “melhor” é subjetivo.
– Algumas vezes queremos um algoritmo
simples, de fácil entendimento.
– Muitas vezes, estamos preocupados com o
tempo de execução do algoritmo.
Aula 14 - 10/10/2007
4
Exemplo
• No algoritmo 1, perguntamos a cada pessoa sua
idade e comparamos sua idade com a idade no
papel.
– Logo o tempo de execução é proporcional à
quantidade de pessoas.
– Se há 100 pessoas na fila e demoramos 5s para
fazer a pergunta e comparação, então a execução do
algoritmo demora 500s.
– Se o número de pessoas sobe para 200, a execução
demora 1000s.
– Em geral, o tempo de execução será 5*N, onde N é o
número de pessoas na sala.
Aula 14 - 10/10/2007
5
Exemplo (cont.)
• No algoritmo 2, fazemos várias comparações
simultaneamente, o que economiza tempo.
– O tempo de execução é proporcional ao número de
rodadas do algoritmo e não ao número de pessoas.
– A cada rodada, o número de pessoas é diminuído
pela metade.
• Se começamos com 8 pessoas, teremos 3 rodadas (8→4,
4→ 2, 2→1).
• Se começamos com 16 pessoas, teremos 4 rodadas (16→8,
8→ 4, 4→ 2, 2→1).
• Em geral, o número de rodadas será log2(N).
• Logo, se demora 5s para fazer uma comparação, o tempo de
execução será 5* log2(N).
Aula 14 - 10/10/2007
6
Exemplo (cont.)
• Como log2(N) cresce
muito mais devagar do
que N, o algoritmo 2 é
muito mais rápido para
valores de N grandes.
Aula 14 - 10/10/2007
7
Representando
o tempo de execução
• Para representar o tempo de execução de
um algoritmo em relação ao tamanho do
problema, cientistas da computação usam
a notação O (ordem).
– Um algoritmo O(N) tem o tempo de execução
proporcional ao tamanho N do problema.
– Um algoritmo O(log(N)) tem o tempo de
execução proporcional ao logaritmo do
tamanho N do problema.
Aula 14 - 10/10/2007
8
Algoritmos de busca
• O problema de achar a pessoa mais velha
é parecido com vários problemas que
encontramos em programação.
– Por exemplo, num banco de dados de uma
loja contendo centenas de produtos
queremos procurar um produto com alguma
característica.
• Algoritmos para esse tipo de problema
são chamados de algoritmos de busca.
Aula 14 - 10/10/2007
9
Busca Seqüencial
• O algoritmo mais simples para fazer busca em uma lista
é a busca seqüencial.
– Cada item da lista é examinado em seqüência até que o item
desejado seja encontrado.
– Fica impraticável para listas muito grandes.
• Imagine fazer uma busca em uma lista telefônica desta forma.
Busca seqüencial para encontrar um item em uma lista
1. Comece no início da lista.
2. Para cada item da lista:
a. Examine o item. Se este é o item procurado, terminou a busca.
b. Se este não é o item procurado, vá para o próximo item.
Aula 14 - 10/10/2007
10
Busca Binária
• É uma maneira mais eficiente de se fazer
busca em uma lista, se a lista tem ordem.
– Por exemplo, uma lista telefônica é
organizada por ordem alfabética.
– O primeiro passo é examinar um item no
meio da lista.
• Se este for o item procurado, a busca terminou.
• Senão continua-se a busca na primeira metade se
o item for “maior” do que o procurado e na
segunda metade se o item for “menor”.
Aula 14 - 10/10/2007
11
Busca Binária
Busca binária para encontrar um item em uma lista
1. Inicialmente considere o intervalo válido como sendo lista inteira.
2. Enquanto existam itens no intervalo válido e o item procurado não for
encontrado:
a. Examine o item no meio do intervalo válido.
b. Se o item do meio for o item procurado, a busca terminou.
c. Se o item do meio for maior que o item procurado, reduza o
intervalo válido de modo que ele cubra apenas os itens à
esquerda do item do meio.
d. Se o item do meio for menor que o item procurado, reduza o
intervalo válido de modo que ele cubra apenas os itens à direita
do item do meio.
Aula 14 - 10/10/2007
12
Exemplo
• Busca por Illinois
Aula 14 - 10/10/2007
13
Análise dos algoritmos
• Busca seqüencial:
– Cada item da lista é examinado.
– Logo o tempo de execução é O(N) onde N é o
tamanho da lista.
• Busca binária:
– Cada item examinado elimina metade dos itens
válidos.
• Então temos o efeito logaritmico.
– Logo o tempo de execução é O(logN) onde N é o
tamanho da lista.
– Usando busca binária, podemos encontrar um item
em uma lista de 1 milhão de itens fazendo 24
consultas.
Aula 14 - 10/10/2007
14
Algoritmo para Raiz Quadrada
• Em Javascript vimos a função Math.sqrt que
calcula raiz quadrada.
– Não precisávamos entender o seu funcionamento
interno, apenas como usá-la.
• Agora veremos como implementar uma função
que calcule raiz quadrada.
• Existem muitos algoritmos com este propósito.
– Um simples foi inventado por Newton no século XVII.
Aula 14 - 10/10/2007
15
Algoritmo para Raiz Quadrada
Algoritmo de Newton para calcular raiz quadrada de N:
1. Comece com a raiz inicial 1.
2. Enquanto houver mudança na raiz:
a. Modifique a raiz utilizando a fórmula:
raiz = (raiz + N/raiz)/2
Calculando a raiz quadrada de 1024:
Aula 14 - 10/10/2007
16
Algoritmos e Programação
• Programar nada mais é do que projetar e
implementar algoritmos para resolver
problemas.
– Os algoritmos têm que ser especificados
precisamente para que o computador possa
entendê-los.
– Por isso, não utilizamos linguagem comum e
sim uma linguagem de programação para
especificar os algoritmos para o computador.
Aula 14 - 10/10/2007
17
Linguagens de Máquina
• As primeiras linguagens de programação,
introduzidas nos anos 40, têm instruções
que correspondem exatamente às
operações do hardware da máquina.
– Por isso são chamadas de linguagem de
máquina.
– Elas lidam diretamente com os componentes
do hardware, incluindo a memória e
registradores.
Aula 14 - 10/10/2007
18
Linguagens de Máquina
• Exemplo de programa em linguagem de máquina:
– Mover o valor do endereço de memória 100 para o registrador 3.
– Adicionar 1 ao valor do registrador 3.
– Pular para a instrução no endereço de memória 1024.
• Porém, as instruções acima não são dadas em
português e sim em binário:
– 0110000000011
– 1100000100011
– 0101010000000
• Programas em linguagem de máquina são compostos
de sequências de números binários correspondentes a
operações do hardware.
Aula 14 - 10/10/2007
19
Linguagens Assembly
• Programas em linguagem de máquina são muito
difíceis de entender e corrigir.
• Nos anos 1950, foram criadas as linguagem
Assembly que tem um nível de abstração maior.
– As instruções são especificadas usando palavras e
não números em binário.
• Exemplos
– MOV #100, R3
– ADD 1, R3
– JUMP #1024
– Mas as instruções ainda são equivalentes a
operações no hardware.
Aula 14 - 10/10/2007
20
Linguagens de Alto Nível
• Linguagens de alto nível permitem a programação de
maneira mais próxima a que os humanos pensam.
– Definição e uso de variáveis ao invés de registradores e
posições na memória.
– Escolhas condicionais (IF) ao invés de pular para uma instrução
na memória.
– Repetição de comandos.
– Definição de funções.
• Dessa forma fica mais fácil descrever a solução de um
problema do que usando linguagem de máquina ou
Assembly.
• Exemplos: Fortran, C, C++, Pascal, Java, JavaScript,…
Aula 14 - 10/10/2007
21
Mesmo programa em duas
linguagens
Aula 14 - 10/10/2007
22
Compilação
• Os programas em linguagem de alto nível tem
que ser “traduzidos” para linguagem de máquina
antes de serem executados.
• O programa que faz essa tradução é chamado
de compilador.
– O compilador recebe como entrada um arquivo em
linguagem de alto nível e produz um arquivo em
linguagem de máquina (.exe).
• Algumas linguagens não são compiladas e sim
interpretadas.
– Cada comando é “traduzido” individualmente e
executado logo após a tradução.
Aula 14 - 10/10/2007
23
Compilação
Aula 14 - 10/10/2007
24
Download