BCC101 – Matemática Discreta

Slides:



Advertisements
Apresentações semelhantes
Python: Recursão Claudio Esperança.
Advertisements

Programação em Java Prof. Maurício Braga
Programação em Java Prof. Maurício Braga
MÁQUINAS UNIVERSAIS Fabrício Dias
Departamento de Informática Universidade Federal do Espírito Santo
UNIVERSIDADE LUTERANA DO BRASIL COMUNIDADE EVANGÉLICA LUTERANA SÃO PAULO Reconhecida pela Portaria Ministerial nº 681 de 07/12/89 – DOU de 11/12/89 Campus.
Sumário, aula 10 Exercícios sobre elasticidade Elasticidade e despesa
2 de Junho de 2005Conclusão1 Pedro Barahona DI/FCT/UNL Junho 2005.
1 Conclusão DI/FCT/UNL 1º Semestre 2004/ Ciclos de Simulação A técnica usada no exemplo da queda livre pode ser utilizada para trajectórias a duas.
Múltiplos Os múltiplos de um número inteiro obtêm-se multiplicando esse número por 0, 1, 2, 3, 4, 5, 6, ... Exemplos: M5= {0, 5, 10, 15, 20,
Universidade Bandeirante de São Paulo Fundamentos da Álgebra
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
SISTEMAS DE EQUAÇÕES.
Resolução.
Análise de regressão linear simples: abordagem matricial
INE Fundamentos Matemáticos da Computação
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Árvores.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Linguagens Livres de Contexto
BCC 101– Matemática Discreta
Recursividade Conceitos e Aplicações.
Polinômios Prof. Marlon.
EQUAÇÕES POLINOMIAIS Prof. Marlon.
FUNÇÃO MODULAR.
Rodrigo de Toledo (original: Claudio Esperança)
EQUAÇÕES A primeira referência histórica que temos sobre equações refere-se ao papiro de Rhind, um dos documentos matemáticos dos antigos egípcios. Sabe-se.
Ana Luísa Pires Adaptado por Jose Camilo Chaves
Programação Baseada em Objectos Desenho de TAD
Listas Encadeadas.
A Lógica das Sentenças Abertas Profa. Ana Florencia Aula 9
Matemática I Prof. Gerson Lachtermacher, Ph.D.
PROGRESSÕES JUDITE GOMES
Revisão do conceito de matrizes
Campus de Caraguatatuba
Sequências de Números.
MECÂNICA - ESTÁTICA Vetores Forças Cap. 2.
MECÂNICA - DINÂMICA Cinemática de uma Partícula Cap Exercícios.
TRABALHO MATEMÁTICA DISCRETA
SISTEMAS LINEARES.
Aula 02 Variáveis, Matrizes, Gráficos
Salas de Matemática.
Programação Funcional
Matemática Básica – Aula 1
Progressão Geométrica Matrizes Questão nº01  Na P.G., a posição do termo é...
Introdução e Busca Cega
Indução Matemática Recursão
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Campus de Caraguatatuba Aula 12: Sistemas de Equações Lineares (2)
Conceitos básicos em grafos
Linguagem e Ambiente Scratch
BCC 101 – Matemática Discreta I
1 A COMPUTAÇÃO MODERNA Valdemar W. Setzer Depto. de Ciência da Computação da USP
Algoritmos e Estruturas de Dados I – Recursão
Campus de Caraguatatuba Aula 2: Somatório e Produtório
Máquina de Turing Universal
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Campus de Caraguatatuba
BCC 101 – Matemática Discreta I
Construção e Análise de Algoritmos
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Campus de Caraguatatuba Matemática Discreta 1 – MD 1
Planilha Eletrônica - Excel
Campus de Caraguatatuba Aula 9: Noções Básicas sobre Erros (3)
Fontes de Erros Aula 1 Introdução; Erros em processos numéricos;
INE Fundamentos de Matemática Discreta para a Computação
Recursividade Profs. De Prog2 e Lab2.
INE Fundamentos de Matemática Discreta para a Computação
BCC101 – Matemática Discreta
Transcrição da apresentação:

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

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

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

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.

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:

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.

Coeficientes Binomiais (n,k) n = linha 1 2 3 4 5 6 0 k = coluna diagonal 1 2 3 4 5 6 1 1 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 Qual é o valor de C (6,4) ? Qual é a fórmula recursiva para C (n,k) ?

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)

Coeficientes Binomiais (n,k) Resumindo:

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

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:

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

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.

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.

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 ?

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

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

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

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

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

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

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

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

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

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

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.

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)

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

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]