Algoritmos e Estruturas de Dados. Lição n.º 1 Algoritmos e Estruturas de Dados

Documentos relacionados
MC3305 Algoritmos e Estruturas de Dados II. Aula 00 Apresentação. Prof. Jesús P. Mena-Chalco.

If969 - Algoritmos e Estruturas de Dados

Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011

Algoritmos para Automação e Sistemas

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

Simulado de Linguagem de Programação Java

Planejamento da Disciplina

FUNDAÇÃO UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO

PLANO DE DISCIPLINA DISCIPLINA: Algoritmos e Programação

Algoritmos e Estruturas de Dados. Lição n.º 3 Coleções: sacos, pilhas e filas

PLANO DE DISCIPLINA DISCIPLINA: Estrutura de Dados 2

Algoritmos e Estrutura de Dados. Aula 01 Apresentação da Disciplina e Introdução aos Algoritmos Prof. Tiago A. E. Ferreira

Algoritmos e Estruturas de Dados. Lição n.º 3 Coleções: sacos, pilhas e filas

Análise e Síntese de Algoritmos.

BCC402 Algoritmos e Programação Avançada. Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Tóffolo 2011/1

Desenho e Análise de Algoritmos

TEORIA: 60 LABORATÓRIO: 0

Sintaxe Básica de Java Parte 2

JavaScript (Elementos de Programação e Programação Básica)

Algoritmos e Estruturas de Dados

Informações Importantes! INF TURMA A

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011)

Estruturas de controle Parte 1

Algoritmos I Aula 13 Linguagem de Programação Java

PROGRAMAÇÃO JAVA. Parte 3

Linguagens de Programação Classificação

PLANO ANALÍTICO DA DISCIPLINA DE ESTRUTURA DE DADOS E ALGORÍTMOS

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

Exercício de Estrutura de dados. Java Fila

Ordenação e Pesquisa de Dados. Aula 07 Insertion Sort e Bubble Sort

Variáveis primitivas e Controle de fluxo

Estruturas de Controle

Conceitos básicos de programação

Estrututas de Dados e Algoritmos. Estrutura de Dados e Algoritmos

JAVA. Professor: Bruno Toledo

Material III-Bimestre Introdução e conceitos fundamentais da Linguagem C#

Métodos de Ordenação Parte 3

PHP: <?php echo("hello World");?> Printa Hello World na página do navegador, mais fácil do que no Java.

Universidade Estadual de Mato Grosso do Sul Ciência da Computação Algoritmos e Estruturas de Dados I (AED-I) Prof. Nilton

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

MsC. João Maria MsC. Liviane Melo

Ordenação. Insertion Sort

Linguagem de Programação. Thiago Leite Francisco Barretto

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

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

BCC202 - Estrutura de Dados I

Estrutura de Dados Conceitos Iniciais

Linguagens de Programação I

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

Estrutura de Dados. Diego Silveira Costa Nascimento

Introdução à Ciência da Computação II. Recursão. Prof. Ricardo J. G. B. Campello

Estruturas de Dados Encadeadas

MsC. João Maria MsC. Liviane Melo

Programação Imperativa. Lição n.º 16 A pilha de execução

Técnicas de Desenho de Algoritmos

Programação. MEAer e LEE. Bertinho Andrade da Costa. Instituto Superior Técnico. Argumentos da linha de comando Funções recursivas

Complexidade de Algoritmos

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Algoritmos de Pesquisa e Ordenação em Vectores

Revisão C++ - Parte 1

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Busca em Profundidade. Busca em Grafos. Busca em Grafos. Busca em Grafos. Busca em Grafos. Os objetivos da busca são: Aplicações???

Tipo de Dados em Linguagem C

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Linguagem de Programação C

Programação orientada a objetos: exemplo com frações (conclusão)

Filas de prioridade. Algoritmos e Estruturas de Dados AED 2005/2006 AEDA 2009/2010

SUBGERÊNCIA DE GESTÃO EDUCACIONAL PLANO DE CURSO

Introdução. Estrutura de Dados II Prof Jairo Francisco de Souza

Sumário. Capítulo 1 Introdução 29. Capítulo 2 Utilizando Objetos 59

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Estruturas de Dados Pilhas, Filas, Listas

Além de digitar e rodar os exemplos para ver seu funcionamento, deve-se ler atentamente e entender o que cada linha do código está fazendo.

Tecnicas Essencias Greedy e Dynamic

Complexidade de Algoritmos

Lista de Linguagens de Programação 16

Modelo de plano analitico

MÉTODOS DE ORDENAÇÃO. Introdução à Programação SI2

