matemática discreta - recursão

35
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)

Upload: agarciabr

Post on 23-Jan-2016

32 views

Category:

Documents


0 download

DESCRIPTION

Slides de Matemática Discreta - Recursão

TRANSCRIPT

Page 1: Matemática Discreta - Recursão

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)

Page 2: Matemática Discreta - Recursão

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

Page 3: Matemática Discreta - Recursão

Recursão

T(n) =

Page 4: Matemática Discreta - Recursão

Recursão

T(n) = T(n-1) +

Page 5: Matemática Discreta - Recursão

Recursão

T(n) = T(n-1) + 1 +

Page 6: Matemática Discreta - Recursão

Recursão

T(n) = T(n-1) + 1 + T(n-1)

Page 7: Matemática Discreta - Recursão

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

Page 8: Matemática Discreta - Recursão

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?

Page 9: Matemática Discreta - Recursão

Recursão

A B C

T(n) =

Page 10: Matemática Discreta - Recursão

Recursão

A B C

T(n) = T(n-1) +

Page 11: Matemática Discreta - Recursão

Recursão

A B C

T(n) = T(n-1) + 1 +

Page 12: Matemática Discreta - Recursão

Recursão

A B C

T(n) = T(n-1) + 1 + T(n-1) +

Page 13: Matemática Discreta - Recursão

Recursão

A B C

T(n) = T(n-1) + 1 + T(n-1) + 1

Page 14: Matemática Discreta - Recursão

Recursão

A B C

T(n) = T(n-1) + 1 + T(n-1) + 1 + T(n-1)

Page 15: Matemática Discreta - Recursão

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

Page 16: Matemática Discreta - Recursão

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

Page 17: Matemática Discreta - Recursão

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

Page 18: Matemática Discreta - Recursão

Recursão

Em quantas regiões fechadas, pode-se dividir o plano com n

retas?

Page 19: Matemática Discreta - Recursão

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.

Page 20: Matemática Discreta - Recursão

Recursão

Page 21: Matemática Discreta - Recursão

Recursão

Nova regra: eliminamos cada segunda pessoa.

Page 22: Matemática Discreta - Recursão

Recursão

12

3

4

5

67

8

9

10

11

Page 23: Matemática Discreta - Recursão

Recursão

Alguma idéia para calcular o problema recursivamente?

Page 24: Matemática Discreta - Recursão

Recursão

12

3

4

5

67

8

9

10

11

Page 25: Matemática Discreta - Recursão

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

Page 26: Matemática Discreta - Recursão

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.

Page 27: Matemática Discreta - Recursã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.

Page 28: Matemática Discreta - Recursão

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?

Page 29: Matemática Discreta - Recursão

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?

Page 30: Matemática Discreta - Recursão

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

Page 31: Matemática Discreta - Recursão

Á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.

Page 32: Matemática Discreta - Recursão

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ℝ→ℝ)

Page 33: Matemática Discreta - Recursão

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

Page 34: Matemática Discreta - Recursão

Quicksort

= 1 + + 2

= + + 2

− 1 = − 1 + − 1 + 2

− − 1 = 2 + 2

= 2 + + 1

Multiplicando por n

Substituindo n por n – 1

subtraindo

Page 35: Matemática Discreta - Recursão

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)