matemática discreta - recursão
DESCRIPTION
Slides de Matemática Discreta - RecursãoTRANSCRIPT
Bibliografia
Matemática Concreta Fundamentos para Ciência da Computação 2ª Edição
Ronald L. Graham, Donald E.
Knuth, and Oren Patashnik
(Reading, Massachusetts: Addison-Wesley, 1994)
Recursão
Aplicações:•Lingüística
•regras de gramática por Panini Sec. 5 AC
•Chomsky
•Gramática formais
•Parsers de linguagens de programação
•Matemática:
•Lógica:
•Axiomatização
•Aritmética de Peano
•Provas Recursivas
•Computação
•Programação Recursiva
•Em linguagens imperativas
•Em linguagens funcionais
•Estrutura de dados recursivas
•Listas, árvores, grafos
•Complexidade de Algoritmos
•Computabilidade
Recursão
T(n) =
Recursão
T(n) = T(n-1) +
Recursão
T(n) = T(n-1) + 1 +
Recursão
T(n) = T(n-1) + 1 + T(n-1)
Recursão
T(1) = 1
T(n) = 2 T(n-1) + 1
T(1) + 1 = 2
T(n) + 1 = 2 T(n-1) + 2
Seja U(n) = T(n)+1
U(1) = 2
U(n) = 2 U(n-1)
U(n) = 2n T(n) = 2n - 1
Recursão
Nova regra: não pode mover direto entre A e C
A B C
Quantos movimentos para transferir n peças entre do
pino A para o pino C?
Recursão
A B C
T(n) =
Recursão
A B C
T(n) = T(n-1) +
Recursão
A B C
T(n) = T(n-1) + 1 +
Recursão
A B C
T(n) = T(n-1) + 1 + T(n-1) +
Recursão
A B C
T(n) = T(n-1) + 1 + T(n-1) + 1
Recursão
A B C
T(n) = T(n-1) + 1 + T(n-1) + 1 + T(n-1)
Recursão
T(1) = 2
T(n) = 3 T(n-1) + 2
T(1) + 1 = 3
T(n) + 1 = 3 T(n-1) + 3
Seja U(n) = T(n)+1
U(1) = 3
U(n) = 3 U(n-1)
U(n) = 3n T(n) = 3n - 1
Recursão
Em quantas regiões (no máximo), pode-se dividir uma pizza (ou
o plano)com n retas?
L(0)=1
L(1)=2
L(2)=4
L(3)=7
L(4)=11
Recursão
L(0) = 1
L(n) = L(n-1) + n
Substituindo temos:
L(n) = 1 + 1 + 2 + 3 + 4 + ... + n
L(n) = 1 + n (n + 1)/2
Recursão
Em quantas regiões fechadas, pode-se dividir o plano com n
retas?
Recursão
Durante a guerra entre judeus e romanos, 11 rebeldes judeus
foram encurralados em uma caverna. Preferindo se matar a
serem capturados. Decidiram formar um círculo e matar cada
terceira pessoa até não sobrar ninguém. Mas Flavius Josefus não
queria saber do pacto suicida, então calculou rapidamente onde
deveriar ficar.
Recursão
Recursão
Nova regra: eliminamos cada segunda pessoa.
Recursão
12
3
4
5
67
8
9
10
11
Recursão
Alguma idéia para calcular o problema recursivamente?
Recursão
12
3
4
5
67
8
9
10
11
Recursão
3
5
79
11
Portanto:
J(2n+1) = 2 J(n) + 1
Isto é:
J(2n+1) =
novoNumero( J(n) )
novoNumero(k) = 2k+1
Recursão
J(1) = 1
J(2n) = 2 J(n) -1, n≥1
J(2n+1) = 2 J(n) + 1 , n≥1
n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
J(n) 1 1 3 1 3 5 7 1 3 5 7 9 11 13 15
Parece que se escrevemos n = 2m+k, onde 2m é a maior potência de 2 não
maior que n, temos:
J(n) = J(2m+k) = 2k +1, o que é fácil provar por indução.
Recursão
n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
n 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111
J(n) 1 1 3 1 3 5 7 1 3 5 7 9 11 13 15
J(n) 1 1 11 1 11 101 111 1 11 101 111 1001 1011 1101 1111
Uma vez que:
J(n) = J(2m+k) = 2k +1
O processo para obter-se J(n) a partir de n na base 2 consiste em retirar o 1º digito 1
da esquerda (2m) e colocá-lo à direita (1), i.e, J(n) = 2(n – 2m )+1
Portanto J∞(n) = 2m – 1, onde m é o número de bits ligados de n.
Combinatória
2n pessoas estão na fila de um circo, cujo ingresso custa R$5,00.
Sabe-se que n pessoas possuem apenas uma nota de R$5,00 e n
pessoas possuem apenas uma nota de R$10,00. De quantas
maneiras a fila pode ser organizada de forma que a bilheteria
sempre tenha troco?
Combinatória
De quantas formas ao todo as 2n pessoas (sendo n com notas de 5)
podem estar na fila?
2
Dessas, quantas formas não servem?
Combinatória
As formas que não servem são as que tocam a reta y=1 (nessa
interpretação diagonal.
2 − 1
Fazendo um reflexão do lado
esquerdo em relação a reta y=1
chegamos aos caminhos que
partem de (2,0), isto é, que têm
n+1 pessoas com notas de 5 e n-1
com notas de 10 portanto
O número de caminhos que servem é portanto:
= -
=
Cn = números de Catalan
Árvores e Número de Catalan
Uma árvore binária é vazia ou um nó que possui um par ordenado de
árvores binárias (arv esquerda e arv direita).
Uma árvore com raiz ordenada é um nó que possui uma lista finita de
árvores ‘filhas’.
Árvores binárias completas com 4 folhas.
Comportamento assintótico
de funçõesSejam g(n): ℤ→ℤ (*). Definimos:
O(g) = f | ∃c>0,∃n0 ,∀n>n0,f(n)≤cg(n)
Θ(g) = f | ∃c1,c2>0,∃n0 ,∀n>n0, c1g(n)≤ f(n)≤c2g(n)
o(g) = f| ∀c>0,∃n0 ,∀n>n0,f(n)≤cg(n) = f | lim→()() = 0
Ω(g) = f | g ∈ O(f)
ω(g) = f | g ∈ o(f)
f ∼ g ↔ | lim→()() = 1
(*) Muitas vezes a definição inclui – com adaptações – funções ℝ→ℝ(ou mesmoℝ→ℝ)
Quicksort
Na linguagem Haskell o algoritmo quicksort é implementado como:
qsort s = case s of[]->[];(x:xs)->qsort [y | y<-xs, y<x] ++ x : qsort [y | y<-xs, y>=x]
A implementação acima escolhe x como pivot, o que não é uma
boa heurística.
Seja qn o número médio de comparações realizadas pelo algoritmo.
Suponto que existem k elementos menores que o Pivot (k = 0..n–1),
existirão n–k –1 elementos maiores que o Pivot, portanto:
= 1 + + 1 +
= 1 + + 2
= 0
Quicksort
= 1 + + 2
= + + 2
− 1 = − 1 + − 1 + 2
− − 1 = 2 + 2
= 2 + + 1
Multiplicando por n
Substituindo n por n – 1
subtraindo
Quicksort
= 2 + + 1
= 0
Substituindo: = 2 + 1 ℎ − 2
ℎ =1 + ℎ
ℎ = 0Obtemos:
Ou seja hn é a série harmônica. Como ℎ = Θ(log n) temos:
= Θ(n log n)