ALGORITMOS E COMPLEXIDADE PROBLEMAS E ALGORITMOS



Documentos relacionados
Análise e Complexidade de Algoritmos

Programação Estruturada

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

Slide 01 16/03/2017. Estruturas de Dados. Prof. Cleziel Franzoni da /Cleziel.

Introdução à Programação. Expressões Booleanas e Comandos Condicionais

Estruturas de dados e algoritmos fundamentais

Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02

Programação I Aula 15 Definições recursivas

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

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

Processamento da Informação

Programação Estruturada Prof. Rodrigo Hausen Vetores (Arrays)

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 04 Algoritmos e Programação Estruturada

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Prova 1 PMR3201 Computação para Automação 1o. semestre 2016 Prof. Thiago de Castro Martins

Estrutura de Dados Conceitos Iniciais

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

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

INTRODUÇÃO A PROGRAMAÇÃO

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO E DO DESPORTO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS CEFET-MG UNIDADE DE ENSINO

Simulado de Linguagem de Programação Java

Aula 21 - Algoritmos e Funções Recursivas

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

Prova de Recuperação PMR3201/PMR2300 1o. semestre 2015 Prof. Thiago Martins

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Análise de Complexidade para algoritmos iterativos e recursivos

Linguagem C. André Tavares da Silva.

Algoritmos e Estruturas de Dados

Introdução à Programação. Vanessa Braganholo

Princípios de Desenvolvimento de Algoritmos MAC122

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Estruturas de Dados Aula 14: Recursão

MC102 Aula 27 Recursão II

Recursividade. Recursividade

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

Projeto e Análise de Algoritmos Análise de Complexidade. Prof. Luiz Chaimowicz

INF 1010 Estruturas de Dados Avançadas

Introdução à Programação

INF111 Programação II Aulas 11, 12, 13 Ordenação

Estrutura de Dados. Diego Silveira Costa Nascimento

LISTA DE EXERCÍCIOS MÊS 04

SCC Capítulo 2 Recursão

Introdução à Programação

Computação I (MAB120) DCC/UFRJ

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

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

Linguagem C: Ordenação

Introdução à Programação

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

Métodos de ordenação. Bubble sort:

Programação: Vetores

Processamento de Dados aplicado à Geociências. AULA 3: Algoritmos computacionais Representação de Algoritmos Sintaxe Tipos de dados Expressões

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

Exemplos. Jogo dos oito :-) Mundo dos blocos (ex: torre de Hanoi) Poblema das rainhas. Criptoaritmética. Missionários e Canibais.

Introdução à Programação

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Algoritmos e Estruturas de Dados I IEC012. Procedimentos e Funções. Prof. César Melo Todos os créditos para o professor Leandro Galvão

Sub-rotinas em C. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

Programação II. Tópicos Extras Ordenação (sort) Bruno Feijó Dept. de Informática, PUC-Rio

05 Análise de Algoritmos (parte 4) SCC201/501 - Introdução à Ciência de Computação II

ALGORITMOS DE ORDENAÇÃO RECURSIVOS

1. Selecione a Estrutura de Dados que melhor representa os diretórios ou pastas de arquivos do computador.

Algoritmos e Estruturas de Dados 2007/2008

Recursividade. Prof. Jesus José de Oliveira Neto

