1 / 39

Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01

Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01. Introdução SOCORRAM-ME, SUBI NO ÓNIBUS EM MARROCOS. Definição de Palíndromo.

shay
Download Presentation

Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01

  2. Introdução SOCORRAM-ME, SUBI NO ÓNIBUS EM MARROCOS

  3. Definição de Palíndromo São números ou cadeias de caracteres que podem ser lidos em ambos os sentidos e representam o mesmo número ou a mesma palavra. Exemplos: ana, ata, aaaa, bbbb, “Socorram-me, subi no ônibus em Marrocos”, 1190911, 11, 22, 121.

  4. Algoritmo para Palíndromo ATA A T A 0 1 2 OBS: Palíndromos podem ter um divisor no meio como em 11011 ou não como em 1111.

  5. Algoritmo para Palíndromo Início car: array de caracteres isPalindromo: boolean car = ['a',‘n','a'] // É palíndromo até que se prove o contrário isPalindromo = .v. // Div 2 ignora o caractere separador do palíndromo Para i:=0 até car.tamanho div 2 Faça Se car[i] <> car[car.tamanho - i - 1] isPalindromo = .f. Fim Para Fim Se Se isPalindromo = .v. exibir "é palíndromo“ Fim Senão Fim Se exibir "não é palíndromo“

  6. Algoritmo para Palíndromo Início car: array de caracteres isPalindromo: boolean car = ['a',‘n','a'] // É palíndromo até que se prove o contrário isPalindromo = .v. // Div 2 ignora o caractere separador do palíndromo Para i:=0 até car.tamanho div 2 Faça Se car[i] <> car[car.tamanho - i - 1] isPalindromo = .f. Fim Para Fim Se Se isPalindromo = .v. exibir "é palíndromo“ Senão exibir "não é palíndromo“ Fim Se Fim

  7. Algoritmo para Palíndromo Início car: array de caracteres isPalindromo: boolean car = ['a',‘n','a'] // É palíndromo até que se prove o contrário isPalindromo = .v. // Div 2 ignora o caractere separador do palíndromo Para i:=0 até car.tamanho div 2 Faça Se car[i] <> car[car.tamanho - i - 1] isPalindromo = .f. Fim Se Fim Para Se isPalindromo = .v. exibir "é palíndromo“ Senão exibir "não é palíndromo“ Fim Se Fim

  8. Codificação para Palíndromo publicclassPalindromo { static char[ ] arr = {‘a',‘n','a'}; public static void main(String[ ] args) { booleanisPalindromo = true; for (inti = 0; i < arr.length / 2; i++) { if(arr[i] != arr[arr.length - i - 1]) { isPalindromo= false; } } if(isPalindromo) System.out.println("Palavra é palindromo"); else System.out.println("Palavra não é palindromo"); } }

  9. Apresentações • Curso • Unidade 1 – Recursividade • Unidade 2 – Algoritmos de Ordenação • Unidade 3 – Árvores • Unidade 4 – Processamento de Cadeias • Unidade 5 – Hashing

  10. Apresentações Bibliografia 1. Estruturas de Dados e Algoritmos – Bruno R. Preiss, Campus, 2000. Padrões de projetos orientados a objetos com Java.* 2. Projetos de Algoritmos – Nivio Ziviani,Thomson, 2004. Com implementações em PASCAL e C. 3. Algoritmos e Estruturas de Dados – Niklaus Wirth, LTC, 1999. 4. Introdução à programação – Anita Lopes e Guto Garcia, Campus, 2002. 500 Algoritmos resolvidos.

  11. Apresentações Aula 01 UD 1 – Recursividade - Conceito - Definições recursivas - Exemplos - Estudo de algoritmos recursivos - Eficiência da recursividade - Problemas - Exercícios sobre recursividade

  12. Recursividade Recursividade é uma das mais poderosas ferramentas de programação. Conceito: Um objeto é dito recursivo se ele consistir parcialmente ou for definido em termos de si próprio. Conceito: Recursão é um método de programação no qual uma função pode chamar a si mesma .

  13. Recursividade A recursão é o processo pelo qual passa um certo procedimento quando um dos passos do procedimento em questão envolve a repetição completa deste mesmo procedimento. Um procedimento que se utiliza da recursão é dito recursivo. Também é dito recursivo qualquer objeto que seja resultado de um procedimento recursivo.  

  14. Recursividade

  15. Recursividade O triângulo de Sierpinski - uma recursão fechada de triângulos formando uma reticulada geométrica.

  16. Recursividade • Definição de um algoritmo de maneiraiterativa • X • Definição de um algoritmo de maneirarecursiva

  17. Fatorial de forma iterativa • Se n = 0 • Então Fat(n) = 1 • Se n > 0 • Então Fat(n) = 1 x 2 x 3 x …N

  18. Fatorial de forma iterativa int fat(int fatorial){ int i; int resposta = 1; if (fatorial == 0) resposta = 1; else if (fatorial > 0) for(i=1;i <= fatorial; i++) resposta = resposta * i; return resposta; }

  19. Fatorial de forma recursiva • Se n = 0 • Então Fat(n) = 1 • Se n > 0 • Então Fat(n) = n x Fat(n – 1)

  20. Fatorial de forma recursiva • Se n = 0 • Então Fat(n) = 1 • Se n > 0 • Então Fat(n) = n x Fat(n – 1)

  21. Fatorial de forma recursiva int fat_recursivo(int fatorial){ int i; int resposta = 1; if (fatorial == 0) resposta = 1; else if (fatorial > 0) for(i=1;i <= fatorial; i++) resposta = fatorial * fat_recursivo(fatorial-1); return resposta; }

  22. Outro exemplo de Recursividade public class multiplica { public static long mult (long A, long B) { long res; if (A == 1) return B; if (B == 1) return A; res = mult(A, B-1) + A; return ( res ); } public static void main(String[ ] args) { int num1 = 6, num2 = 3; System.out.println("Produto de "+ num1 + " por " + num2 + " = " +multiplica.mult(num1, num2)); } }

  23. 1 1 2 3 5 8 13 21 34 55 ... Filme de Animação

  24. Fibonacci Definição Recursiva   se n = 0 ou n = 1 → fib(n) = n senão fib(n) = fib(n - 2) + fib(n - 1), n >1 fib(1) = 0 fib(2) = 1 fib(3) = fib(2) + fib(1) fib(4) = fib(3) + fib(2) Fib(n) = fib(n-1) + fib(n - 2)

  25. Sequência de Fibonacci – Definição Recursiva

  26. Fibonacci public class fibonacci { public static long fibonacci(long number) { long x, y; if (number <= 1) { return number; } x = fibonacci(number - 1); y = fibonacci(number - 2); return ( x + y ); } public static void main(String[ ] args) { intn = 9; System.out.println("Fibonacci de "+ n + " = " + fibonacci.fibonacci(n)); } }

  27. Recursividade • Recursividade não serve apenas para cálculos matemáticos; • •Tem uso importante em várias atividades de computação práticas; • •Muitos algoritmos ficam mais legíveis, quando construídos utilizando recursividade; • •Vamos utilizar recursividade em uma das atividades mais conhecidas na computação: a busca

  28. Busca Binária

  29. Busca Binária • Divide seu vetor em duas metades • Três condições • Se o item for igual ao item que está na metade do vetor, o item foi encontrado • Se for menor, procure na primeira metade • Se for maior procure na segunda metade Animação de Busca Binária

  30. Busca Binária

  31. X I F X I F Busca Binária Procurar por R • -2 Comparações! • Pior caso: quando os itens estiverem no início do vetor. Nesse caso, seria melhor utilizar busca seqüencial. Mas como saber quando o ítem está no início do vetor?

  32. Busca Binária Iterativa

  33. Busca Binária Recursiva

  34. Dicas • Não se aprende recursividade sem praticar • Para montar um algoritmo recursivo • Defina pelo menos um caso básico (condição de terminação); • Quebre o problema em problemas menores, definindo o(s) caso(s) com recursão(ões) • Fazer o teste de finitude, isto é, certificar-se de que as sucessivas chamadas recursivas levam obrigatoriamente, e numa quantidade finita de vezes, ao(s) caso(s) básico(s)

  35. Finalizando • Recursividade é um tópico fundamental • Algoritmos recursivos aparecem bastante na prática • Dividir e conquistar é uma técnica naturalmente recursiva para solução de problemas • Mais recursividade no nosso futuro, principalmente na implementação de árvores... Exercícios

  36. Desafio I Qual a saída após a passagem pela função abaixo, quando n=4?

  37. Desafio II Qual a saída após a passagem pela função abaixo? public class func { public static void main(String[] args) { int res; res = funcao (4); System.out.print( res ); } static int funcao (int n) { if (n == 0) return (0); return (n + funcao (n-1)); } }

  38. Desafio III

More Related