Modelos de Computação e Medidas de Complexidade - LAC

Propaganda
Introdução
Ciência da Computação
estudo de algoritmos
–ÊNFASE ao estudo de DADOS
armazenamento
manipulação
refinamento (a partir de dados cru)
estrutura para representação
Introdução (cont.)
Construção de programas eficientes

estruturas de dados eficientes
Um algoritmo é uma receita para resolver problemas cujos
os passos são concretos e não ambíguos. O algoritmo deve
ser correto, de tamanho finito e parar para todos os inputs.
Um problema é uma tarefa a ser executada, ou uma
pergunta a ser respondida.
Um programa é uma “instancialização” de um algoritmo
em uma linguagem de programação de computadores.
Introdução (cont.)
Algoritmo: é um método para
resolver um problema.
Propriedades:
a. deve ser correto
b. possui passos concretos
c. não possui ambigüidades
d. possui número finito de passos
e. deve terminar
Introdução (cont.)
Algoritmo - conceito intuitivo para ajudar pessoas
a expressar soluções de problemas
Programas - expressar algoritmos numa linguagem
formalmente definida
Computação Numérica x Computação Comercial
“computation intensive” x “data intensive”
3a Geração - Processamento Gráfico
• Objetos Geométricos, Figuras
• Interface com usuário
• CAD - Proc. Imagens - Rec. Padrões
Geometria
Computac.
Introdução (cont.)
Especificação da Estrutura de dados X Implementação
Especificação
concentração em descrever o funcionamento
não há preocupação na implementação
Análise de algoritmos
comportamento do algoritmo (perfil de desempenho)
medidas em termos de esforço computacional + espaço
Explorar vários tipos de objetos de dados
Considerar as classes de operações para cada objeto
Representar objeto com suas operações eficientemente
Introdução (cont.)
Tipo de dado - data type
associação do tipo ao nome da variável
Tipos built-in com operações - FORTRAN, C
possibilidade de criar tipos (C - struct)
Domínio - data object - domínio do tipo do dado
refere ao conjunto de elementos (Inteiros - {... -2, -1, 0, 1, 2, ...} )
pode ser finito ou infinito
Estrutura de Dados - Data Structure
conjunto de objetos e como eles são relacionados

operações aplicadas aos elementos do objeto
ex: objeto INTEGER com operações +, -, *, ÷
Introdução (cont.)
•Uma solução é dita ser eficiente se ela resolve o
problema dentro das restrições de recursos impostas
•O custo de uma solução é a quantidade de recursos
que a solução consome.
•Muito freqüentemente, o custo é estimado através
de um único recurso, como o tempo
Introdução (cont.)
•Uma estrutura de dados exige uma certa
quantidade de espaço para cada item a ser
armazenado, uma certa quantidade de tempo
para executar uma única operação básica, e
um certo esforço de programação
•Cada solução para um problema usa as
operações básicas em alguma proporção, e a
seleção de uma estrutura de dados deve
levar isso em conta
Modelos de Computação e
Medidas de Complexidade
Problema  como achar um algoritmo
eficiente de solução?
Se há um algoritmo, como compará-lo
com outros?
Como julgar se um algoritmo é bom?
O que pode ser “computado” ou não
por um algoritmo?
Modelos de Computação e
Medidas de Complexidade (cont.)
Especificação de Modelo de Computação
Por que?
Para executar o algoritmo
Não Existe um Modelo que satisfaz todas
as situações
Palavra com tamanho aleatório
Palavra com tamanho finito
Para cada problema, deve ser selecionado o
Modelo de Computação mais adequado
Modelos de Computação e
Medidas de Complexidade (cont.)
Modelos já sugeridos por
•Emil Post
•Alan Turing
•Alonzo Church

Modelos Equivalentes
Sistemas de Produção
Máquinas de Turing
Funções Recursivas
RAM - Random Access Memory
Modelos de Computação e
Medidas de Complexidade (cont.)
RAM - Random Access Memory
•Capacidade de Memória Ilimitada
•Cada célula da Memória com tamanho ilimitado
•Unidade aritmética
Modelos de Computação e
Medidas de Complexidade (cont.)
Exemplo de um Algoritmo
read r1
if r1  0 then write 0
else {
r2  r1
r3  r1 - 1
while r3 > 0 do {
r2  r2 * r1
r3  r3 - 1
}
write r2
}
n

 n , se n  1
f ( n)  

 0, caso contrário
3 (n - 1)
O(n)
Modelos de Computação e
Medidas de Complexidade (cont.)
Complexidade dá uma idéia de upper bound
Por que não um lower bound?
O (g)
(g)
(g)
o(g)
f  O(g)
f  (g)
f  (g)
f  o(g)
f cresce no máximo tão rápido quanto g(x) para x  
f cresce no mínimo tão rápido quanto g(x) para x  
tem o mesmo crescimento de g(x) para x  
f cresce mais lentamente que g(x) para x  
Download