Departamento de Ciência da Computação - IME - USP

Sobre MAC0122 - Princípios de Desenvolvimento de Algoritmos

MAC0122 dará continuidade ao treinamento iniciado em MAC0110/MAC0115/MAC2166. Será desenvolvido ainda mais o raciocínio aplicado na formulação e resolução de problemas computacionais. Frequentemente é possível identificar nesse raciocínio ou pensamento alguns dos seguintes princípios::

Computational Thinking

Fonte: How to Teach Students Computational Thinking Skills

Em MAC0110 foi praticada a decomposição e o reconhecimento de padrões dos problemas e exercitado apenas um pouco de representação dos dados e menos ainda de algoritmos. Do ponto de vista de programação a decomposição são os trechos de códigos para resolver subproblemas, o reconhecimento de padrões é materializado através de repetições e funções, um pouco de representação de dados foi praticado com listas e dicionários.

MAC0122 pressupõe uma certa habilidade em decomposição e reconhecimento de padrões e tem o papel de completar o treinamento do raciocínio. Praticaremos de maneira mais acentuada a representação de dados e os algoritmos.

O objetivo principal de MAC0122 é fornecer experiência e ferramentas básicas que capacitem as alunas e os alunos a desenvolverem soluções efetivas para problemas computacionais. Essa capacitação se dará progressivamente através da abordagem de resolução de problemas. Trabalharemos conceitos essenciais através de aplicações clássicas da matemática, ciências e engenharia em situações cotidianas. Esperamos fornecer oportunidades para que todas e todos escrevam programas para resolver problemas envolventes. Essa abordagem enfatiza a ideia essencial de que matemática, ciências, engenharia e computação estão interligadas no mundo moderno com vários outros campos.

Em MAC0122 estudaremos, através de exemplos, a correção, a análise de eficiência e projeto de algoritmos muito bacanas e que são amplamente utilizados por profissionais de várias áreas.

Veremos alguns tipos abstratos de dados básicos ou classes e algumas estruturas de dados elementares para armazenar estes dados juntamente com os algoritmos para manipular estas estruturas. Existem várias estruturas de dados para um mesmo tipo abstrato de dados e em geral não existe uma estrutura de dados que é a apropriada para todas as circunstâncias.

Os algoritmos e estruturas de dados que veremos em MAC0122 nasceram de aplicações cotidianas. Novas aplicações irão requerer a criação de novos algoritmos e estruturas de dados. É pretensão de MAC0122 fornecer ideias, elementos e técnicas que possam auxiliá-las a escrever bons programas.

Nota: MAC0122 não trata dos tão importantes aspectos sociais, éticos e ambientais das tecnologias que computação ajuda a criar. Há outras disciplinas do DCC-IME-USP que tratam exclusivamente desses aspectos.

Representação de dados e algoritmos

Programas de computador armazenam, acessam e manipulam dados. Programas são uma formulação concreta de algoritmos baseados em uma representação particular dos dados. Muito do que é feito em várias áreas da ciência da computação, tais como compiladores, computação gráfica, sistemas operacionais, ciência de dados, . . ., é buscar maneiras de representar os dados para que o armazenamento, acesso e manipulação destes seja feito de maneira eficiente, consumindo pouco tempo ou espaço ou energia elétrica ou … Sempre que representamos dados no computador consideramos cada um dos seguintes aspectos:

  1. a maneira que os dados são representados (= classes);
  2. o conjunto de operações definidas sobre estes dados (= métodos);
  3. a forma de armazenar os dados (= estrutura de dados);
  4. os algoritmos usados para manipular os dados.
  5. Apesar dos termos tipo de dados, tipo abstrato de dados e estrutura de dados parecerem semelhantes, eles têm significados diferentes. O tipo de dado de uma variável indica o conjunto de valores que ela pode representar. Por exemplo, uma variável do tipo bool pode representar os valores True ou False.

Os itens 1 e 2 acima dizem respeito ao tipo abstrato de dados (TAD), ao modelo junto com uma coleção de operações definidas sobre os dados. Um exemplo de tipo abstrato de dados é o conjunto dos números racionais com as operações de soma, subtração, multiplicação e divisão. No contexto de orientação a objetos os tipos abstratos de dados são chamados de classes e as operações sobre os dados ou objetos são chamadas de métodos.

Já os itens 3 e 4 estão relacionados a aspectos de implementação. Para representar um tipo abstrato de dados em um computador usamos uma estrutura de dados, que é uma coleção de variáveis, possivelmente de diferentes tipos, relacionadas de diversas maneiras. Em programação orientada a objetos essa coleção de variáveis recebe o nome de atributos de estado.

Pontos turísticos

MAC0122 estuda algoritmos para alguns problemas computacionais básicos. Isso serve de motivação para introduzir vários conceitos e idéias importantes. Alguns dos principais pontos turísticos na nossa exercusão por MAC0122 são:

A bibliografia básica desta disciplina são os roteiros das visitas e o livro Resolução de Problemas com Algoritmos e Estruturas de Dados usando Python. Também é utilizado o livro Introduction to Programming in Python.

Experiência esperada

Para esta disciplina o pré-requisito é o conhecimento de técnicas básicas de raciocínio e programação que são tipicamente treinadas em disciplinas de Introdução à Computação como MAC0110, MAC0115 ou MAC2166. Alguns dos pré-requisitos estão no livro Como Pensar como um Cientista da Computação - Aprendendo com Python: Edição interativa e nas notas de aula de Introdução à Computação

Matrícula

Verifique seu status no sistema Júpiter depois do período de retificação de matrículas. Seu status deve ser “MATRICULADO”. Se for “PENDENTE” ou “INSCRITO”, procure imediatamente o Serviço de Alunos de Graduação.

Programmers Life

Programmers Life

Fonte: https://www.hongkiat.com/blog/programming-jokes/