Análise Projeto de Algoritmos

Slides:



Advertisements
Apresentações semelhantes
Árvores CC/EC/Mestrado Teoria dos Grafos ‏ 1.
Advertisements

Algoritmos em Grafos.
Programação em Java Prof. Maurício Braga
Geometria Computacional Fecho Convexo II
Programação em Java Prof. Maurício Braga
Matrizes Unidimensionais
Fluxo em Redes Prof. Ricardo R. Santos.
Katia S. Guimarães QUICKSORT Katia S. Guimarães
Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Aula 10 Algoritmos de Busca
Algoritmos de Ordenação
Algoritmos de Busca CONTEÚDO (1) Motivação (2) Busca Linear
Classificação de Dados
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.
David Menotti Estruturas de Dados I DECOM – UFOP
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
Aplicações de Pilhas Pilhas são fundamentais em diversas áreas da computação: Sistemas Operacionais Arquitetura de Computadores Compiladores Entre outros.
FACENS – Engenharia da Computação Lógica Computacional II
Pesquisa Algoritmos de pesquisa recebem um alvo e tentam encontrá-lo dentro de um conjunto de elementos. Recuperação (ou hit): quando o algoritmo encontra.
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Ordenação Facilitar e aumentar a eficiência das operações de pesquisa sobre esses dados Pode ser crescente ou decrescente A seqüência de entrada, normalmente,
Classificação de dados por Troca: QuickSort
Classificação de dados por Intercalação: MergeSort
Dividir-e-Conquistar
Recorrências.
Descreva por palavras suas o funcionamento de um algoritmo
Algoritmos e Programação
Algoritmos de Ordenação
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Algoritmos de Busca Parte II
Informática Teórica Engenharia da Computação
Introdução à Programação
Paradigma de Divisão e Conquista
Ordenação em memória primária
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Aula 14.
Aulas 9,10 Fábio Nakano.
Introdução a Programação
Mergesort Katia Guimarães.
Algoritmos e Estruturas de Dados I – Recursão
MERGE SORT DANIEL C. MERODE NAIROBI S. DE OLIVEIRA SEGURANÇA DA INFORMAÇÃO - ESTRUTURA DE DADOS C++
Procedimentos e Funções
Algoritmos e Estruturas de Dados I – Recursão
QuickSort Dividir: A[p…r] é particionado (reorganizado) em dois subvetores não vazios A[p…q] e A[q+1…r] tal que cada elemento de A[p…q] é menor ou igual.
Busca Combinatorial e Métodos de Heurística
Aula 10 Algoritmos de Busca
Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações.
Como analisar um algoritmo
Programação Dinâmica.
DCC 001 Programação de Computadores 2º Semestre de 2011
Geometria Computacional Fecho Convexo
Algoritmos e Estruturas de Dados I – Recursão
Complexidade de Computação Katia Guimarães. Avaliando a Qualidade de um Algoritmo É preciso ter bem definido –O que é dado de entrada e –O que é esperado.
Exercícios Análise de algoritmos & Ordenação
Algoritmos e Programação MC102
Setembro 2004Projeto e Análise de Algoritmos - Celso Carneiro Ribeiro1 Projeto e Análise de Algoritmos Celso Carneiro Ribeiro
Algoritmos em Grafos Celso C. Ribeiro Caroline T. Rocha.
Prof. Alessandro Gonçalves
Exercícios (Algoritmo Narrativo, Fluxograma e Pseudocódigo) RESOLVIDO
Exercícios Análise de algoritmos & Ordenação
ATAL – Prof. Jorge Figueiredo Ordenação AT AL Análise e Técnicas de Algoritmos Análise de Algoritmos de Ordenação.
Métodos de Pesquisa: Sequencial e Binária
Ordenação Professor Paulo Gomide 27 de outubro de 2015.
USP – ICMC – SSC SSC0300 2º Semestre 2015
Ordenação (Sorting) Ordenar é dispor os elementos de um conjunto numa ordem ascendente ou descendente. Problema: Dados n números, arranjá-los em ordem.
Lógica de Programação – Forbellone / Eberspacher Lógica de Programação Capítulo 6 Modularizando Algoritmos.
Algoritmos com matrizes e vetores
Transcrição da apresentação:

