1 bcc101 – matemática discreta indução / recursão
TRANSCRIPT
![Page 1: 1 BCC101 – Matemática Discreta Indução / Recursão](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/1.jpg)
1
BCC101 – Matemática Discreta
Indução / Recursão
![Page 2: 1 BCC101 – Matemática Discreta Indução / Recursão](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/9.jpg)
Coeficientes Binomiais (n,k)
Resumindo:
9
![Page 10: 1 BCC101 – Matemática Discreta Indução / Recursão](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022061604/552fc10b497959413d8c20f2/html5/thumbnails/30.jpg)
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