introdução, revisão de estrutura de dados revisão matemática · 2 bibliografia livro texto •...
TRANSCRIPT
1
Análise e Complexidade d Al itde AlgoritmosIntrodução, Revisão de Estrutura de DadosRevisão Matemática
http://www.bolinhabolinha.comProf. Rodrigo [email protected]
Apresentação
Rodrigo Rocha [email protected] Ementa
• Revisão:Estrutura de dados;Crescimento de funções;Estrutura de dados;Crescimento de funções;
Indução matemática e métodos matemáticos.
Medidas de complexidade, análise assintótica de limites de complexidades.
Exemplos de análise de algoritmo iterativos e recursivos.
Análise de desempenho de alguns algoritmos clássicos de busca e ordenação.
Introdução aos principais paradigmas do projeto de algoritmos.
Complexidade do Problema: Limites de Complexidade, Intratabilidade, Classes P, NP, problemas Np completos e NP-difíceis.
2
Bibliografia LIVRO TEXTO
• 1) CORMEN, Thomas H.. Algoritmos : teoria e prática. 2ª ed. Rio de Janeiro: Campus, 2002.
• 2) SIPSER, Michael. Introdução a Teoria da Computação. 2ª d Th Pi i 2007ed. : Thompson Pioneira, 2007.
• 3) ZIVIANI, Nivio. Projeto de Algoritmos : com implementação em Pascal e C.. 2ª ed. São Paulo: Pioneira Thomson Learning, 2004.
COMPLEMENTAR• 1) TOSCANI, Laira Vieira; VELOSO, Paulo A. S.. Complexidade de
Algoritmos. 2ª ed. Porto Alegre: Bookman, 2008.g g ,
• 2) KNUTH, Donald E.. The Art of Computer Programming, Volume I : Fundamentals Algorithms. 3ª ed. Estados Unidos: Addison Wesley, 2008.
• 3) MANZANO, José Augusto N. G; OLIVEIRA, Jayr Figueiredo. Algoritmos : lógica para desenvolvimento de programação de computadores. 21ª ed. São Paulo: Érica, 2008.
• 4) SALVETTI, Dirceu D.. Algoritmos. 1ª ed. São Paulo: Makron Books, 1998.
• 5) BOAVENTURA NETTO, Paulo O.. Grafos : teoria, modelos, algoritmos. 4ª ed. São Paulo: Edgard Blucher, 2006.
Metodologia e Avaliação
Metodologia• Aula expositiva• Exercício em classe• Práticas em Laboratório• Práticas em Laboratório
Avaliação• 40%
Atividades (3,0)Avaliação (7,0)
• 60%Atividades (3,0)Avaliação Oficial (7,0)
3
Cronograma
Algums perguntinhas...
O que é um algoritmo ?
Como você sabe se um algoritmo é eficiente ou não ?
O algoritmo resolver o problema significa O algoritmo resolver o problema significa que ele é eficiente?
4
Introdução
“Um algoritmo é um procedimento, consistindo de um conjunto de regras não ambíguas, as quais especificam, para cada entrada, uma seqüência finita de operações, terminando com uma saída correspondente.
Um algoritmo resolve um problema quando, para qualquer entrada, produz uma resposta correta, se forem concedidos tempo e memória suficientes para sua execução.
Os recursos de espaço e tempo requeridos têm grande importância em casos práticos.
Às vezes o algoritmo mais imediato está longe de ser Às vezes, o algoritmo mais imediato está longe de ser razoável em termos de eficiência.”
(Do livro Complexidade de Algoritmos – Laira V. Toscani & Paulo S. Veloso. 2ª edição. Sagra-Luzzatto, 2005)
Introdução
Um programa codifica um algoritmo para ser executado em um computador, resolvendo assim um problemap
Base matemática é necessária para respondermos algumas questões?• O problema tem solução ? (Existe um
algoritmo?)
• Classe de complexidade de um problema. (O algoritmo é eficiente?)
5
Análise de algoritmo
Características de performance (uso dos recursos)• tempo, memória, banda, etc ...tempo, memória, banda, etc ...
• foco: tempo de execução
Por que analisar os algoritmos?• escolher o algoritmo mais eficiente para
solucionar um problema
• o tempo de execução e razoável para aplicações práticas ?
• O algoritmo é ótimo ?
Análise de algoritmos
O fato de um algoritmo resolver um problema não implica que ele seja aceitável na prática.p• Exemplo: Achar o determinante de uma
matriz n x n
6
Análise de algoritmos
Mesmo com máquinas cada vez mais rápidas devo me preocupar com o desempenho do algoritmo ? p g
Revisão estrutura de dados
Estrutura de Dados• um caminho sistemático para organizar e
acessar dados
• tipos: vetores
pilha
fila
lista
árvore
grafo
tabela de hashing
7
ArrayARRAY
• Coleção de itens do mesmo tipo
• Tempo de acesso constante
• Controlado pelo índice• Controlado pelo índice
• Remoção custosa se não quisermos ter espaços vazio
• Exercício: Implementar a remoção de um elemento, eliminado o espaço
deixado por ele.
Pilha (Stack)
Características• LIFO Last In First Out último elemento inserido será o primeiro removidop
a-) pilha S com 4 elementos, b-) PUSH(S,17) e PUSH(S,3) c-) Pilha após POP(S)
STACK-EMPTY(S)1 if top[S] = 0 2 then return TRUE 3 else return FALSE
PUSH(S, x)1 top[S] ← top[S] + 1 2 S[top[S]] ← x
POP(S) 1 if STACK-EMPTY(S) 2 then error "underflow" 3 else top[S] ← top[S] - 1 4 return S[top[S] + 1]
8
Fila (Queue)
Características• FIFO – First In First Out primeiro elemento inserido e o primeiro removidop p
ENQUEUE(Q, x)1 Q[tail[Q]] ← x2 if tail[Q] = length[Q] 3 then tail[Q] ← 1 4 else tail[Q] ← tail[Q] + 1
a-) fila com 5 elementos Q[7..11] b-) enqueue(Q,17), enqueue(Q,3) e enqueue(Q,5)c-) Pilha após dequeue(Q)
4 else tail[Q] ← tail[Q] + 1
DEQUEUE(Q)1 x ← Q[head[Q]] 2 if head[Q] = length[Q] 3 then head[Q] ← 1 4 else head[Q] ← head[Q] + 1 5 return x
Exercícios
10.1-1 (Cormen) Ilustre o resultado de cada operação na seqüência PUSH(S, 4), PUSH(S, 1), PUSH(S, 3), POP(S), PUSH(S, 8), e POP(S) em uma pilha S implementada em um vetor S[1..6].
10.1-3 (Cormen) Ilustre o resultado de cada operação na seqüência ENQUEUE(Q, 4), ENQUEUE(Q, 1), ENQUEUE(Q, 3), DEQUEUE(Q), ENQUEUE(Q, 8), e DEQUEUE(Q) em uma fila Q implementada em um vetor Q[1 .. 6].
10.1-4 (Cormen) Reescreva as funções ENQUEUE e DEQUEUE para detectar underflow e overflow.
9
Lista Ligada
elementos em sequencia
diferente do vetor:• não é tem número de elementos fixos• não é tem número de elementos fixos
• ordem no vetor é pelo índice, já na lista e pelo ponteiro que indica o próximo elemento
Lista duplamente ligada Cada nó possui:
• chave, apontador para o próximo e apontador para o anterior
a-) lista duplamente encadeade {9,16,4,1} b-) LIST-INSERT(L, x), onde key[x] = 25 c-) LIST-DELETE(L, x), onde x aponta para o objeto com chave 4.
LIST-SEARCH(L, k) 1 x ← head[L] 2 while x ≠ NIL and key[x] ≠ k3 do x ← next[x] 4 return x
LIST-INSERT(L, x)1 next[x] ← head[L] 2 if head[L] ≠ NIL 3 then prev[head[L]] ← x4 head[L] ← x5 prev[x] ← NIL
LIST-DELETE(L, x) 1 if prev[x] ≠ NIL 2 then next[prev[x]] ← next[x] 3 else head[L] ← next[x] 4 if next[x] ≠ NIL 5 then prev[next[x]] ← prev[x]
10
Lista duplamente ligada
com “sentinela”
Árvores
Uma estrutura de dados não linear composta de um nó raiz e vários elementos ligados a estag
só pode ter um nó raiz
nós ligados a raiz são chamados filhos
nós sem filhos são chamados de folhas
11
Arvoré binária
Uma árvore em que: Cada um dos nós tem somente dois filhos
Exercício (Cormen 10 4 1):Exercício (Cormen 10.4-1):Desenhe a árvore binária, que tem raiz no indice 6 e é representada pelos seguintes campos:
Grafo
um conjunto de pontos (vértices) ligados por retas (as arestas)
Uso:Uso:• mapa de estradas
12
Tabela Hash
Associa chaves de pesquisa (hash) a valores busca rápida função de espalhamento
• gera indica a partir de uma chavegera indica a partir de uma chave• entradas A e B geram saídas diferentes, senão geram colisão• colisão intolerável, hash de criptografia
Usos:• cache, indexação de base de dados
Revisão Matemática
Exponenciação• xn = x * x * x * x * x * x .... (n vezes o x) x = base n = expoentep
• Exemplo:
• (-3)4 = (-3) * (-3) * (-3) * (-3) = 81
• -(34) = -(3 * 3 * 3 * 3) = -81
13
Revisão
Exponenciação – propriedades• xm * xn = x m+n
x2 * x3 = x * x * x * x * x
• Exemplos:
• a2 * a3 = a5
•
• x0 = 1
Revisão
Exponenciação – propriedades
• Exemplos
14
Revisão
Exponenciação - propriedades
EXEMPLOS:
Revisão
Exponenciação - propriedades
EXEMPLOS:
EXEMPLOS:
15
Revisão
Exponenciação – simplificando expressões
Revisão
Exponenciação – Exercícios• Simplifique os expoentes das expressões
16
Revisão
Exponenciação – Exercícios• Simplifique os expoentes das expressões
Revisão
Logaritmos• log ba=c se, e somente se, bc = aOnde b>0, b<>0 e a>0,
• Exemplo32=9 log39=2
23=8 log28=3
Log10100 = 102
• PropriedadesPropriedadesLogbb=1
Logb1=0
Logbbc=c
17
Revisão
Logaritmos Propriedades
Revisão
Logaritmos : Exercícios• a-) 152 = 225, logo: log15225 = 2
b-) 63 = 216, logo: log6216 = 3) g g6
c-) 54 = 625, logo: log5625 = 4d-) 70 = 1, logo: log71 = 0
e-) log28 = 3 porque 23 = 8.f-) log41 = 0 porque 40 = 1.g-) log39 = 2 porque 32 = 9. h-) log55 = 1 porque 51 = 5.
18
Revisão
Notação Científica• Um número positivo está escrito em notação
científica quando está nesta forma:
Onde 1<= a < 10, e r número inteiro expoente de 10
Dica:• 1-) Colocar “,” (vírgula após o primeiro algarismo
a x 10r
1 ) Colocar , (vírgula após o primeiro algarismo• 2-) Contar o número de decimais
Para esquerda -> positivo, direita -> negativo
• 3-) Escrever o produto do número por 10 elevado ao número de casa “puladas” (passo 2)
Revisão
Notação científica• Exemplos5.340.000.000.000
– 5,32 x 1012
0,000015– 1,5 X 10-5
• Exercícios: Escrever em notação científica: 123400
1 234 105– 1,234 x 105
Escrever na forma decimal
19
Revisão
Notação científica• Exercícios: Escrever em notação científica: 123400ç
– 1,234 x 105
Escrever o número na forma decimal, sem expoente
–
Escrever na forma decimalEscrever na forma decimal–
Revisão
Polinômio• p(x) = ao + a1x + a2x² + a3x³ +...+ anxn
a’s – coeficientes
t t a0 – constante
termos anxn
• Grau do polinômioEm um polinômio, o termo de mais alto grau que possui um
coeficiente não nulo é chamado termo dominante e o coeficiente deste termo é o coeficiente do termo dominante. O grau de um polinômio p=p(x) não nulo, é o expoente de seu termo dominante
– 5x
– 5x +10
– 2x2 +5x + 10
20
Revisão
Polinômios• Multiplicação
Revisão
Polinômios – Exercícios• Qual o grau do polinômio
a-) -10 b-) 20 – 2x2 c-) 10x4 + 3x2 + 11
• Resolva
a ) 10 b ) 20 2x c ) 10x + 3x + 11
21
Revisão
Polinômios – Exercícios• Resolva
Revisão
Seqüências• Arranjo ordenado de números, figuras, ...
• {1,2,3,4, ...}{1,2,3,4, ...}
• {1,1,2,3,5,8, ...}
• Finita {1,2,3,...,n}
• Infinita {1,2,3, ....}
• Fatorial !n! = n(n - 1)(n - 2)(n - 3)...(1)
4! = 4 * 3 * 2 * 1
0! = 1
22
Revisão
Seqüências• bn = 0,5n + 8
• b1 = 0,5*1 + 8b1 0,5 1 8
• b2 = 0,5*2 + 8
• Qual o décimo elemento ?B10 = 0,5 * 10 + 8 = 5 * 8 = 40
Q l é ê i l f t l• Qual é a sequência real f tal que Im(f)={2,7,12,...}?
Revisão
Notação soma
Exemplos: Série finita
= 12 + 15 + 18 + 21
Exemplos: Série tendendo ao infinito
= 8 + 8 + 8 + 8 + 8 + .....
23
Revisão
Exercício• Achar o resultado:
Revisão
Exercício• Achar o resultado:
24
Revisão
PROGRESSÕES ARITMÉTICAS (Soma dos "n" primeiros termos)
• Sn = (a1 + an) . N
2
Revisão
Exemplo:
• Achando o 1. termo0,2i + 5
0,2(1) + 5 = 5,2
• Achando o último termo0 2i + 50,2i + 5
0,2(20) + 5 = 9
25
Revisão
Exemplo:
• Achando o 1. termo-2n + 3
-2*(5) + 3 = -7
• Achando o último termo 2 + 3-2n + 3
-2*(14) + 3 = -25
Revisão
Outras somassérie aritmética
série geométrica
para x<>1
soma dos quadrados e cubos
é i h ô isérie harmônica