1 BCC101 – Matemática Discreta Indução / Recursão.

30
1 BCC101 – Matemática Discreta Indução / Recursão

Transcript of 1 BCC101 – Matemática Discreta Indução / Recursão.

Page 1: 1 BCC101 – Matemática Discreta Indução / Recursão.

1

BCC101 – Matemática Discreta

Indução / Recursão

Page 2: 1 BCC101 – Matemática Discreta Indução / Recursão.

Recursão

Algumas vezes é difícil definir um objeto ou obter a solução de um problema ou diretamente. Entretanto, pode ser mais fácil definir esse objeto, ou obter a solução do problema, em termos dele próprio.

Por exemplo, a sequência de potências de 2, an = 2n para n≥0 pode também ser definida recursivamente como:

a0 = 1 an+1 = 2 an

Podemos usar recursão para definir sequências, funções, conjuntos etc

BCC101 - Matemática Discreta - DECOM/UFOP 2

Page 3: 1 BCC101 – Matemática Discreta Indução / Recursão.

Fatorial

Fatorial: n! = 1x2x…x(n-1)xn0!= 1 (inicialização)n!= n · (n -1)! (recursão)

EX: 5!

3

recursão

= 5 · 4! = 5 · 4 · 3! = 5 · 4 · 3 ·

2! = 5 · 4 · 3 · 2 · 1!

= 5 · 4 · 3 · 2 · 1 · 0!

inicialização

= 5 · 4 · 3 · 2 · 1 · 1

Page 4: 1 BCC101 – Matemática Discreta Indução / Recursão.

Fibonacci

Fibonacci

fib 0 = 0fib 1 = 1fib n = fib (n -1) + fib (n -2)

Esse algoritmo é O(2n ) porque ao passar de n para n-1 efetuamos 2 chamadas recursivas da função, e cada uma usa, por sua vez, duas outras chamadas recursivas, e assim por diante.

4

Page 5: 1 BCC101 – Matemática Discreta Indução / Recursão.

Coeficientes Binomiais (n,k)

Coeficientes binomiais ocorrem em diversas aplicações: Combinatória/Probabilidade C (n,k) =

número de maneiras de escolher k elementos de um conjunto com n elementos

Algebra: C (n,k) = coeficiente do k esimo termo na expansão binômio de grau n: (x + y )n

5

k

