Segundo Exercício-Programa

MAC122 - Princípios de Desenvolvimento de Algoritmos

BCC - 2o. Semestre de 1998

Este segundo exercício-programa é um exercício simples de manipulação de listas. Se você entendeu bem o algoritmo de ordenação topológica (por exemplo, implementado em [ex11.dvi | ex11.ps | ex11.pdf | ex11.w | ex11_modif.c], você não deve ter dificuldades.

Número de rodadas em um escalonamento paralelo

Suponha que você tem n tarefas para executar e tem a sua disposição, para isto, muitas máquinas (digamos, n máquinas; cada máquina pode executar uma destas tarefas por vez). As tarefas, entretanto, devem ser executadas respeitando-se uma certa ordem de prioridade, como discutido quando vimos ordenação topológica (a tarefa j depende da tarefa i e portanto podemos executá-la apenas após ter executado i, etc). Suponha que as tarefas são executadas sincronamente, e que cada tarefa demora exatamente uma unidade de tempo. Desta forma, as tarefas são executadas em rodadas. O objetivo deste EP é escrever um programa que
  1. decide qual é o número mínimo necessário de rodadas, digamos r, para se executar um dado conjunto de tarefas,
  2. decide quais devem ser as tarefas a serem executadas em cada uma das r rodadas,
  3. descreve uma seqüência de r tarefas que devem ser executadas seqüencialmente e que desta forma provam que não é possível executar as tarefas dadas em menos do que r rodadas.
Voce deve assumir que a entrada tem o mesmo formato que a entrada dos programas de ordenação topológica que vimos em aula.

Alguns exemplos de entrada e saída

  1. O exemplo da sala de aula: dados1.txt, saida1.txt.
  2. dados2.txt, saida2.txt
  3. dados3.txt, saida3.txt
  4. dados4.txt, saida4.txt
  5. dados5.txt (14k), saida5.txt
  6. dados6.txt, saida6.txt
  7. dados7.txt (956k), saida7.txt (25k)
  8. dados8.txt, saida8.txt
  9. dados9.txt, saida9.txt
  10. dados10.txt (1462k), saida10.txt (379k)
Os dados de entrada de (2) a (7) foram gerados ao acaso. Os dados dos exemplos (8), (9) e (10) representam circuitos booleanos com portas binárias AND, OR, XOR que multiplicam números em base 2. O exemplo (8) corresponde a um circuito para multiplicar 2 números com no máximo 2 bits cada. Os exemplos (9) e (10) correspondem a circuitos que multiplicam 2 números com no máximo 5 e 100 bits cada, respectivamente.

É bastante interessante que para multiplicar 2 números com 100 bits cada (exemplo (10)), é possível projetarmos um circuito cujo número de portas é da ordem de 65.000 e o número de rodadas (ou "ciclos de relógio") é de apenas 43! O algoritmo natural de multiplicação usa pelo menos 100 rodadas.

Prazo de entrega: segunda-feira, 28 de setembro de 1998, até as 18:00. Note que você não tem muito tempo! Entregue seu EP na secretaria do MAC, sala 256, bloco A, antes do término do expediente naquele dia!

Prazo estendido. O prazo de entrega se encerrará dia 5/10/98!


Observações
Página principal de MAC122 (BCC - 2o. semestre de 1998).
Netscape-HTML Checked!
Y. Kohayakawa <yoshi@ime.usp.br>

Last modified: Thu Sep 24 12:02:18 EST 1998