Complementos de Programação Código: 425202 ECTS: 6 Ano Letivo: 2015/16 Carga horária: T: 2:00 h; TP: 1:30 h; OT: 2:00 h; Departamento: Informática Área Científica: Informática; Objetivos da Unidade Curricular Proporcionar ao aluno uma introdução às técnicas de estruturação de dados no contexto da metodologia de programação centrada em objectos baseada em contratos. Aprofundar o estudo desta metodologia, com ênfase para os princípios de abstracção e modularização, bem como nos mecanismos de correcção e robustez. Introdução às técnicas algorítmicas mais comuns. Pré-requisitos Introdução à Programação (26722) Conteúdos Eficiência de Algoritmos. Pilhas e operações sobre pilhas. Filas e operações sobre filas. Iteradores e sua utilização. Algoritmos recursivos. Árvores e suas propriedades. Conjuntos, mapas e tabelas de dispersão. Ordenação. Filas com prioridade. Árvores AVL. Descrição detalhada dos conteúdos programáticos Componente Teórica Eficiência de Algoritmos. A notação O-grande. Comparação de eficiências de algoritmos e alguns exemplos. Pilhas e operações sobre pilhas. Algum exemplos de aplicação. Implementação de pilhas sobre diferentes estruturas. Especificação formal da pilha: géneros, assinaturas e domínios das operações. Axiomas. Refinamento: a especificação para uma classe Java. Especificação formal de uma fila. Ligação a uma classe Java. Iteradores e sua utilização. Algoritmos recursivos, pilha de execução e registos de activação. Busca binária num array. Árvores e suas propriedades. Travessia prefixa, infixa e sufixa. Árvores binárias: Especificação, Refinamento, Implementação utilizando nós ligados entre si. Árvores de pesquisa. Conjuntos, mapas e tabelas de dispersão. Valor de dispersão e cálculo do índice na tabela. Colisões e sua resolução: método de endereçamento aberto. Operações de inserção, pesquisa e remoção. Ordenação. Algoritmos quadráticos: ordenação por selecção (SelectionSort) e por inserção (InsertionSort). Análise do número de comparações e de trocas, no melhor e no pior caso. Filas com prioridade. Amontoados. Algoritmos de inserção e remoção. Heap sort. Quick sort. Árvores AVL. Necessidade de manter as árvores equilibradas. Rotações. Árvores AVL: factor de equilíbrio, rotação, algoritmos de pesquisa e inserção. Componente Teórica-Prática Eficiência de Algorimos. Algumas revisões de Java. Listas simplesmente ligadas. Implementção de alguma operações simples. Pilhas e operações sobre pilhas.Implementação de pilhas sobre diferentes estruturas. Exemplos e exercícios. Especificação de Pilhas. Refinamento: a especificação para uma classe Java. Especificação de Filas. Ligação a uma classe Java. Implementação da fila com um vector circular. Iteradores e sua utilização. Interface iterator e interface iterable. Implementação de um iterador para Filas. Herança. O funcionamento do mecanismo de herança em Java. Recursão. Busca binária num array. Alguma operações sobre listas. Torres de Hanói. Árvores. O interface Comparable. Algoritmo de busca. Implementação dos métodos de inserção e remoção. Conjuntos, mapas e tabelas de dispersão. Implementação de uma tabela de dispersão com endereçamento aberto. Ordenação de Comparable: métodos genéricos. MergeSort. Filas com prioridade e Ordenação. Implementação com um ArrayList. Árvores AVL: factor de equilíbrio, rotação, algoritmos de pesquisa e inserção. Bibliografia Recomendada Data Structures: Abstraction and Design Using Jav a; Elliot B. Koffman and Paul A. T. Wolfgang ; Wiley; 2 edition (January 26, 2010) Outros elementos de estudo Specifying and Monitoring Java Classes. V. Vasconcelos, A. Lopes e I. Nunes. Documento interno. Métodos de Avaliação A avaliação terá um equilíbrio entra uma componente prática, constituída por um conjunto de trabalhos a realizar ao longo do semestre e uma componente teórica a avaliar em exame. Propõe-se: Trabalhos práticos (30%) + Exame teórico (70%) Língua de ensino Português ou Inglês