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

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

BCC101 – Matemática Discreta

Apresentações semelhantes


Apresentação em tema: "BCC101 – Matemática Discreta"— Transcrição da apresentação:

1 BCC101 – Matemática Discreta
Lecture 15 - CS 1813 Discrete Math, University of Oklahoma 3/25/2017 BCC101 – Matemática Discreta Indução / Recursão

2 BCC101 - Matemática Discreta - DECOM/UFOP
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 = an+1 = 2 an Podemos usar recursão para definir sequências, funções, conjuntos etc BCC Matemática Discreta - DECOM/UFOP

3 Fatorial: n! = 1x2x…x(n-1)xn
0!= (inicialização) n!= n · (n -1)! (recursão) EX: 5! recursão = 5 · 4 · 3 · 2! = 5 · 4 · 3 · 2 · 1! = 5 · 4 · 3 · 2 · 1 · 0! = 5 · 4 · 3! = 5 · 4! inicialização = 5 · 4 · 3 · 2 · 1 · 1

4 Fibonacci Fibonacci fib 0 = 0 fib 1 = 1
fib 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.

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

7 Coeficientes Binomiais (n,k)
n = linha 1 2 3 4 5 6 0 k = coluna diagonal 1 2 3 4 5 6 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 < 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)

9 Coeficientes Binomiais (n,k)
Resumindo:

10 Máximo Divisor Comum - mdc
O algoritmo de Euclides usa o fato: mdc(x,y ) = mdc(y, x mod y) 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:

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

13 Definições Recursivas Produtório
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 o “produto 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.

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 ?

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 L16

18 Dê uma definição recursiva para o conjunto potência de S : P (S ).
Exercícios Dê uma definição recursiva para o conjunto potência de S : P (S ). Dê uma definição recursiva para o conjunto de bitstrings bs Dê uma definição recursiva para o conjunto de bitstrigs que são palindromos pal L16

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

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

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:[]))

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

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

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

25 Defina recursivamente cada uma das seguintes funções:
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

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

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.

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<x then (y:x:xs) else x:(insert y xs)

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<min then (x,(min:ys)) else (min, (x:ys))

30 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]


Carregar ppt "BCC101 – Matemática Discreta"

Apresentações semelhantes


Anúncios Google