Análise Projeto de Algoritmos Loana Tito Nogueira 16-Maio-2006 Loana Tito Nogueira

Projeto de Algoritmos por Divisão e Conquista Dividir para Conquistar: tática de guerra aplicada ao projeto de algoritmos Um algoritmo de divisão e conquista é aquele que resolve o problema desejado combinando as soluções parciais de (um ou mais) subproblemas, obtidas recursivamente. Loana Tito Nogueira

Projeto de Algoritmos por Divisão e Conquista Seja H um problema algorítmico. O método da divisão e conquista consiste em tentar resolver H, através dos seguintes passos: Decompor H em subproblemas H1, H2, ..., Hk Menores que H Loana Tito Nogueira

Projeto de Algoritmos por Divisão e Conquista Seja H um problema algorítmico. O método da divisão e conquista consiste em tentar resolver H, através dos seguintes passos: Decompor H em subproblemas H1, H2, ..., Hk Resolver cada subproblema Hi, através de uma aplicação recursiva desse método Menores que H Loana Tito Nogueira

Projeto de Algoritmos por Divisão e Conquista Seja H um problema algorítmico. O método da divisão e conquista consiste em tentar resolver H, através dos seguintes passos: Decompor H em subproblemas H1, H2, ..., Hk Resolver cada subproblema Hi, através de uma aplicação recursiva desse método Compor a solução de H, a partir das soluções de H1, H2, ..., Hk Menores que H Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

