Introdução à Programação

Tamanho: px
Começar a partir da página:

Download "Introdução à Programação"

Transcrição

1 Introdução à Programação 1.Ano LCC-MIERSI DCC - FCUP Nelma Moreira Aula 12

2 Recursividade

3 Recursão versus Iteração FACTORIAL outra vez! Muitas versões. n! = n (n - 1)... 1 int facti(int n){ int fac=n; while(--n>0){ fac = fac*n; return fac; n!= if (n==0) 1 else n*(n-1)! int factr(int n){ if(n==0) return(1); else return(n*factr(n-1));

4 Chamadas recursivas e valores retornados de cada chamada n=5

5 Paradigmas Iterativo uma sequência de instruções é excutada duma forma repetitiva, controlada por uma dada condição. P.e: decremento de um contador ciclo while(n>0){... n--;

6 Recursivo 1. existem casos simples, em que a resposta é determinada directamente (base); 2. decomposição duma instância do problema, em instâncias mais simples da mesma forma. 3. repetição por chamadas sucessivas: numa f unção re cursi v a, são cr iadas vár ias activações dela própria que desaparecem há medida que a execução avança. Em cada momento apenas uma das activações está activa, estando as restantes à espera que essa termine para continuarem.

7 Equivalência entre os paradigmas Os dois paradigmas são equivalentes: dada uma função recursiva existe sempre uma iterativa e vice-versa.

8 Representação dum inteiro n na base b Iterativa Recursiva void num_b_ite(int n,int b) { if (n<0) { printf("-"); n= -n; if(n==0) { printf("%d",n); return; while(n) { printf("%d",n%b); n=n/b; void num_b(int n,int b) { if (n<0) { printf("-"); n= -n; if(n/b) num_b(n/b,b); printf("%d",n%b); As versões não são bem equivalentes. Porquê?

9 Sequência de Fibonacci Começando com 0 e 1, cada termo seguinte é a soma dos dois anteriores. O n-ésimo termo fn é calculado por fn = fn fn - 2; f0= 0, f1 = 1 Uma função recursiva é imediata: int fib(int n) { if(n==0 n==1) return n; return fib(n-1)+fib(n-2);

10 Torres de Hanoi Dados três suportes e n discos de tamanhos diferentes. Os discos estão empilhados num dos suportes por ordem crescente de tamanhos. Pretende-se mover os discos para outro suporte de modo que: em cada passo exactamente um disco seja movido de um suporte para o outro um disco não pode nunca estar por cima de um menor o terceiro suporte pode ser usado como auxiliar

11 1. Representar cada suporte por um caracter ('a', 'b' e 'c'). Pretende-se uma função recursiva: void hanoi(int n, char inicio, char fim, char temp); Escrever uma função moveum(char ini, char fim) que move a peça do cimo do suporte ini para o suporte fim. void moveum(char ini, char fim){ printf("%c-> %c",ini,fim); 2. A função hanoi() void hanoi(int n, char inicio, char fim, char temp) { if (n==1) moveum(inicio,fim); else { hanoi(n-1,inicio,temp,fim); moveum(inicio,fim); hanoi(n-1,temp,fim,inicio);

12 Execução %hanoi 3 a-> b a-> c b-> c a-> b c-> a c-> b a-> b

13 Complexidade/Eficiência O algoritmo é exponêncial O(2 n ): O número de movimentos é exponencial com n, Isto é, Por exemplo, Tn = 2Tn T1 = 1 Tn = 2 n - 1 T3=7, T10=1023, T50=

14 Intervalo 5 minutos

15 Método de ordenação Quicksort Dada uma sequência de valores, escolhe-se um elemento (pivot) e os restantes valores são reagrupados em duas subsequências (partição): os que são menores que esse elemento os que são maiores. O mesmo processo é aplicado recursivamente a cada subsequência. Quando um subconjunto tem menos que 2 elementos a recursão pára.

16 Seja o pivot o elemento do meio

17 void quicksort(int v[], int esq, int dir){ int i; if(esq>=dir) return ; i = particao(v,esq,dir); quicksort(v,esq,i-1); quicksort(v,i+1,dir); int particao(int v[],int esq,int dir){ int i, fim; troca(v,esq,(esq+dir)/2); fim = esq; for(i=esq+1;i<=dir;i++) if(v[i]<v[esq]) troca(v,++fim,i); troca(v,esq,fim); return fim; void troca(int v[], int i,int j){ int temp; temp = v[i]; v[i] = v[j]; v[j] = temp;

18 Execução Subvector: Pivot: 58 Particao esq: Particao dir: Subvector: Pivot: 25 Particao esq: 19 Particao dir: Subvector: Pivot: 37 Particao esq: Particao dir: 56 Subvector: Pivot: 95 Particao esq: 73 Particao dir: Ordenado:

19 Quicksort para ordenar uma variável indexada de strings void quicksort_s(char v[][maxcol],int esq, int dir){ int i; if(esq>=dir) return; i=particao_s(v,esq,dir); quicksort_s(v,esq,fim-1); quicksort_s(v,fim+1,dir); void particao(char v[][maxcol], int esq,int dir) { int i,fim; troca_s(v,esq,(esq+dir)/2); fim=esq; for(i=esq+1;i<=dir;i++) if(strcmp(v[i],v[esq])<0) troca_s(v, ++fim,i); troca_s(v,esq,fim); returm fim; void troca_s(char v[][maxcol], int i,int j) { char temp[maxcol]; strcpy(temp,v[i]); strcpy(v[i],v[j]); strcpy(v[j],temp);

20 Retrocesso na Resolução de Problemas de Pesquisa Para muitos problemas, o método de resolução consiste em percorrer uma sequência de decisões, cada uma fazendo avançar no caminho para a solução. Se se fizerem as escolhas correctas chega-se a uma solução senão tem de ser retrocecer e escolher outros caminhos. Divisão em subtarefas Pesquisar exaustivamente um árvore de subtarefas Uso de Recursão

21 Exemplos procura de uma solução de um puzzle procura duma estratégia vencedora num jogo de dois jogadores procura da saída de um labirinto procura de um caminho numa rede que liga vários pontos INCONVENIENTE: O tamanho da ár vore de pe squisa cre sce e xponencialmente com o tamanho dos dados

22 Salto do Cavalo Dado um tabuleiro n n determinar se um cavalo - do jogo de xadrez - consegue percorrer todas as posições do tabuleiro, uma só vez,em n 2-1 movimentos.

23 Estado Inicial: uma posição do tabuleiro Estado Final: ter visitado todas as posições Mudança de Estado: salto em ``L'' 2 por 1, de uma posição para outra (candidata) Movimento válido: se existe uma posição para saltar e essa posição ainda não foi visitada

24 Se o cavalo estiver na posição C estão marcadas as possíveis soluções: C

25 Algoritmo de Procura com Retrocesso (Backtracking) tenta inicializa seleção de candidatos repete seleciona um candidato se aceitável marcar posição se não estado final tenta o passo seguinte se não sucedeu retira marca da posição até estado final ou não haver mais candidatos Importante: Número de candidatos é finito!!!

26 int h[10][10], tab_max; int main(){ int i,j; do { printf(" Tamanho do tabuleiro[3-10]: "); scanf("%d",&tab_max); for(i=1;i<=tab_max; i++) for(j=1;j<=tab_max; j++) h[i][j] = 0; printf("posicao inicial: \n"); printf("linha: "); scanf("%d",&i); printf("coluna: "); scanf("%d",&j); h[i][j] = 1; if (try(2,i,j)==1) for(i=1;i<=tab_max;i++){ for(j=1;j<=tab_max;j++) printf("%d ",h[i][j]); printf("\n \n"); else printf("nao ha solucao \n"); printf("ctrl C para terminar \n"); while(getchar()!=eof); #define tab_sq tab_max*tab_max #define in_tab(x) (x>0 && x<=tab_max) int cx[]={2,1,-1,-2,-2,-1,1,2; int cy[]={1,2,2,1,-1,-2,-2,-1; int try(int i,int x, int y){ int k = 0, u, v; while( k < 8 ){ u=x+cx[k]; v=y+cy[k]; if(in_tab(u) && in_tab(v)) if (h[u][v] == 0) { h[u][v] = i; if (i >= tab_sq) return 1; if (try(i+1,u,v)==1) return 1; h[u][v] = 0; k++; return 0;

27 Execução Tamanho do tabuleiro[3-10]: 5 Posicao inicial: Linha: 1 Coluna: Ctrl C para terminar Tamanho do tabuleiro[3-10]: 5 Posicao inicial: Linha: 3 Coluna: Ctrl C para terminar ^C

1 se n = 0 n (n 1)! se n 1

1 se n = 0 n (n 1)! se n 1 Recursão versus Iteração Problema: Cálculo de n! = n (n 1)... 1 int facti(int n) { int fac=n; while(n>0){ fac=fac*n; n--; } return fac; } [epd94, Cap. 5.13-15] Definição recursiva: n! = { 1 se n = 0 n

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação 1.Ano LCC-MIERSI DCC - FCUP Nelma Moreira Aula 3 Tipos, Expressões,Operadores Tipos de dados Variáveis Constantes Constantes Simbólicas Expressões Operadores aritméticos, relacionais

Leia mais

Programação Estruturada

Programação Estruturada Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2

Leia mais

Recursão David Déharbe

Recursão David Déharbe Recursão David Déharbe 1 1 Objetivos da aula O conceito de recursão. Exemplos. Programação em C. 2 2 Roteiro da aula Revisão de funções; Motivação; Definição; Dois exemplos básicos; Recursão mútua; Dois

Leia mais

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação 1.Ano LCC-MIERSI DCC - FCUP Nelma Moreira Aula 10 Ordenação 2 15-1 7 9 4 6 Existem muitos métodos de ordenar Bolha Inserção Seleção Quicksort etc... Bolha (bubble sort) Percorrer

Leia mais

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão Luiz Leão luizleao@gmail.com http://www.luizleao.com Conteúdo Programático 2.1 - Definições recursivas 2.2 - Como implementar recursividade 2.3 - Quando não usar recursividade 2.4 - Desenvolvendo algoritmos

Leia mais

SCC0601 Projeto de Algoritmos. Recursão

SCC0601 Projeto de Algoritmos. Recursão SCC0601 Projeto de Algoritmos Recursão Definição Uma função é dita recursiva quando é definida em seus próprios termos, direta ou indiretamente Dicionário Michaelis: ato ou efeito de recorrer Recorrer:

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação 1. Ano LCC-MIERSI DCC - FCUP Nelma Moreira Objectivos Introdução aos conceitos fundamentais da programação de computadores tendo por base o paradigma imperativo e a linguagem C.

Leia mais

Estrutura de Dados Conceitos Iniciais

Estrutura de Dados Conceitos Iniciais Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos Iniciais Aula 04 DPEE 08 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria

Leia mais

Primos... Determinar se um inteiro é primo. 1. Um número é primo se apenas é divisível por ele próprio e por 1.

Primos... Determinar se um inteiro é primo. 1. Um número é primo se apenas é divisível por ele próprio e por 1. Primos... Problema 1. Determinar se um inteiro é primo. 1. Um número é primo se apenas é divisível por ele próprio e por 1. 2. Algoritmo: percorrer os inteiros de 2 a n-1 e verificar se dividem n:se nenhum

Leia mais

Processamento da Informação

Processamento da Informação Processamento da Informação Fabrício Olivetti de França 02 de Fevereiro de 2019 Topics 1. Recursão 1 Recursão Indução Matemática Em bases matemáticas vocês aprenderam sobre indução matemática: Provamos

Leia mais

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Recursividade

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Recursividade Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Recursividade Conceito de Recursividade Fundamental em Matemática e Ciência da Computação Um programa recursivo é um programa que chama a si mesmo

Leia mais

SCC0214 Projeto de Algoritmos

SCC0214 Projeto de Algoritmos SCC0214 Projeto de Algoritmos Recursão Implemente uma função para calcular o fatorial de um número inteiro positivo 2 1 Definição Uma função é dita recursiva quando é definida em seus próprios termos,

Leia mais

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição Recursividade Prof. Cesar Augusto Tacla Métodos iterativos Métodos iterativos utilizam estruturas de repetição For While Do while Normalmente, um método invoca outros métodos, não a si mesmo. 2 1 Recursividade

Leia mais

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1 INF1007: Programação 2 6 Ordenação de Vetores 01/10/2015 (c) Dept. Informática - PUC-Rio 1 Tópicos Introdução Ordenação bolha (bubble sort) Ordenação por seleção (selection sort) 01/10/2015 (c) Dept. Informática

Leia mais

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

ALGORITMOS DE ORDENAÇÃO RECURSIVOS 1/14 ALGORITMOS DE ORDENAÇÃO RECURSIVOS Ordenação rápida ( Quicksort ) 2/14 Ordenação rápida ( Quicksort ) Ideia - Baseia-se num princípio muito simples que, quando aplicado recursivamente, acaba por ordenar

Leia mais

Algoritmos de ordenação Ordenação rápida ( Quicksort )

Algoritmos de ordenação Ordenação rápida ( Quicksort ) Ordenação rápida ( Quicksort ) Baseia-se num princípio muito simples que, quando aplicado recursivamente, acaba por ordenar o vector. Este princípio é composto por 2 passos essenciais: 1. Escolher um elemento

Leia mais

INTRODUÇÃO À PROGRAMAÇÃO

INTRODUÇÃO À PROGRAMAÇÃO INTRODUÇÃO À PROGRAMAÇÃO 1. Ano -LCC-MIERSI DCC_FCUP Nelma Moreira Objetivos Introdução aos conceitos fundamentais da programação de computadores tendo por base o paradigma imperativo e a linguagem C.

Leia mais

Algoritmos e Estruturas de Dados I Linguagem C

Algoritmos e Estruturas de Dados I Linguagem C Algoritmos e Estruturas de Dados I (DCC/003) Algoritmos e Estruturas de Dados I Linguagem C Aula Tópico 11 Recursividade 1 Recursão Na linguagem C, uma função pode chamar outra função. A função main()

Leia mais

Recursividade. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Recursividade. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Recursividade David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Conceito de Recursividade Fundamental em Matemática e Ciência da Computação Um programa recursivo é um programa que chama a si

Leia mais

Recursividade. Objetivos do módulo. O que é recursividade

Recursividade. Objetivos do módulo. O que é recursividade Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade

Leia mais

Análise de Algoritmos Parte 4

Análise de Algoritmos Parte 4 Análise de Algoritmos Parte 4 Túlio Toffolo tulio@toffolo.com.br www.toffolo.com.br BCC202 Aula 07 Algoritmos e Estruturas de Dados I Como escolher o algoritmo mais adequado para uma situação? (continuação)

Leia mais

Algoritmos e Estruturas de Dados I

Algoritmos e Estruturas de Dados I Algoritmos e Estruturas de Dados I Prof. Daniel M. Martin (daniel.martin@ufabc.edu.br) Aula 10 (Baseada nos slides do Prof. André Balan) Recursão Recursão Da wikipedia: A recursão é o processo pelo qual

Leia mais

Aula 16: Laços aninhados e desvios

Aula 16: Laços aninhados e desvios Aula 16: Laços aninhados e desvios Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2019/1 Departamento de Computação UFOP Aula Anterior Comandos de Repetição (Parte

Leia mais

Introdução à Programação Aula 16 Mais exemplos de recursão

Introdução à Programação Aula 16 Mais exemplos de recursão Introdução à Programação Aula 16 Mais exemplos de recursão Pedro Vasconcelos DCC/FCUP 2014 Pedro Vasconcelos (DCC/FCUP) Introdução à Programação Aula 16 Mais exemplos de recursão 2014 1 / 22 Nesta aula

Leia mais

Revisão: Tipo Abstrato de Dados Recursividade

Revisão: Tipo Abstrato de Dados Recursividade Algoritmos e Estrutura de Dados II Revisão: Tipo Abstrato de Dados Recursividade Prof a Karina Oliveira kkco@dei.unicap.br Introdução Estudo das estruturas de dados envolve dois objetivos complementares:

Leia mais

INTRODUÇÃO À PROGRAMAÇÃO

INTRODUÇÃO À PROGRAMAÇÃO INTRODUÇÃO À PROGRAMAÇÃO 1.Ano LCC-MIERSI DCC - FCUP Nelma Moreira Aula 10 Geração de números pseudoaleatórios Função rand() i = rand(); gera um inteiro entre 0 e RAND_MAX, com igual probabilidade de ocorrer.

Leia mais

Recursividade. Recursividade

Recursividade. Recursividade A recursão é uma técnica que define um problema em termos de uma ou mais versões menores deste mesmo problema. Esta ferramenta pode ser utilizada sempre que for possível expressar a solução de um problema

Leia mais

Técnicas de análise de algoritmos

Técnicas de análise de algoritmos CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS Técnicas de análise de algoritmos Algoritmos e Estruturas de Dados I Natália Batista https://sites.google.com/site/nataliacefetmg/ nataliabatista@decom.cefetmg.br

Leia mais

Introdução à Programação / Programação I

Introdução à Programação / Programação I Introdução à Programação / Programação I Aula 19: Mais exemplos de recursão Rita P. Ribeiro 2018/2019 Departamento de Ciência de Computadores Nesta aula 1. Desenhar árvores 2. Torre de Hanoi 3. Ordenação

Leia mais

Algoritmos de pesquisa

Algoritmos de pesquisa Define-se pesquisa como a operação que permite encontrar ou concluir que não existe, um dado elemento num dado conjunto. A pesquisa de um elemento pode ser feita num conjunto ordenado ou não. Quando o

Leia mais

INF 1007 Programação II

INF 1007 Programação II INF 1007 Programação II Aula 09 Ordenação de Vetores Edirlei Soares de Lima Ordenação de Vetores Problema: Entrada: vetor com os elementos a serem ordenados; Saída: mesmo vetor com

Leia mais

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação   IECE - ITA ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA MÉTODOS MAIS EFICIENTES QUE O(N 2 ) Método Quicksort Método

Leia mais

Tentativa e Erro (Backtracking)

Tentativa e Erro (Backtracking) (Backtracking) Norton T. Roman Apostila baseada no trabalho de Delano M. Beder, David Matuszek e Nivio Ziviani Suponha que você tem que tomar uma série de decisões dentre várias possibilidades, onde Você

Leia mais

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Ordenação: QuickSort. Prof. Túlio Toffolo  BCC202 Aula 15 Algoritmos e Estruturas de Dados I Ordenação: QuickSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 15 Algoritmos e Estruturas de Dados I QuickSort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação

Leia mais

Aula 21 - Algoritmos e Funções Recursivas

Aula 21 - Algoritmos e Funções Recursivas Aula 21 - Considere a definição da função fatorial: n! = 1 se n 0 Considere agora a seguinte definição equivalente: n! = 1 se n 0 Dizemos que essa

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Principais paradigmas do projeto de algoritmos - Recursividade - Tentativa e erro - Divisão e Conquista - Programação dinâmica - Algoritmos Gulosos e de Aproximação

Leia mais

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins

Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins Prova 1 PMR2300 / PMR3201 1o. semestre 2015 Prof. Thiago Martins Instruções: Escreva o nome e o número USP na folha de papel almaço. Indique na linha seguinte quatro das cinco questões abaixo que devem

Leia mais

SCC Introdução à Ciência de Computação II. Recursão

SCC Introdução à Ciência de Computação II. Recursão SCC0601 - Introdução à Ciência de Computação II Recursão Definição Uma função é dita recursiva quando é definida em seus próprios termos, direta ou indiretamente Dicionário Michaelis: ato ou efeito de

Leia mais

Problema das n rainhas

Problema das n rainhas AULA 24 Problema das n rainhas Fonte: http://www.bhmpics.com/ PF 12 http://www.ime.usp.br/ pf/algoritmos/aulas/enum.html http://en.wikipedia.org/wiki/eight_queens_puzzle Problema das n rainhas Problema:

Leia mais

Recursão e Back-Tracking

Recursão e Back-Tracking Recursão e Back-Tracking Fernando Silva & Luís Lopes DCC-FCUP Estruturas de Dados Recursão Uma função diz-se recursiva quando se chama a si própria, directa ou indirectamente. A recursão: à semelhança

Leia mais

Módulo 16 - Ordenação. Referências

Módulo 16 - Ordenação. Referências Estruturas de Dados Módulo 6 - Ordenação /5/006 (c) Dept. Informática - PUC-Rio Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora Campus (004) Capítulo

Leia mais

Problema das n rainhas AULA 24. Soluções. Problema das 8 rainhas. Problema das 8 rainhas

Problema das n rainhas AULA 24. Soluções. Problema das 8 rainhas. Problema das 8 rainhas Problema das n rainhas AULA 24 Fonte: http://www.bhmpics.com/ PF 12 http://www.ime.usp.br/ pf/algoritmos/aulas/enum.html http://en.wikipedia.org/wiki/eight_queens_puzzle Problema das n rainhas Problema:

Leia mais

Fernando Silva DCC-FCUP. Estruturas de Dados

Fernando Silva DCC-FCUP. Estruturas de Dados 3. Recursividade, Bactracking e Dividir-para-Conquistar Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 3. Recursividade, Bactracking e Dividir-para-Conquistar Estruturas de Dados

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação 1.Ano LCC-MIERSI DCC - FCUP Nelma Moreira Aula 5 1 Repitições controladas por contadores Contar até 10 main() { int contador=0; while (++contador

Leia mais

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr 5COP096 Teoria da Computação Aula 4 Prof. Dr. Sylvio Barbon Junior 1 Sumário 1) Técnicas de Análise de Algoritmos 2) Paradigmas de Projeto de Algoritmos 1) Indução 2) Recursão 3) Algoritmos Tentativa e

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Aula 09 Algoritmos de Ordenação Edirlei Soares de Lima Ordenação Problema: Entrada: conjunto de itens a 1, a 2,..., a n ; Saída: conjunto de itens

Leia mais

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006)

5. Análise de Complexidade de Algoritmos. João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) 5. Análise de Complexidade de Algoritmos João Pascoal Faria (versão original) Ana Paula Rocha (versão 2003/2004) Luís Paulo Reis (versão 2005/2006) FEUP - MIEEC Prog 2-2006/2007 Introdução Algoritmo: conjunto

Leia mais

Estruturas de Dados Aula 14: Recursão

Estruturas de Dados Aula 14: Recursão Estruturas de Dados Aula 14: Recursão Fontes Bibliográficas Livros: Projeto de Algoritmos (Nivio Ziviani): Capítulo 2; Estruturas de Dados e seus Algoritmos (Szwarefiter, et. al): Capítulo 1; Algorithms

Leia mais

Estruturas de Dados Aula 14: Recursão 19/05/2011

Estruturas de Dados Aula 14: Recursão 19/05/2011 Estruturas de Dados Aula 14: Recursão 19/05/2011 Fontes Bibliográficas Livros: Projeto de Algoritmos (Nivio Ziviani): Capítulo 2; Estruturas de Dados e seus Algoritmos (Szwarefiter, et. al): Capítulo 1;

Leia mais

Recursividade. Prof. Jesus José de Oliveira Neto

Recursividade. Prof. Jesus José de Oliveira Neto Recursividade Prof. Jesus José de Oliveira Neto Algoritmos podem ser definidos de duas formas: Forma iterativa ou não recursiva: utiliza laços de repetição (while, for, do/while) Forma recursiva: métodos

Leia mais

Pesquisa e Ordenação

Pesquisa e Ordenação Pesquisa e Ordenação SC121 - Introdução à Programação ICMC - USP - São Carlos Maio de 2009 Algoritmo de Procura Algoritmo de Procura O problema de procurar, pesquisar alguma informação numa tabela ou num

Leia mais

Algoritmos e Funções Recursivas

Algoritmos e Funções Recursivas Considere a definição da função fatorial: n! = 1 se n 0 n.(n-1).(n-2).... 3.2.1 se n > 0 Considere agora a seguinte definição equivalente: n! = 1 se n 0 n.(n-1)! se n > 0 Dizemos que essa última definição

Leia mais

SCC Capítulo 6 Paradigmas e Técnicas de Projetos de Algoritmos

SCC Capítulo 6 Paradigmas e Técnicas de Projetos de Algoritmos SCC-501 - Capítulo 6 Paradigmas e Técnicas de Projetos de Algoritmos João Luís Garcia Rosa 1 1 Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação 1.Ano LCC-MIERSI DCC - FCUP Nelma Moreira Aula 7 Tipos de inteiros em C Os inteiros em C podem ser com sinal ou sem sinal:e cada um pode ter vários tamanhos: int i; unsigned int

Leia mais

6. Pesquisa e Ordenação

6. Pesquisa e Ordenação 6. Pesquisa e Ordenação Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 6. Pesquisa e Ordenação Estruturas de Dados 1 / 30 Pesquisa de Informação A pesquisa eficiente de informação

Leia mais

INF 1010 Estruturas de Dados Avançadas

INF 1010 Estruturas de Dados Avançadas INF 1010 Estruturas de Dados Avançadas Complexidade de Algoritmos 2012 DI, PUC-Rio Estruturas de Dados Avançadas 2012.2 1 Introdução Complexidade computacional Termo criado por Hartmanis e Stearns (1965)

Leia mais

Aula 10 Algoritmos e Funções Recursivas

Aula 10 Algoritmos e Funções Recursivas Aula 10 Algoritmos e Funções Recursivas Considere a definição da função fatorial: n! = 1 se n 0 Considere agora a seguinte definição equivalente: n! = 1 se n

Leia mais

controle de fluxo repetições iterativas

controle de fluxo repetições iterativas Controle de Fluxo Repetições iterativas INF1005 Programação I Prof. Hélio Lopes lopes@inf.puc-rio.br sala 408 RDC 1 controle de fluxo repetições iterativas tópicos while for do while break continue referência

Leia mais

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35 INE5603 Introdução à POO Prof. A. G. Silva 25 de setembro de 2017 Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de 2017 1 / 35 Baseado em materiais da Recursividade Unisinos, Cesar Tacla (UTFPR),

Leia mais

SCC Capítulo 2 Recursão

SCC Capítulo 2 Recursão SCC-501 - Capítulo 2 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis

Leia mais

Estruturas de Repetição

Estruturas de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas de Repetição Aula Tópico 4 (while, for) 1 Problema 10 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em C. Dados dois números

Leia mais

PROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick

PROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick aconci@ic.uff.br, erickr@id.uff.br Roteiro Funções Escopo de Variáveis Variáveis Globais

Leia mais

Problema das n rainhas AULA 19. Soluções. Problema das 8 rainhas. Problema das 8 rainhas

Problema das n rainhas AULA 19. Soluções. Problema das 8 rainhas. Problema das 8 rainhas Problema das n rainhas AULA 19 PF 12 http://www.ime.usp.br/ pf/algoritmos/aulas/enum.html http://en.wikipedia.org/wiki/eight_queens_puzzle Problema das n rainhas Problema: Dado n determinar todas as maneiras

Leia mais

Algoritmos de Enumeração

Algoritmos de Enumeração Em muitos casos para fazer a simulação de um algoritmo é necessário testar-se com um conjunto exaustivo de dados, ou seja, gerar várias ou todas as sequências possíveis de dados e verificar o comportamento

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Projeto de Algoritmos Cap.2 Paradigmas de Projeto de Algoritmos 1 Conteúdo do Capítulo 2.1 Indução Paradigmas de Projeto de Algoritmos 2.2 Recursividade 2.2.1 Como Implementar Recursividade 2.2.2 Quando

Leia mais

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Quicksort. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Quicksort David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Quicksort Proposto por Hoare em 1960 e publicado em 1962. É o algoritmo de ordenação interna mais rápido que se conhece para uma ampla

Leia mais

Linguagem C: agregados heterogêneos, arquivos binários, recursividade. Prof. Críston Algoritmos e Programação

Linguagem C: agregados heterogêneos, arquivos binários, recursividade. Prof. Críston Algoritmos e Programação Linguagem C: agregados heterogêneos, arquivos binários, recursividade Prof. Críston Algoritmos e Programação Agregados heterogêneos Permitem agrupar variáveis de diferentes tipos em um único registro struct

Leia mais

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

Recursividade. Estrutura de Dados. Prof. Kleber Rezende Recursividade Estrutura de Dados Prof. Kleber Rezende Considerações Iniciais Em aulas anteriores fizemos uma função que permite calcular o fatorial de um número. Naquela função, a cada nova iteração o

Leia mais

Introdução à Programação (CC111)

Introdução à Programação (CC111) Introdução à Programação (CC111) 1.Ano LCC-MIERSI Nelma Moreira Aula 11 Tipos de inteiros em C Os inteiros em C podem ser com sinal ou sem sinal: int i; unsigned int u; E cada um pode ter vários tamanhos:

Leia mais

Programação I Aula 15 Definições recursivas Pedro Vasconcelos DCC/FCUP

Programação I Aula 15 Definições recursivas Pedro Vasconcelos DCC/FCUP Programação I Aula 15 Definições recursivas DCC/FCUP DCC/FCUP 2019 1/ 30 Nesta aula 1 Definições recursivas 2 Exemplos Factorial Floco de neve de Koch Torre de Hanoi DCC/FCUP 2019 2/ 30 Recursividade Uma

Leia mais

# Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira

# Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira # Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira Na aula anterior... Alocação Dinâmica de Memória Introdução 3 O que vamos aprender? Recursividade

Leia mais

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II

ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II ESTRUTURAS DE DADOS E ALGORITMOS ALGORITMOS DE ORDENAÇÃO POR COMPARAÇÃO - II Adalberto Cajueiro Departamento de Sistemas e Computação Universidade Federal de Campina Grande ALGORITMOS VISTOS ANTERIORMENTE

Leia mais

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados

INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados INSTITUTO SUPERIOR TÉCNICO Algoritmos e Estruturas de Dados Ano Lectivo de 2002/2003 2 o Semestre Repescagem do 2 o Teste (A) 18 de Julho de 2003 Duração: 2h - O teste é sem consulta. - Para cada questão

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Projeto de Algoritmos Cap.2 Paradigmas de Projeto de Algoritmos 1 Paradigmas de Projeto de Algoritmos indução, recursividade, algoritmos tentativa e erro, Paradigmas de Projeto de Algoritmos divisão e

Leia mais

Técnicas de Desenho de Algoritmos

Técnicas de Desenho de Algoritmos Técnicas de Desenho de Algoritmos Mudança de ênfase: da implementação de algoritmos para o desenho de algoritmos A ver: 5 tipos de algoritmos abordagem ao problema exemplos complexidade em tempo e espaço

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Projeto de Algoritmos Cap.2 Paradigmas de Projeto de Algoritmos 1 Paradigmas de Projeto de Algoritmos indução, recursividade, Paradigmas de Projeto de Algoritmos algoritmos tentativa e erro, divisão e

Leia mais

Programação científica C++

Programação científica C++ Programação científica C++ NIELSEN CASTELO DAMASCENO Slide 8 Matrizes como argumento de funções O nome de uma matriz (sem os colchetes) representa o endereço onde a matriz está armazenada. Ao passar o

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Paradigmas de Projeto de Algoritmos Última alteração: 2 de Setembro de 2010 Transparências elaboradas por Charles Ornelas Almeida, Israel Guerra e Nivio Ziviani Projeto de Algoritmos Cap.2 Paradigmas de

Leia mais

Paradigmas de Projeto de Algoritmos

Paradigmas de Projeto de Algoritmos Paradigmas de Projeto de Algoritmos Última alteração: 10 de Outubro de 2006 Transparências elaboradas por Charles Ornelas, Leonardo Rocha, Leonardo Mata e Nivio Ziviani Projeto de Algoritmos Cap.2 Paradigmas

Leia mais

Python: Recursão. Claudio Esperança

Python: Recursão. Claudio Esperança Python: Recursão Claudio Esperança Recursão É um princípio muito poderoso para construção de algoritmos A solução de um problema é dividido em Casos simples: São aqueles que podem ser resolvidos trivialmente

Leia mais

Ordenação: MergeSort. Prof. Túlio Toffolo BCC202 Aula 14 Algoritmos e Estruturas de Dados I

Ordenação: MergeSort. Prof. Túlio Toffolo  BCC202 Aula 14 Algoritmos e Estruturas de Dados I Ordenação: MergeSort Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aula 14 Algoritmos e Estruturas de Dados I DIVISÃO E CONQUISTA Motivação É preciso revolver um problema com uma entrada grande

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação! Problema: encontrar um número de telefone em uma lista telefônica! simplificado pelo fato dos nomes estarem em ordem alfabética! e se estivesse sem uma ordem?! Problema: busca

Leia mais

04 Recursão SCC201/501 - Introdução à Ciência de Computação II

04 Recursão SCC201/501 - Introdução à Ciência de Computação II 04 Recursão SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir Ponti Jr. (ICMCUSP) 04Recursão

Leia mais

Algoritmos e Modelação Computacional. Paulo Mateus MEBiom LMAC 2018

Algoritmos e Modelação Computacional. Paulo Mateus MEBiom LMAC 2018 Algoritmos e Modelação Computacional Paulo Mateus MEBiom LMAC 2018 Objetivos Edição e compilação de programas Tipos e expressões Declaração de variáveis Atribuição, composição sequencial, iterativa e alternativa

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 13: Ordenação: MergeSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: reifortes@iceb.ufop.br

Leia mais

Capítulo VII : A Recorrência

Capítulo VII : A Recorrência Capítulo VII : A Recorrência 1 _ Capítulo VII : A Recorrência Quando algo é definido em termos de si próprio. Ex1: O Tetraedro de Sierpinski Ex2: Fracções Contínuas Ex3: A Carpete de Sierpinski Ex4: A

Leia mais

Programação de Computadores II. Cap. 16 Ordenação

Programação de Computadores II. Cap. 16 Ordenação Programação de Computadores II Cap. 16 Ordenação Livro: Waldemar Celes, Renato Cerqueira, José Lucas Rangel. Introdução a Estruturas de Dados, Editora Campus (2004) Slides adaptados dos originais dos profs.:

Leia mais

Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet

Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Aula 17 Quick Sort Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior de Tecnologia em Sistemas para Internet Prof. Bruno B. Boniati www.cafw.ufsm.br/~bruno Ordenação

Leia mais

Introdução Paradigmas

Introdução Paradigmas Introdução Paradigmas Recursividade Algoritmos tentativa e erro Divisão e conquista Programação dinâmica Algoritmos gulosos Algoritmos aproximados 1 Introdução O projeto de algoritmos requer abordagens

Leia mais

Ordenação e Pesquisa

Ordenação e Pesquisa Ordenação e Pesquisa Luís Lopes DCC-FCUP Estruturas de Dados Pesquisa de Informação A pesquisa eficiente de informação é extremamente relevante, seja: num catálogo indexado por uma relação de ordem, e.g.

Leia mais

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo

Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária. Túlio Toffolo Aula T19 BCC202 Pesquisa (Parte 1) Pesquisa Binária Túlio Toffolo www.decom.ufop.br/toffolo Pesquisa em Memória Primária n Introdução - Conceitos Básicos n Pesquisa Sequencial n Pesquisa Binária n Árvores

Leia mais

HeapSort. Estrutura de Dados II Jairo Francisco de Souza

HeapSort. Estrutura de Dados II Jairo Francisco de Souza HeapSort Estrutura de Dados II Jairo Francisco de Souza HeapSort Algoritmo criado por John Williams (1964) Complexidade O(NlogN) no pior e médio caso Mesmo tendo a mesma complexidade no caso médio que

Leia mais

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa? Funções Suponha um conjunto habitacional, com várias famílias...... imagina se todas elas morassem em uma única casa? Funções Introdução à Computação 1 de 28 Funções Na Programação, funções são conjuntos

Leia mais

Aula 5 ESTRUTURAS DE REPETIÇÃO (WHILE)

Aula 5 ESTRUTURAS DE REPETIÇÃO (WHILE) Aula 5 ESTRUTURAS DE REPETIÇÃO (WHILE) Profa. Dra. Elisa Yumi Nakagawa 1o semestre/2017 Estruturas de Controle ESTRUTURA SEQUENCIAL ESTRUTURAS CONDICIONAIS Estrutura Condicional Simples Estrutura Condicional

Leia mais

Linguagem C: agregados heterogêneos, arquivos binários, recursividade. Prof. Críston Algoritmos e Programação

Linguagem C: agregados heterogêneos, arquivos binários, recursividade. Prof. Críston Algoritmos e Programação Linguagem C: agregados heterogêneos, arquivos binários, recursividade Prof. Críston Algoritmos e Programação Agregados heterogêneos Permitem agrupar variáveis de diferentes tipos em um único registro struct

Leia mais

Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados Algoritmos e Estruturas de Dados Prof. Yandre Maldonado - 1 RECURSIVIDADE Prof. Yandre Maldonado e Gomes da Costa Prof. Yandre Maldonado - 2 Um objeto é dito recursivo se ele consistir parcialmente ou

Leia mais