UNIMINAS Só é necessário o armazenamento de: Sinal da mantissa: - (menos). Valor da mantissa: Sinal do expoente: -(na realidade, háh

Introdução à Programação Estruturada Parte 2. Material da Prof. Ana Eliza

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

Apêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são:

Planificação Anual da disciplina de Programação e Sistemas de Informação 10º 1PI

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

Capítulo VII : A Recorrência

Métodos de Ordenação Parte 3

Curso Profissional de Gestão e Programação de Sistemas Informáticos. Programação e Sistemas de Informação. Módulo 1. 3ª Parte Prof. Sandra Pais Soares

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

TCC 00308: Programação de Computadores I Introdução

Fundamentos de Programação

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

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

Projeto e Desenvolvimento de Algoritmos

Recursão David Déharbe

Algoritmos e Estruturas de dados

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

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

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

TÉCNICAS DE PROGRAMAÇÃO. Estrutura de dados

Aula 03 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler

Princípios de Desenvolvimento de Algoritmos MAC122

INTRODUÇÃO À PROGRAMAÇÃO

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

Prof. Jesus José de Oliveira Neto

Capacitação em Linguagem C Parte 2

Recursão. Prof. Cristiano André da Costa. [Versão de Março de 2000] Definição

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Introdução à Programação

1ª Lista de Exercícios

Algoritmos e Estruturas de Dados I

Algoritmos e Programação

GABARITO Questão a b c d e

Transcrição:

ALGORITMOS E COMPLEXIDADE PROBLEMAS E ALGORITMOS Algoritmos e Complexidade 1

Plano Problemas e algoritmos. Estrutura de um algoritmo e dados manipulados. Métodos algorítmicos para resolução de problemas. Algoritmos: Pão de Ló de Alfeizerão; Soma de salários; Bubblesort; Torres de Hanoi; Tree sort; Merge sort; Rodovia mais barata; Caminho mais curto. Algoritmos e Complexidade 2

Um pouco de história Etimologia Algorismo Astrónomo matemático persa Abu Já Far Mohammed Ibn Musa Al-Khowarizmi [Bagdad; 780-850] corruptela de Al-Khowarizmi aquando da tradução europeia para o latim (século XII) do seu livro de Álgebra descrevendo processos para adicionar, subtrair, multiplicar e dividir números decimais. Algoritmos e Complexidade 3

Um pouco de história Algoritmo de Euclides - o primeiro algoritmo não trivial Professor, matemático e escritor de origem desconhecida Euclides de Alexandria [-325.. - 265] Para calcular o máximo divisor comum entre dois números naturais, subtrair o menor ao maior até ficarem iguais. x y 3 6 2 0 1 6 2 0 1 6 4 1 2 4 8 4 4 4 Definição 1: Algoritmos são prescrições de processos que quando executados permitem a resolução de problemas Algoritmos e Complexidade 4

Departamento de Ciências e Tecnologias da Informação Um algoritmo para um problema delicioso Receita do Pão de Ló de Alfeizerão Ingredientes: 100 grs de açúcar 6 gemas 2 ovos 50 grs de farinha Confecção: Batem-se os ovos inteiros com o açúcar até a mistura ficar esbranquiçada. Juntam-se as gemas desfeitas e bate-se tudo muito bem até ficar cremoso. Envolve-se a farinha bem peneirada. Deita-se a massa numa forma forrada com um papel grosso. Leva-se a cozer em forno quente até ficar cozido nas bordas. Retira-se do forno e desenforma-se. C Algoritmos utilizam instruções elementares de um conjunto pré-definido em função das capacidades/experiência de quem as lê e executa (hardware/cozinheiro experiente) C Programas são algoritmos que podem ser lidos e executados por computador C Uma vez que se pretende discutir problemas que podem ser resolvidos computacionalmente, vamos aqui considerar apenas algoritmos precisos cujas acções elementares podem ser definidas precisamente/sem ambiguidade e executadas em tempo finito por um computador. Algoritmos e Complexidade 5

Problemas, Algoritmos e Computadores Um problema, consistindo em: 1. Caracterização de uma colecção de entradas / inputs potenciais (possivelmente em número infinito); 2. Especificação das saídas/outputs desejados em função dos inputs. Definição 2: Um algoritmo é uma solução de um problema. É composto por instruções elementares de um conjunto pré-definido e deve ser capaz de produzir o outputs especificado para cada um dos inputs potenciais. Exemplo Problema: Dados x,y N (input), calcular mdc(x,y) (output) Problema Algorítmico Solução algorítmica Solução/Algoritmo: Subtrair o menor ao maior até ficarem iguais Algoritmos e Complexidade 6

Estrutura de um algoritmo As instruções elementares de um algoritmo podem ser organizadas por estruturas de controlo que especificam a ordem com que as instruções devem ser executadas. Sequência {A B D fazer A e de seguida fazer B e de seguida fazer D Alternativa if(q) A else B se Q então fazer A caso contrário fazer B Iteração while(q)a fazer A enquanto Q for( Subrotinas permite definir novas instruções Output subrotina(input parametro) Algoritmos e Complexidade 7

Dados manipulados por um algoritmo A informação manipulada por um algoritmo é guardada em variáveis estruturadas de diversas maneiras (Tipos). Números, caracteres, booleanos, palavras int, long, float, double, char, boolean, String Arrays combinando várias variáveis todas do mesmo tipo 4 5 2 1 4 9 0 3 7 0 1 7 9 8 5 Registos/Objectos combinando variáveis de tipos diferentes + operações Xavier 600 Algoritmos e Complexidade 8

Dados manipulados por um algoritmo Pilhas (sequência de elementos com disciplina de acesso LIFO) Filas (sequência de elementos com disciplina de acesso FIFO) Árvores (elementos dispostos hierarquicamente) Algoritmos e Complexidade 9

Dados manipulados por um algoritmo Grafos (elementos dispostos em rede) Algoritmos e Complexidade 10

Exemplos de algoritmos Problema máximo divisor comum : Dados x,y N (input), calcular mdc(x,y) (output) Solução: int euclides(int x,int y){ while(x!= y){ if(x>y) x = x y; else y = y x; return x ; Algoritmos e Complexidade 11

Exemplos de algoritmos Problema soma dos n primeiros naturais : Dado n N (input), calcular 1+2+3+ +n (output) Solução 1: int soma(int n){ int s = 0, i = 1; while(i <= n){ s = s + i; i = i + 1; return s; Algoritmos e Complexidade 12

Exemplos de algoritmos Problema soma dos n primeiros naturais : Dado n N (input), calcular 1+2+3+ +n (output) Solução 2: Solução de Carl Friedrich Gauss [1777.. 1855] 5 + 1 = 6 4 + 2 = 6 3 + 3 = 6 2 + 4 = 6 1 + 5 = 6 5 1 4 2 3 3 2 4 1 5 1 + 2 + 3 + 4 + 5 = 5x6/2 1 + 2 + + 100 = 100x101/2 int soma(int n){ return n*(n+1)/2; Algoritmos e Complexidade 13

Exemplos de algoritmos Problema soma de salários : Dado um array de n N empregados (input), calcular a soma dos seus salários (output) Solução : class Empregado{ String nome; float salário; Empregado(String nome, float salário){ this.nome = nome; this.salário = salário; float somasalarios(empregado[] empregados, int n){ float soma = 0; for(int i = 0; i < n; i = i +1) soma = soma + empregados[i].salário; return soma; Algoritmos e Complexidade 14

Exemplos de algoritmos traço da execução: Xavier Maria Ana Gustavo 600 300 1500 3500 soma = 0 i = 0 soma = 600 i = 1 soma = 900 i = 2 soma = 2400 i = 3 soma = 5900 i = 4 Algoritmos e Complexidade 15

Exemplos de algoritmos Problema ordenação : Dado um array de n N empregados (input), ordenar os empregados por nome (output) Solução: Empregado[] bublesort(empregado[] empregados, int n){ for(int i = 0; i < n-1; i = i +1){ for(int j = 0; j < n-1; j = j +1){ if(empregados[j].nome > empregados[j+1].nome){ Empregado aux = empregados[j]; empregados[j] = empregados[j+1]; empregados[j+1] = aux; return empregados; Algoritmos e Complexidade 16

Exemplos de algoritmos traço da execução: Xavier Maria Ana Gustavo 600 300 1500 3500 Maria Xavier Ana Gustavo 300 600 1500 3500 Maria Ana Xavier Gustavo 300 1500 600 3500 Maria Ana Gustavo Xavier 300 1500 3500 600 Ana Maria Gustavo Xavier 1500 300 3500 600 Ana Gustavo Maria Xavier 1500 3500 300 600 Algoritmos e Complexidade 17

Exemplos de algoritmos Problema Torres de Hanoi : Édouard Lucas, Nouveaux jeux scientifiques. La Nature, 17:301 303, 1889. http://www.prof2000.pt/users/pjca/jogos_ficheiros/hanoi/torre%20de%20hanoi.html São dados n discos de diâmetro 1, 2,, n dispostos por ordem decrescente de diâmetro num de 3 postes. Pretende-se transferir todos os discos para um dos outros postes, respeitando as seguintes restrições: 1. apenas um disco pode ser movido de cada vez, 2. apenas se podem mover os discos do topo 3. nenhum disco pode ser colocado sobre outro menor. Algoritmos e Complexidade 18

Departamento de Ciências e Tecnologias da Informação Exemplos de algoritmos Solução: Algoritmos e Complexidade 19

Exemplos de algoritmos Solução: void Hanoi(int n, char posteinicial, char postefinal, char posteauxiliar){ if(n == 1) System.out.println(posteInicial + + postefinal); else{ Hanoi(n-1, posteinicial, posteauxiliar, postefinal); System.out.println(posteInicial + + postefinal); Hanoi(n-1, posteauxiliar, postefinal, posteinicial); Algoritmos e Complexidade 20

Exemplos de algoritmos traço da execução: Hanoi(3,A,B,C) Hanoi(2,A,C,B) Hanoi(2,C,B,A) Hanoi(1,A,B,C) Hanoi(1,B,C,A) Hanoi(1,C,A,B) Hanoi(1,A,B,C) A B A C B C A B C A C B A B Algoritmos e Complexidade 21

Departamento de Ciências e Tecnologias da Informação Exemplos de algoritmos Problema ordenação : Dado uma lista de n N números (input), ordenar os números por ordem crescente (output) Solução tree sort : Transformar a lista de input numa árvore binária de pesquisa e de seguida atravessar a árvore em travessia infixa. traço da execução: Algoritmos e Complexidade 22

Departamento de Ciências e Tecnologias da Informação Exemplos de algoritmos Solução merge sort : traço da execução: 1. Dividir a lista de input em duas metades (a esquerda e a direita); 2. ordenar a lista esquerda; 3. ordenar a lista direita; 4. juntar as duas listas para obter uma lista final ordenada. Algoritmos e Complexidade 23

Métodos algorítmicos para resolução de problemas Como encontrar soluções para problemas? Não existe uma receita fácil para o sucesso! Mas, alguns algoritmos seguem um padrão particular. Incrementais Incrementalmente exploram todos os elementos de uma estrutura de dados e constroem uma solução. Solução Incremental(Dados d){ resultado = valorinicial; for( cada x elemento de d ) actualiza(resultado); return resultado; Exemplos: soma de salários, ordenação tree sort Algoritmos e Complexidade 24

Métodos algorítmicos para resolução de problemas Dividir para conquistar Solução DividirparaConquistar(Prolema p){ if(fácil(p)) Resolver(p); else{ Dividir(p) em p1 e p2; sol1 = DividirparaConquistar(p1); sol1 = DividirparaConquistar(p2); solução = Combinar(p1,p2); return solução; Exemplos: Torres de Hanoi, ordenação merge sort Algoritmos e Complexidade 25

Métodos algorítmicos para resolução de problemas Gulosos A escolha óptima local conduz à escolha óptima global. Problema Rodovia mais barata : Dada uma rede de n N cidades com os preços de cada ligação (input), qual a rodovia mais barata unindo todas as cidades (output) Solução: 1. Escolhe-se a ligação mais barata ; 2. Enquanto houver ligações ainda por considerar 2.1 Escolhe-se a ligação que permitir estender a rodovia de modo mais barato e sem introduzir ciclos; Algoritmos e Complexidade 26

Métodos algorítmicos para resolução de problemas traço da execução: Algoritmos e Complexidade 27

Métodos algorítmicos para resolução de problemas Planeamento/Programação dinâmica A escolha óptima global é obtida considerando todas as combinações de: 1. decisões simples (locais); e 2. a escolha óptima global das restantes decisões. Problema Caminho mais Curto : Dada uma rede de n N cidades com os preços de cada ligação e duas cidades dessa rede (input), qual o caminho mais curto entre A e B. Solução: 1. Enquanto houver cidades X directamente ligadas a A 1.1 Calcular o comprimento do caminho mais curto de X a B 2.O caminho final A continua com a cidade X para a qual se tem o mínimo valor do comprimento de A a X + comprimento do caminho mais curto entre X e B Algoritmos e Complexidade 28