Upload
chace
View
27
Download
0
Embed Size (px)
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 Presentation
Citation preview
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
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.
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
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“
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
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
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"); }}
Apresentações
Curso
• Unidade 1 – Recursividade
• Unidade 2 – Algoritmos de Ordenação
• Unidade 3 – Árvores
• Unidade 4 – Processamento de Cadeias
• Unidade 5 – Hashing
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.
ApresentaçõesAula 01 UD 1 – Recursividade- Conceito- Definições recursivas- Exemplos- Estudo de algoritmos recursivos- Eficiência da recursividade- Problemas- Exercícios sobre recursividade
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 .
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.
Recursividade
Recursividade
O triângulo de Sierpinski - uma recursão fechada de triângulos formando uma reticulada geométrica.
Recursividade
• Definição de um algoritmo de maneira iterativa
X
• Definição de um algoritmo de maneira recursiva
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
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;
}
Fatorial de forma recursiva
Se n = 0Então Fat(n) = 1
Se n > 0 Então Fat(n) = n x Fat(n – 1)
Fatorial de forma recursiva
Se n = 0Então Fat(n) = 1
Se n > 0 Então Fat(n) = n x Fat(n – 1)
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;
}
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));}}
1 1 2 3 5 8 13 21 34 55 ...
Filme de Animação
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)
Sequência de Fibonacci – Definição Recursiva
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));
}}
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
Busca Binária
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
Busca Binária
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?
Busca Binária Iterativa
Busca Binária Recursiva
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)
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
Desafio IQual a saída após a passagem pela função abaixo, quando n=4?
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));
}}
Desafio III