Informações Gerais
Objectivos
Pretende-se que o estudante reforce competências de programação, fique a conhecer algumas das principais estruturas de dados e algoritmos associados, e ganhe competências básicas na concepção e análise de algoritmos. Os principais objectivos de aprendizagem são:
- Proeficiência na linguagem Java e no paradigma de programação orientada a objectos
- Conhecimento das principais estruturas de dados básicas: arrays, matrizes, listas ligadas e árvores binárias.
- Conhecimento dos principais tipos abstractos de dados e suas implementações: filas, pilhas, conjuntos, dicionários e filas de prioridade.
- Competência básica na análise de complexidade de algoritmos e e compreensão das principais classes de complexidade.
- Enriquecimento do conhecimento sobre algumas técnicas algorítmicas como recursividade, pesquisa com retrocesso e dividir para conquistar.
- Experiência prática de aplicação a problemas concretos.
Programa
Uma visão geral do programa previsto (provisório):
- Conceitos Fundamentais de Java
- Classes, objectos, atributos e métodos
- Tipos primitivos, Strings, wrappers, arrays e tipos enumerados
- Expressões, operadores e instruções de controle de fluxo
- Input/Output e a classe Scanner
- Pacotes e biblioteca padrão do Java
- Princípios de desenvolvimento de software, estilo e documentação
- Programação Orientada a Objectos
- Objectivos, princípio, padrões e mecanismo de herança
- Interfaces e Tipos Abstractos de Dados (TADs)
- Uso de genéricos e de iteradores
- Conceitos de Análise Assintótica
- Noções de análise assintótica
- Classes de complexidades típicas e sua comparação
- Exemplos de análise de algoritmos
- Técnicas de Desenho de Algoritmos
- Programaçao estruturada
- Recursividade
- Pesquisa exaustiva e backtracking
- Dividir para conquistar
- Estruturas de Dados Fundamentais
- Arrays e matrizes
- Listas ligadas simples, circulares e duplamente ligadas
- Árvores binárias, árvores de pesquisa e heaps
- Tipos Abstratos de Dados e suas possíveis Implementações
- Sequências, pilhas, filas e deques
- Contentores associativos: conjuntos e dicionários
- Filas de prioridade