Hoje. mais análise de algoritmos: algoritmo de Euclides mais recursão: curvas de Hilbert

Orientação a Objetos AULA 09

Aula 4 Estruturas de Controle

Idiomas de Programação

Técnicas de Programação II

Luz, C Âmera, Ação! Introdução ao Java Cont.

Controlo de Execução. K&R: Capitulo 3

5COP096 TeoriadaComputação

Desenvolvendo aplicações Java

Simulado de Linguagem de Programação Java

ESTRUTURA DE DADOS (TCC )

Análise da Complexidade de Algoritmos

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

6. Pesquisa e Ordenação

05 Grafos: ordenação topológica SCC0503 Algoritmos e Estruturas de Dados II

Licenciatura em Informática

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

UNIVERSIDADE DO ESTADO DE SANTA CATARINA - UDESC DCC Departamento de Ciência da Computação Joinville-SC

Programação II. Busca em Vetor (search) Bruno Feijó Dept. de Informática, PUC-Rio

Transcrição:

Algoritmos e Estruturas de Dados Lição n.º 1 Algoritmos e Estruturas de Dados

Algoritmos e Estruturas de Dados Logística Tecnologia Aulas Avaliação Programa da cadeira O ambiente de programação 20140210 Algoritmos e Estruturas de Dados 2

Tecnologia Linguagem: Java. Componente gráfica: Processing. Estilo: Checkstyle. Ambiente: Eclipse, linha de comando. Sistema operativo: Windows, MacOS, Linux. Avaliador automático: Mooshak. Tutoria: Moodle. 20140210 Algoritmos e Estruturas de Dados 3

Aulas Teóricas: Pedro Guerreiro. Práticas: Hamid Shahbazkia. 20140210 Algoritmos e Estruturas de Dados 4

Bibliografia principal Algorithms, quarta edição (2011), Robert Sedgewick e Kevin Wayne. Book site: http://algs4.cs.princeton.edu/ http://www.amazon.co.uk/algorithms-robert-sedgewick/dp/032157351x/ 20140210 Algoritmos e Estruturas de Dados 5

Bibliografia de interesse Introduction to Algorithms, 3.ª edição, Thomas Cormen, Charles Leiserson, Ronald Rivest, Clifford Stein. http://www.amazon.co.uk/introduction-algorithms-tcormen/ The Art of Computer Programming, Donald Knuth. http://www.amazon.co.uk/art-computer-programmingvolumes-1-4a/ Algorithms + Data Structures = Programs, Niklaus Wirth (1975). http://www.amazon.co.uk/algorithms-structures-prentice-hallautomatic-computation/ 20140210 Algoritmos e Estruturas de Dados 6

Coursera Algorithms, Part I Instructors: Robert Sedgewick, Kevin Wayne. This course covers the essential information that every serious programmer needs to know about algorithms and data structures, with emphasis on applications and scientific performance analysis of Java implementations. Part I covers ( ) union-find algorithms; basic iterable data types (stack, queues, and bags); sorting algorithms (quicksort, mergesort, heapsort) and applications; priority queues; binary search trees; red-black trees; hash tables; and symbol-table applications. https://www.coursera.org/course/algs4parti 20140210 Algoritmos e Estruturas de Dados 7

Mais Coursera Algorithms, Part II Part II covers graph-processing algorithms, including minimum spanning tree and shortest paths algorithms, and string processing algorithms, including string sorts, tries, substring search, regular expressions, and data compression, and concludes with an overview placing the contents of the course in a larger context. https://www.coursera.org/course/algs4partii 20140210 Algoritmos e Estruturas de Dados 8

Programa de AED Conceitos fundamentais Modelo de programação Sacos, pilhas e filas Union-Find Análise de algoritmos Ordenação Algoritmos elementares Mergesort, quicksort Filas com prioridade Busca Árvores binárias de busca Árvores equilibradas Tabelas de dispersão Grafos Busca em profundidade Busca em largura Árvores de cobertura Caminho mais curto Cadeias de carateres Busca de subcadeias Compressão de dados Estratégias programativas Divisão-conquista Algoritmos gananciosos Programação dinâmica Intratabilidade 20140210 Algoritmos e Estruturas de Dados 9

Algoritmos de programação Busca linear Busca dicotómica Bubblesort Quicksort Conversão numérica Reversão numérica Máximo, mínimo de um array Remoção de duplicados Comparação lexicográfica de arrays 20140210 Algoritmos e Estruturas de Dados 10

Algoritmos no ensino secundário Fatorização Máximo divisor comum Simplificação de frações Regra de Ruffini Método de Gauss 20140210 Algoritmos e Estruturas de Dados 11