Algoritmo Genérico – Divisão e Conquista DivConq(x) Entrada: A instância x Saída: Solução y da instância x Se x é suficientemente pequeno então Retorne Solução(x) (dada pelo algoritmo para peq. Instâncias) Senão Divisão Decomponha x em instâncias menores x1, ..., xk Para i=1 até k faça yi=DivConq(xi) Conquista Combine as soluções yi para obter a solução y de x Retorne(y) Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Por hipótese de indução, sei calcular an-1. Então, calculo na multiplicando an-1 por a Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Por hipótese de indução, sei calcular an-1. Então, calculo na multiplicando an-1 por a Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Por hipótese de indução, sei calcular an-1. Então, calculo na multiplicando an-1 por a Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Por hipótese de indução, sei calcular an-1. Então, calculo na multiplicando an-1 por a Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 1a. Solução: (Indução Fraca): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Algoritmo: Expon(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão an’ := Expon(a, n-1) an := an’*a Retorne(an) Loana Tito Nogueira

Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Algoritmo: Expon(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão an’ := Expon(a, n-1) an := an’*a Retorne(an) Loana Tito Nogueira

Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Algoritmo: Expon(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão an’ := Expon(a, n-1) an := an’*a Retorne(an) Loana Tito Nogueira

Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Algoritmo: Expon(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão an’ := Expon(a, n-1) an := an’*a Retorne(an) Loana Tito Nogueira

Complexidade: Expon(a,n) T(n): nº de operações realizadas pelo algoritmo para calcular an 1, n=0 T(n) = T(n-1)+ 1, n>0 Loana Tito Nogueira

Complexidade: Expon(a,n) T(n): nº de operações realizadas pelo algoritmo para calcular an 1, n=0 T(n) = T(n-1)+ 1, n>0 T(n)= (n) Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular an-1 Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular ak, para todo k<n Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an-1 calculo na multiplicando an-1 por a Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular ak, para todo k<n Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular ak, para todo k<n Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an/2 Loana Tito Nogueira

Projeto por Divisão e Conquista – Exemplo 1 Exponenciação Problema: Calcular na, para todo real a e inteiro n0. 2a. Solução: (Indução Forte): Caso base: n=0; a0 = 1 Hipótese de Indução: Suponha que, para qualquer inteiro n>0 e real a, sei calcular ak, para todo k<n Passo da Indução: Queremos provar que conseguimos calcular an, para n>0. Sei calcular an/2 (an/2 )2, se n é par an a. (an/2)2, se n é ímpar Loana Tito Nogueira

Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Algoritmo: Exp(a,n) Entrada: A base a e o expoente n Saída: O valor de an Se n = 0 então Retorne(1) {caso base} Senão divisão an’ := Exp(a, n div 2) conquista an := an’*an’ Se (n mod 2)=1 então an:= an* a Retorne(an) Loana Tito Nogueira

T(n): nº de operações realizadas pelo algoritmo para calcular an Complexidade T(n): nº de operações realizadas pelo algoritmo para calcular an 1 , n=0 T(n) = T(n/2 )+ c , n>0 Loana Tito Nogueira

T(n): nº de operações realizadas pelo algoritmo para calcular an Complexidade T(n): nº de operações realizadas pelo algoritmo para calcular an 1 , n=0 T(n) = T(n/2 )+ c , n>0 T(n)= (log n) Loana Tito Nogueira

Busca Binária Problema: Dado um vetor ordenado A com n números reais e um real x, determinar a posição 1 i  n tal que A[i]=x, ou que não existe tal i. Loana Tito Nogueira

Busca Binária Problema: Dado um vetor ordenado A com n números reais e um real x, determinar a posição 1 i  n tal que A[i]=x, ou que não existe tal i. INDUÇÃO FORTE!! Loana Tito Nogueira

Busca Binária Problema: Dado um vetor ordenado A com n números reais e um real x, determinar a posição 1 i  n tal que A[i]=x, ou que não existe tal i. INDUÇÃO FORTE!! Como o vetor está ordenado, conseguimos determinar, com apenas uma comparação, que metade das posições do vetor não podem conter o valor x Loana Tito Nogueira

Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senão se A[j]>x então j:=BuscaBinaria(A, i,f-1, x) j:= BuscaBinaria(A, i+1, f, x) retorne(j) Loana Tito Nogueira

Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senão se A[j]>x então j:=BuscaBinaria(A, i,f-1, x) j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f Loana Tito Nogueira

Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senão se A[j]>x então j:=BuscaBinaria(A, i,f-1, x) j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f j Loana Tito Nogueira

Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senão se A[j]>x então j:=BuscaBinaria(A, i,f-1, x) j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f j Loana Tito Nogueira

Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senão se A[j]>x então j:=BuscaBinaria(A, i,f-1, x) j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f x =A[j] ? Loana Tito Nogueira

Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senão se A[j]>x então j:=BuscaBinaria(A, i,j-1, x) j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f x < A[j] ? Loana Tito Nogueira

Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senão se A[j]>x então j:=BuscaBinaria(A, i,j-1, x) j:= BuscaBinaria(A, i+1, f, x) retorne(j) i f x < A[j] ? Loana Tito Nogueira

Algoritmo: BuscaBinária(A, i, f, x) Entrada: Vetor A, extremos do subvetor, i e f e x Saída: índice 1 j  n tal que A[j]= x ou j=0 Se i=f então se A[i] =x então retorne(i) senão retorne(0) senão j:=(i+f) div 2 se A[j]=x retorne(j) senão se A[j]>x então j:=BuscaBinaria(A, i,f-1, x) j:= BuscaBinaria(A, i+1, f, x) retorne(j) Loana Tito Nogueira

Complexidade CALCULE! Loana Tito Nogueira

Problema: Ordenar um conjunto de n  1 inteiros Ordenação Problema: Ordenar um conjunto de n  1 inteiros Diversos algoritmos para o problema de ordenação através de indução Loana Tito Nogueira

Sabemos ordenar um conjunto de n-1  1 inteiros Ordenação Indução Simples: Hipótese de Indução: Sabemos ordenar um conjunto de n-1  1 inteiros Loana Tito Nogueira

Sabemos ordenar um conjunto de n-1  1 inteiros Ordenação Indução Simples: Hipótese de Indução: Sabemos ordenar um conjunto de n-1  1 inteiros Caso base: n=1. Já está ordenado!! Loana Tito Nogueira

Sabemos ordenar um conjunto de n-1  1 inteiros Ordenação Indução Simples: Hipótese de Indução: Sabemos ordenar um conjunto de n-1  1 inteiros Caso base: n=1. Já está ordenado!! Passo da Indução: Seja S um conjunto com n>1 inteiros e x um elemento de S. Loana Tito Nogueira

Sabemos ordenar um conjunto de n-1  1 inteiros Ordenação Indução Simples: Hipótese de Indução: Sabemos ordenar um conjunto de n-1  1 inteiros Caso base: n=1. Já está ordenado!! Passo da Indução: Seja S um conjunto com n>1 inteiros e x um elemento de S. Por h.i. sabemos ordenar S-x, basta então inserir x na posição correta para obtermos S ordenado Loana Tito Nogueira

Sabemos ordenar um conjunto de n-1  1 inteiros Ordenação Indução Simples: Hipótese de Indução: Sabemos ordenar um conjunto de n-1  1 inteiros Caso base: n=1. Já está ordenado!! Passo da Indução: Seja S um conjunto com n>1 inteiros e x um elemento de S. Por h.i. sabemos ordenar S-x, basta então inserir x na posição correta para obtermos S ordenado INSERTION SORT!!! Loana Tito Nogueira

Algoritmo: OrdenaçãoInserção(A, n) Entrada: Vetor A e n inteiro Saída: Vetor A ordenado Se n 2 faça OrdenaçãoInserção(A, n-1) v:= A[n] j:= n enquanto (j >1) e (A[j-1]) > v) faça A[j]:=A[j-1] j:=j-1 A[j]:=v Loana Tito Nogueira

Algoritmo: OrdenaçãoInserção(A, n) Entrada: Vetor A e n inteiro Saída: Vetor A ordenado Se n 2 faça OrdenaçãoInserção(A, n-1) v:= A[n] j:= n enquanto (j >1) e (A[j-1]) > v) faça A[j]:=A[j-1] j:=j-1 A[j]:=v Versão Recursiva Loana Tito Nogueira

Complexidade Tanto o número de comparações quanto de trocas é dado pela recorrência: 0, n=1 T(n)= T(n-1) + n, n>1 Loana Tito Nogueira

Algoritmo: OrdenaçãoInserção(A, n) Entrada: Vetor A e n inteiro Saída: Vetor A ordenado Para i:=2 até n faça v:= A[n] j:= n enquanto (j >1) e (A[j-1]) > v) faça A[j]:=A[j-1] j:=j-1 A[j]:=v Versão Iterativa Loana Tito Nogueira

Sabemos ordenar um conjunto de n-1  1 inteiros Caso base: OK! 2a. alternativa Hipótese de Indução: Sabemos ordenar um conjunto de n-1  1 inteiros Caso base: OK! Passo da Indução: Encontrar o mínimo x. Sabemos ordenar S\x. Selection Sort Loana Tito Nogueira

Entrada: Vetor A, inicio e fim Saída: Vetor A ordenado Selection Sort(A, i, n) Entrada: Vetor A, inicio e fim Saída: Vetor A ordenado Se i < n faça min:=i para j:= i+1 até n faça se A[j] < A[min] então min:=j t:= A[min] A[min]:= A[i] A[i]:= t SelectionSort(a, i+1, n) Loana Tito Nogueira

Número de comparações: T(n)= 0, se n=1 T(n)= T(n-1)+n, se n >1 Complexidade Número de comparações: T(n)= 0, se n=1 T(n)= T(n-1)+n, se n >1 Número de trocas: T(n)= T(n-1) + 1, n > 1 Loana Tito Nogueira

Número de comparações: T(n)= 0, se n=1 T(n)= T(n-1)+n, se n >1 Complexidade Número de comparações: T(n)= 0, se n=1 T(n)= T(n-1)+n, se n >1 Número de trocas: T(n)= T(n-1) + 1, n > 1 (n2) (n) Loana Tito Nogueira

se A[j] < A[min] então min:=j t:= A[min] A[min]:= A[i] A[i]:= t Versão Iterativa Para i:=1 até n-1 faça min:=i para j:= i+1 até n faça se A[j] < A[min] então min:=j t:= A[min] A[min]:= A[i] A[i]:= t Loana Tito Nogueira

Sabemos ordenar um conjunto de 1  k  n Indução Forte Hipótese de Indução: Sabemos ordenar um conjunto de 1  k  n Loana Tito Nogueira

Sabemos ordenar um conjunto de 1  k  n Caso Base: n=1. OK! Indução Forte Hipótese de Indução: Sabemos ordenar um conjunto de 1  k  n Caso Base: n=1. OK! Passo da Indução: Seja S um conjunto com n>1 inteiros. Podemos particionar S em dois subconjuntos de tamanhos aproximadamente iguais: n/2 en/2 Loana Tito Nogueira

Sabemos ordenar um conjunto de 1  k  n Caso Base: n=1. OK! Indução Forte Hipótese de Indução: Sabemos ordenar um conjunto de 1  k  n Caso Base: n=1. OK! Passo da Indução: Seja S um conjunto com n>1 inteiros. Podemos particionar S em dois subconjuntos de tamanhos aproximadamente iguais: n/2 en/2 < n Loana Tito Nogueira

Sabemos ordenar um conjunto de 1  k  n Caso Base: n=1. OK! Indução Forte Hipótese de Indução: Sabemos ordenar um conjunto de 1  k  n Caso Base: n=1. OK! Passo da Indução: Seja S um conjunto com n>1 inteiros. Podemos particionar S em dois subconjuntos de tamanhos aproximadamente iguais: n/2 en/2 Podemos usar a h.i. para ordenar S1 e S2 Loana Tito Nogueira

Sabemos ordenar um conjunto de 1  k  n Caso Base: n=1. OK! Indução Forte Hipótese de Indução: Sabemos ordenar um conjunto de 1  k  n Caso Base: n=1. OK! Passo da Indução: Seja S um conjunto com n>1 inteiros. Podemos particionar S em dois subconjuntos de tamanhos aproximadamente iguais: n/2 en/2 Podemos usar a h.i. para ordenar S1 e S2 COMO OBTER S? Loana Tito Nogueira

O algoritmo emprega os seguintes procedimentos: Loana Tito Nogueira

O algoritmo emprega os seguintes procedimentos: SORT(i,j): ordena o subcojunto {si,..., sj} Loana Tito Nogueira

O algoritmo emprega os seguintes procedimentos: SORT(i,j): ordena o subcojunto {si,..., sj} MERGE(S1, S2): efetua a intercalação dos subconjuntos ordenados S1 e S2 Loana Tito Nogueira

O algoritmo emprega os seguintes procedimentos: SORT(i,j): ordena o subcojunto {si,..., sj} MERGE(S1, S2): efetua a intercalação dos subconjuntos ordenados S1 e S2 Chamada Externa: SORT(1,n) Loana Tito Nogueira

Procedimento SORT(i,j) Se i=j então retornar si Senão m:= (i+j –1)/2 Algoritmo Procedimento SORT(i,j) Se i=j então retornar si Senão m:= (i+j –1)/2 Retornar MERGE(SORT(i, m), SORT(m+1, j)) Loana Tito Nogueira

Algoritmo Procedimento MERGE(S1, S2) Se S1 =  então Retornar S2 senão sejam e1, e2 os elementos iniciais de S1 e S2 resp. k:= Se e1> e2 então 1 senão 2 retornar {ek} Sk:= Sk – {ek} MERGE(S1, S2) Loana Tito Nogueira

Complexidade T(n)= 2T(n/2) + n-1 Loana Tito Nogueira

Loana Tito Nogueira