nknC ),(

Notação usada comumente:

Page 6: 1 BCC101 – Matemática Discreta Indução / Recursão.

Coeficientes Binomiais (n,k)

A maneira mais eficiente de computar todos os C (n,k) até um determinado n é via o triângulo de Pascal.

O triângulo de Pascal é construído colocando 1 no topo (inicialização) e todo elemento seguinte é definido recursivamente como a soma dos números à direita e à esquerda desse número, na linha anterior. Se tal número não existe, é considerado 0.

6

Page 7: 1 BCC101 – Matemática Discreta Indução / Recursão.

Coeficientes Binomiais (n,k)

11 1

1 2 1 1 3 3 1

1 4 6 4 1 1 5 10 10 5 1

1 6 15 20 15 6 1

7

n = linha0123456

0 k = coluna diagonal 1 2 3

4 5 6Qual é o valor de C

(6,4) ?Qual é a fórmula recursiva para C (n,k) ?

Page 8: 1 BCC101 – Matemática Discreta Indução / Recursão.

Coeficientes Binomiais (n,k)

Resposta: Use o triângulo de Pascal.Inicialização: O topo do triângulo é 1.

Portanto, C (0,0) = 1. Se falta um número, ele é considerado 0. Isso dá origem a C (n,k) = 0 se k < 0, ou k > n.

Recursão: Cada valor é a soma dos números à direita e à esquerda na linha anterior:

C (n,k) = C (n -1,k-1) + C (n -1,k -1)

8

Page 9: 1 BCC101 – Matemática Discreta Indução / Recursão.

Coeficientes Binomiais (n,k)

Resumindo:

9

Page 10: 1 BCC101 – Matemática Discreta Indução / Recursão.

Máximo Divisor Comum - mdc

O algoritmo de Euclides usa o fato: mdc(x,y ) = mdc(y, x mod y)

10

contrário caso

if

),mod,(

0 ,),(

yxymdc

yxyxmdc

supomos aqui que x > 0

Page 11: 1 BCC101 – Matemática Discreta Indução / Recursão.

Definições Recursivasde Operações Aritméticas

Operações aritméticas podem também ser definidas recursicamente. Por exemplo, se ssabemos com somar 1 podemos definir a adição de qualquer número não negativo:

11

Page 12: 1 BCC101 – Matemática Discreta Indução / Recursão.

Definições RecursivasSomatório

Definição recursiva de somatório:

12

0 ,

0 ,01

11 naa

n

an

n

ii

n

ii if

if

Page 13: 1 BCC101 – Matemática Discreta Indução / Recursão.

Definições RecursivasProdutório

13

nn

n

ii aaaaa

121

1

O produtório também pode ser definido de maneira recursiva. Como seria tal definição?

0 ,

0 ,11

11 naa

n

an

n

ii

n

ii if

if

Note que a inicialização é definida de modo que o “produto de nenhum número” é 1.

Page 14: 1 BCC101 – Matemática Discreta Indução / Recursão.

Definição Recursiva de Conjunto

Alguns conjuntos podem ser definidos recursivamente Começamos com alguns elementos base e definimos os demais elementos recursivamente, usando algumas operações. O conjunto definido é constituído de todos os elementos que podem ser obtidos a partir dos elementos base, usando um número finito de aplicações da recursão.

14

Page 15: 1 BCC101 – Matemática Discreta Indução / Recursão.

Definição Recursiva de Conjunto

EX: O conjunto S de valores que se pode pagar somente com moedas de 10 e de 25 centavos

Base: 0 é membro de SRecursão: Se x S então

x+10 S e x+25 S

Q: Qual é o conjunto S ?

15

Page 16: 1 BCC101 – Matemática Discreta Indução / Recursão.

Definição Recursiva de Conjunto

R: S = {0,10,20,25,30,35,40,45,… }Note que os elementos não precisam

ser definidos de modo unívoco. Ex:50 = 0 + 25 + 25

= 0 + 10 + 10 + 10 + 10 + 10

16

Page 17: 1 BCC101 – Matemática Discreta Indução / Recursão.

Definição Recursiva de Conjunto

Dê uma definição recursiva para o conjunto T dos números negativos e positivos que são potências de 2

T = { …,1/32,1/16,1/8, ¼, ½, 1, 2, 4, 8, 16, …}

Resposta:Base: 1 TRecursão: 2x T e x/2 T se x T

17L16

Page 18: 1 BCC101 – Matemática Discreta Indução / Recursão.

Exercícios

1. Dê uma definição recursiva para o conjunto potência de S : P (S ).

2. Dê uma definição recursiva para o conjunto de bitstrings bs

3. Dê uma definição recursiva para o conjunto de bitstrigs que são palindromos pal

18L16

Page 19: 1 BCC101 – Matemática Discreta Indução / Recursão.

Sequências, Listas, Strings

Sequências ou listas são fundamentais em computação. Toda estrutura discreta pode ser descrita como uma sequência de caracteres:

Números decimais : 1010230824879 Números binários : 0111010101010111 Texto. Ex. este documento Programas de computador Padrões da natureza

DNA Proteins

Linguagens de programação19

Page 20: 1 BCC101 – Matemática Discreta Indução / Recursão.

Sequências, Listas, Strings

Notação:

[a] representa o tipo (ou conjunto) das listas de elementos de um dado tipo a como [a]. Ex:

[2,5,23] :: [Int][‘a’, ‘b’, ‘c’, ’d’] :: [Char][(2,’a’), (9,’d’)] :: [(Int,Char)] [[‘a’, ‘b’], [‘c’], []] :: [[Char]]

20

Page 21: 1 BCC101 – Matemática Discreta Indução / Recursão.

Sequências, Listas, Strings

DEF: O tipo [a] pode ser definido recursivamente do seguinte modo:

[] :: [a] se x :: a e xs::[a] então (x:xs) :: [a]

Ex:[1,2,3] = 1:[2,3]

= 1:(2:[3]) = 1:(2:(3:[]))

21

Page 22: 1 BCC101 – Matemática Discreta Indução / Recursão.

Funções sobre listas - Length

A função length :: [a] -> Int computa o comprimento (ou número de elementos) de uma lista

Ex: length [1,6,10,3,9] = 5 length [‘u’,’m’] = 2 length [[‘a’, ‘b’], [‘c’], []] = 3

Q: Defina length recursivamente22

Page 23: 1 BCC101 – Matemática Discreta Indução / Recursão.

Funções sobre listas - Length

R:Base: length [] = 0Recursão: length (x:xs) = 1 + length(xs)

23

Page 24: 1 BCC101 – Matemática Discreta Indução / Recursão.

Funções sobre listas – sum e product

sum :: [Int] -> Int computa a soma de todos os valores da lista. Ex: sum [10,7,8] = 25

Q: Defina sum recursivamente

product :: [Int] -> Int computa o produto de todos os valores da lista. product [10,7,8] = 150

Q: Defina product recursivamente

24

Page 25: 1 BCC101 – Matemática Discreta Indução / Recursão.

Mais exemplos

Defina recursivamente cada uma das seguintes funções: reverse :: [a] -> [a] retorna o reverso da lista dada. Ex:

reverse [10,7,8] = [8,7,10]

maximum :: [Int] -> Int computa o máximo dentre os valores da lista.

maximum [10,7,8] = 10

25

Page 26: 1 BCC101 – Matemática Discreta Indução / Recursão.

Mais exemplos

concat :: [a] -> [a] -> [a] retorna a lista resultantes de concatenar as 2 listas dadas. Ex: concat [10,7,8] [3,1] = [10,7,8,3,1]

maximum :: [Int] -> Int computa o máximo dentre os valores da lista. maximum [10,7,8] = 10

26

Page 27: 1 BCC101 – Matemática Discreta Indução / Recursão.

Ordenação

Diversas aplicações em computação requerem ordenação de uma sequência de dados.

Função de ordenação de listas:sort :: [a] -> [a]

Existem diversos métodos para ordenação de listas. Vamos ver a definição recursiva de alguns deles.

27

Page 28: 1 BCC101 – Matemática Discreta Indução / Recursão.

Ordenação por inserção

insort :: [a] -> [a]insort [] = []insort (x:xs) = insert x (insort xs)

insert :: a -> [a] -> [a]insert y [] = [y]insert y (x:xs) = if y<x then (y:x:xs) else x:(insert y xs)

28

Page 29: 1 BCC101 – Matemática Discreta Indução / Recursão.

Ordenação por seleção

selsort :: [a] -> [a]selsort [] = []selsort xs = min : selsort ys

where (min,ys) = getmin xs

splitmin :: [a] -> (a,[a])getmin [x] = (x,[])getmin (x:xs) = if x<min then (x,(min:ys)) else (min, (x:ys))

where (min,ys) = getmin xs29

Page 30: 1 BCC101 – Matemática Discreta Indução / Recursão.

Quicksort

qsort :: [a] -> [a]qsort [] = []qsort (x:xs) = qsort les ++ [x] ++ qsort gts

where les = [y | y <- xs, y < x] gts = [y | y <- xs, y > x]

30