Algoritmos da escola primária Adição Subtração Multiplicação Divisão (Sucessor) 20140210 Algoritmos e Estruturas de Dados 12

Algoritmos clássicos Algoritmo de Euclides. Método para o cálculo de π, de Arquimedes. Crivo de Eratóstenes. 20140210 Algoritmos e Estruturas de Dados 13

Algoritmo de Euclides Calcula o máximo divisor comum de dois números inteiros positivos. É o mais antigo algoritmo inventado pelo espírito humano. public static int euclidalgorithm(int x, int y) while (x!= y) if (x < y) y -= x; else x -= y; return x; Isto será um método estático de alguma classe, em Java. 20140210 Algoritmos e Estruturas de Dados 14

Algoritmo de Euclides, variantes recursivas Formulação recursiva public static int euclid(int x, int y) return x < y? euclid(x, y-x) : x > y? euclid(x-y, y) : x; Formulação recursiva, curto-circuito: public static int greatestcommondivisor(int x, int y) int result = x; if (y!= 0) result = greatestcommondivisor(y, x % y); return result; Esta versão substitui uma sequência de subtrações x -= y até x ser menor que y por x % y. 20140210 Algoritmos e Estruturas de Dados 15

Algoritmo de Euclides, versão de combate Normalmente, usamos a seguinte variante iterativa: public static int gcd(int x, int y) while (y!= 0) int r = x % y; x = y; y = r; return x; Tenha esta sempre à mão! 20140210 Algoritmos e Estruturas de Dados 16

Comparando as versões iterativas Eis uma função de teste para comparar na consolas duas versões iterativas: public static void testiterativeversions() while (!StdIn.isEmpty()) int x = StdIn.readInt(); int y = StdIn.readInt(); int z1 = euclidalgorithm(x, y); StdOut.println(z1); int z2 = gcd(x, y); StdOut.println(z2); Lemos e escrevemos usando a biblioteca stdlib.jar, que teremos juntado ao projeto no Eclipse, importando-a e acrescentando-a ao build path. 20140210 Algoritmos e Estruturas de Dados 17

Classes StdIn e StdOut Usaremos a classe StdIn para ler e a classe StdOut para escrever na consola. StdOut StdIn 20140210 Algoritmos e Estruturas de Dados 18

A função main Em cada classe, a função main apenas chamará as funções de teste. Por enquanto, só temos uma função de teste: public static void main(string[] args) testiterativeversions(); A função main e todas as outras formam a classe Euclid, que teremos desenvolvido no Eclipse. 20140210 Algoritmos e Estruturas de Dados 19

Classe Euclid public final class Euclid public static int euclid(int x, int y) return x < y? euclid(x, y - x) : x > y? euclid(x - y, y) : x; //... public static void testiterativeversions() while (!StdIn.isEmpty()) int x = StdIn.readInt(); int y = StdIn.readInt(); int z1 = euclidalgorithm(x, y); StdOut.println(z1); int z2 = gcd(x, y); StdOut.println(z2); public static void main(string[] args) testiterativeversions(); 20140210 Algoritmos e Estruturas de Dados 20

Correndo no Eclipse Correndo no Eclipse, a interação dá-se na consola do Eclipse, terminando com ctrl-z (Windows) ou ctrl-d (Mac ou Linux). 20140210 Algoritmos e Estruturas de Dados 21

Correndo na linha de comando Para correr na linha de comando, colocamo-nos da diretoria bin, dentro do projecto, no workspace. Aí damos o comando java cp../stdlib.jar:. Euclid Observe: Note que estamos dentro da diretoria bin e que a biblioteca stdlib.jar está ao lado da diretoria bin. 20140210 Algoritmos e Estruturas de Dados 22

Testando as funções todas Eis uma segunda função de teste, para comparar os resultados das quatro funções: public static void testallversions() while (!StdIn.isEmpty()) int x = StdIn.readInt(); int y = StdIn.readInt(); int z1 = euclid(x, y); int z2 = euclidalgorithm(x, y); int z3 = greatestcommondivisor(x, y); int z4 = gcd(x, y); StdOut.printf("%d %d %d %d\n", z1, z2, z3, z4); 20140210 Algoritmos e Estruturas de Dados 23

Argumentos na linha de comando Selecionamos a função de teste por meio de um argumento na linha de comando: public static void main(string[] args) int choice = 1; if (args.length > 0) choice = Integer.parseInt(args[0]); switch (choice) case 1: testiterativeversions(); break; case 2: testallversions(); break; default: break; 20140210 Algoritmos e Estruturas de Dados 24