curso de análise e desenvolvimento de sistemas estrutura de dados e algoritmos ii aula 01
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/1.jpg)
Curso de Análise e Desenvolvimento de Sistemas
Estrutura de Dados e Algoritmos II
Aula 01
![Page 2: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/2.jpg)
Introdução
SOCORRAM-ME, SUBI NO ÓNIBUS EM MARROCOS
![Page 3: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/3.jpg)
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.
![Page 4: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/4.jpg)
Algoritmo para Palíndromo
ATA
A T A
OBS: Palíndromos podem ter um divisor no meio como em 11011 ou não como em 1111.
0 1 2
![Page 5: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/5.jpg)
Algoritmo para PalíndromoIníciocar: array de caracteres isPalindromo: booleancar = ['a',‘n','a']// É palíndromo até que se prove o contrárioisPalindromo = .v.// Div 2 ignora o caractere separador do palíndromoPara i:=0 até car.tamanho div 2 FaçaSe car[i] <> car[car.tamanho - i - 1]isPalindromo = .f.Fim ParaFim SeSe isPalindromo = .v.exibir "é palíndromo“FimSenãoFim Seexibir "não é palíndromo“
![Page 6: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/6.jpg)
Algoritmo para PalíndromoIní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 SeFim
![Page 7: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/7.jpg)
Algoritmo para PalíndromoIní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 SeFim
![Page 8: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/8.jpg)
Codificação para Palíndromopublic class Palindromo { static char[ ] arr = {‘a',‘n','a'}; public static void main(String[ ] args) { boolean isPalindromo = true; for (int i = 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"); }}
![Page 9: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/9.jpg)
Apresentações
Curso
• Unidade 1 – Recursividade
• Unidade 2 – Algoritmos de Ordenação
• Unidade 3 – Árvores
• Unidade 4 – Processamento de Cadeias
• Unidade 5 – Hashing
![Page 10: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/10.jpg)
ApresentaçõesBibliografia 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.
![Page 11: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/11.jpg)
ApresentaçõesAula 01 UD 1 – Recursividade- Conceito- Definições recursivas- Exemplos- Estudo de algoritmos recursivos- Eficiência da recursividade- Problemas- Exercícios sobre recursividade
![Page 12: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/12.jpg)
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 .
![Page 13: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/13.jpg)
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.
![Page 14: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/14.jpg)
Recursividade
![Page 15: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/15.jpg)
Recursividade
O triângulo de Sierpinski - uma recursão fechada de triângulos formando uma reticulada geométrica.
![Page 16: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/16.jpg)
Recursividade
• Definição de um algoritmo de maneira iterativa
X
• Definição de um algoritmo de maneira recursiva
![Page 17: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/17.jpg)
Fatorial de forma iterativa
Se n = 0Então Fat(n) = 1
Se n > 0 Então Fat(n) = 1 x 2 x 3 x …N
![Page 18: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/18.jpg)
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;
}
![Page 19: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/19.jpg)
Fatorial de forma recursiva
Se n = 0Então Fat(n) = 1
Se n > 0 Então Fat(n) = n x Fat(n – 1)
![Page 20: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/20.jpg)
Fatorial de forma recursiva
Se n = 0Então Fat(n) = 1
Se n > 0 Então Fat(n) = n x Fat(n – 1)
![Page 21: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/21.jpg)
Fatorial de forma recursivaint 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;
}
![Page 22: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/22.jpg)
Outro exemplo de Recursividadepublic 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));}}
![Page 23: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/23.jpg)
1 1 2 3 5 8 13 21 34 55 ...
Filme de Animação
![Page 24: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/24.jpg)
Fibonacci
Definição Recursiva se n = 0 ou n = 1 → fib(n) = n
senão fib(n) = fib(n - 2) + fib(n - 1), n >1fib(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)
![Page 25: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/25.jpg)
Sequência de Fibonacci – Definição Recursiva
![Page 26: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/26.jpg)
Fibonaccipublic 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) {
int n = 9;System.out.println("Fibonacci de "+ n + " = " + fibonacci.fibonacci(n));
}}
![Page 27: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/27.jpg)
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
![Page 28: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/28.jpg)
Busca Binária
![Page 29: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/29.jpg)
Busca Binária
• Divide seu vetor em duas metades• Três condições
1. Se o item for igual ao item que está na metade do vetor, o item foi encontrado
2. Se for menor, procure na primeira metade3. Se for maior procure na segunda metade
Animação de Busca Binária
![Page 30: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/30.jpg)
Busca Binária
![Page 31: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/31.jpg)
Busca Binária
1 2 3 4 5 6 7 8 9 10
A C E H L M P R T Z
Procurar por R
I FX I FX
-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?
![Page 32: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/32.jpg)
Busca Binária Iterativa
![Page 33: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/33.jpg)
Busca Binária Recursiva
![Page 34: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/34.jpg)
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)
![Page 35: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/35.jpg)
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
![Page 36: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/36.jpg)
![Page 37: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/37.jpg)
Desafio IQual a saída após a passagem pela função abaixo, quando n=4?
![Page 38: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/38.jpg)
Desafio IIQual 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));
}}
![Page 39: Curso de Análise e Desenvolvimento de Sistemas Estrutura de Dados e Algoritmos II Aula 01](https://reader035.vdocuments.pub/reader035/viewer/2022070502/56813b29550346895da3ec78/html5/thumbnails/39.jpg)
Desafio III