A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "1 BCC101 – Matemática Discreta Indução / Recursão."— Transcrição da apresentação:

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

2 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, a n = 2 n para n0 pode também ser definida recursivamente como: a 0 = 1 a n+1 = 2 a n Podemos usar recursão para definir sequências, funções, conjuntos etc BCC101 - Matemática Discreta - DECOM/UFOP 2

3 Fatorial Fatorial: n! = 1x2x…x(n-1)xn 0!= 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

4 Fibonacci fib 0 = 0 fib 1 = 1 fib n = fib (n -1) + fib (n -2) Esse algoritmo é O(2 n ) 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

5 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 Notação usada comumente:

6 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

7 Coeficientes Binomiais (n,k) n = linha k = coluna diagonal Qual é o valor de C (6,4) ? Qual é a fórmula recursiva para C (n,k) ?

8 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 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

9 Coeficientes Binomiais (n,k) Resumindo: 9

10 Máximo Divisor Comum - mdc O algoritmo de Euclides usa o fato: mdc(x,y ) = mdc(y, x mod y) 10 supomos aqui que x > 0

11 Definições Recursivas de 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

12 Definições Recursivas Somatório Definição recursiva de somatório: 12

13 Definições Recursivas Produtório 13 O produtório também pode ser definido de maneira recursiva. Como seria tal definição? Note que a inicialização é definida de modo que oproduto de nenhum número é 1.

14 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

15 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 S Recursão: Se x S então x+10 S e x+25 S Q: Qual é o conjunto S ? 15

16 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 = =

17 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 T Recursão: 2x T e x/2 T se x T 17L16

18 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

19 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 : Números binários : Texto. Ex. este documento Programas de computador Padrões da natureza DNA Proteins Linguagens de programação 19

20 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

21 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

22 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 recursivamente 22

23 Funções sobre listas - Length R: Base: length [] = 0 Recursão: length (x:xs) = 1 + length(xs) 23

24 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

25 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

26 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

27 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

28 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

29 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

30 Quicksort qsort :: [a] -> [a] qsort [] = [] qsort (x:xs) = qsort les ++ [x] ++ qsort gts where les = [y | y <- xs, y < x] gts = [y | y x] 30


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

Apresentações semelhantes


Anúncios Google