Aulas 9,10 Fábio Nakano
Definições, teoremas e algoritmos Definição é uma especificação precisa de um objeto. Um teorema é uma afirmação que pode ser provada. Podemos usar o resultado, ou, Numa demonstração de um teorema, pode-se construir um objeto ou uma solução genérica com a finalidade de demonstrar o teorema. Então a demonstração é um algoritmo para a construção do objeto ou da solução.
Exemplos Definição: n!=n*(n-1)! E 0!=1 Construa um método (iterativo) que calcula n!
Por que preciso saber demonstrar? Demonstrar é a maneira de ter certeza que algo é verdadeiro ou falso; Quando argumentamos com alguém, o que procuramos é uma demonstração de que o que defendemos é verdadeiro. Não há argumento contra uma demonstração formal. Uma demonstração apresenta um algoritmo para solução do problema.
Técnicas de Demonstração Prova Direta Contradição Indução
Demonstrações Típicas Prove por contradição que 2 não pertence a Q. Prove que n<2n para n N.
2 não pertence a Q Suponha por absurdo que 2=m/n, com m e n pertencendo a Z e m/n irredutível. Elevando ao quadrado temos 2=m2/n2. Então m2=2*n2. Logo m2 é par, consequentemente, m é par. Se m é par podemos escrever m como 2*k Como m2=2*n2 , então, (2*k)2=2*n2. Então 22*k2=2*n2 Logo, 2*k2=n2 portanto n também é par Se m e n são pares, m/n é redutível, o que é uma contradição. Portanto 2 não pertence a Q.
n<2n para n N, Prova direta Chamemos f(n)=n e g(n)=2n . Note que as duas funções são crescentes. Considere n=0: f(n)=0 e g(n)=1, logo g(0)>f(0). A cada incremento de uma unidade sobre n (n é Natural, esse incremento faz n passar por todos os elementos do conjunto N), f(n) cresce de 1 e g(n) dobra. Logo g(n) cresce mais rápido que f(n). Como inicialmente g(0) é maior que f(0) (note que na sequencia de incrementos, zero é o menor valor), então para todo nN, g(n)>f(n).
Indução matemática A técnica da indução apresenta uma maneira de resolver problemas através da resolução de problemas menores!! Mecânica Mostre que funciona para um n0 pequeno Suponha por hipótese que vale para um n Demonstre que se vale para n, vale para n+1 Por que funciona?? Base Hipótese Passo
Prove por indução que n^2>2n+1 para n>2
Como um teorema melhora nossa vida... Construa um método que calcula a soma dos n primeiros inteiros (“pela definição”) Teorema 1: A soma dos n primeiros inteiros, s(n), vale n(n+1)/2 Construa um método que calcula a soma dos n primeiros inteiros usando o Teorema 1 Compare as complexidades.
Exemplo suplementar n<2n para n N, Prova por indução Base: para algum valor pequeno, mostrar que é verdade: Para n=0, a sentença é 0<1, que é verdadeira. Hipótese: para algum k, k<2k Passo: k+1<?2k+1 Prova: k+1<? 2k+2k Pela HI, 2k+1? 2k+2k Note que como substituí um valor por outro MAIOR que ele, então posso relaxar a desigualdade . Esta nova desigualdade “tem menos folga”. Se eu conseguir provar esta nova desigualdade, “vô tá bem na fita!” Cancelando: 1 ? 2k . Note que 2k é crescente e para k=0, a desigualdade é verdade, então para os k>0, ela vai continuar sendo verdade! Portanto n<2n para n N.
Pondo tudo em ordem Base: 20>0 Por hipótese, 2k>k Some 1 a ambos os lados: 2k+1>k+1 É claro que 2k+2k é maior que 2k+1, então podemos substituir 1 por 2k pois não alteramos as desigualdades. Note que 2k+2k=2k+1 Logo, 2k+1>k+1.
Recursão É um conceito em computação. É relacionado ao conceito de indução pois É uma forma indutiva de definir programas. Nesta, um método chama a si mesmo com os parâmetros adequados.
Exemplo Definição: n!=n*(n-1)! E 0!=1 Construa um método recursivo que calcula n!
Como se implementa recursão em um computador? TAD - Pilha Prog - Pilha de execução Prog – Chamada de função Prog - Recursão
Como o método recursivo calcula 4!
Projeto coletivo Quantos grupos já concluiram o projeto? Tempo de execução (ns) Número de comparações comprimento do vetor 8696279276 391986000 28000 18627460753 840479500 41000 2888617408 199990000 20000 13134217896 903103750 42500 3355019982 231114250 21500 1048894482 71994000 12000 6107759 499500 1000
São aprox. 11 grupos 1 roda problemas de tamanho até 2000 em intervalos de 10 2 rodam problemas de 2000 a 20000 em intervalos de 100 3 rodam problemas de 20000 até 40000 em intervalos de 200 5 rodam problemas de 40000 até 60000 em intervalos de 500 Roda por algumas horas (6?), pode (deve) paralelizar
Lista para 15.09 Prove por indução que 2^n>n^2 defina n0, o valor mínimo para que sua demonstração seja válida. Dê uma prova direta e uma por indução de que Apresente os códigos (ou pseudo-códigos) dos métodos que calculam s(n) pela definição (iterativo e recursivo) e usando o resultado do teorema. Qual a complexidade de tempo de cada método? Apresente a simulação da pilha de execução para n=3.
Diga se é verdadeiro e justifique usando a definição da notação O-grande