Vous êtes sur la page 1sur 5
Universidade Federal de Ouro Preto – UFOP Departamento de Computação e Sistemas CSI203 - Organização

Universidade Federal de Ouro Preto – UFOP Departamento de Computação e Sistemas CSI203 - Organização e Arquitetura de Computadores I Prof. Samira Santos da Silva

Primeiro Trabalho Prático – Implementação em Linguagem MIPS

Valor: 20 pontos Data de Entrega: até 12/12/2017. O trabalho prático deverá ser feito em grupos de 3 pessoas.

1. Descrição O objetivo deste trabalho é exercitar os conhecimentos adquiridos em sala sobre a linguagem de programação Assembly MIPS. Para isso, deverá ser implementado o Algoritmo de Kruskal, um algoritmo para encontrar a árvore geradora mínima (minimal spanning tree – MST), ou seja, a árvore de menor custo, em um grafo não direcionado com custos nas arestas.

custo, em um grafo não direcionado com custos nas arestas. Figura 1: Um grafo simples com

Figura 1: Um grafo simples com custos nas arestas

arestas. Figura 1: Um grafo simples com custos nas arestas Figura 2: Árvore Geradora Mínima (de

Figura 2: Árvore Geradora Mínima (de custo mínimo)

Seu programa deve ler primeiramente o valor de N, o número de nós que o grafo possui. Em seguida, o programa deverá ler uma matriz NxN, a chamada matriz de adjacência de custos. Cada valor na posição (i,j) da matriz corresponde ao custo da aresta que liga i a j. Caso esta aresta não exista no grafo, o valor desse custo deve ser igual a 0. Em seguida, o algoritmo de Kruskal deve ser executado sob essa matriz e as arestas que forem adicionadas na árvore geradora juntamente a seus custos devem ser impressos na tela.

O exemplo de execução a seguir ilustra o que deve ser feito:

de execução a seguir ilustra o que deve ser feito: O algoritmo de Kruskal funciona da

O algoritmo de Kruskal funciona da seguinte forma. Dado o grafo da Figura 1, arestas vão sendo adicionadas à árvore geradora mínima começando da aresta com menor custo (uma aresta somente é adicionada se não forma um ciclo no grafo). Esse processo se repete com as arestas ainda não adicionadas até que o grafo esteja conexo (ou seja, exista pelo menos um caminho entre quaisquer pares de nós).

não adicionadas até que o grafo esteja conexo (ou seja, exista pelo menos um caminho entre
O pseudocódigo abaixo ilustra o funcionamento do Algoritmo de Kruskal . Todos os arquivos necessários

O pseudocódigo abaixo ilustra o funcionamento do Algoritmo de Kruskal.

abaixo ilustra o funcionamento do Algoritmo de Kruskal . Todos os arquivos necessários para execução do

Todos os arquivos necessários para execução do código deverão ser entregues. Além disso, um arquivo readme.txt informando as instruções de execução do seu código deverá ser disponibilizado. Os códigos deverão estar comentados com a descrição da função de cada bloco de instrução.

2. Observações:

A consulta a documentações, manuais e tutoriais na Web é válida, desde que não haja cópia explícita e as fontes sejam devidamente citadas.

Busque utilizar instruções que foram vistas em sala de aula!

Em caso de detecção de cópias, TODOS os envolvidos receberão a nota ZERO.

2.1 Entrega A data de entrega será até o dia 12/12/2017 (23:59). Todo o código-fonte devidamente comentado deverá ser entregue pelo moodle.

Eventualmente, entrevistas poderão ser marcadas com os alunos para que estes expliquem suas implementações.

Atrasos:

para que estes expliquem suas implementações. Atrasos: Onde n é número de dias de atraso. Obs.:

Onde n é número de dias de atraso. Obs.: O primeiro dia de atraso começa a contar a partir das 00:00 horas do dia 13/12/2017.

3. Dicas

Utilize o simulador MARS para executar e testar seu programa. Nele é possível acompanhar passo-a-passo a execução do algoritmo, além de saber o valor de cada um dos registradores.

Execute instrução a instrução, verificando se o resultado está sendo construído corretamente.

Utilize os slides e o Guia Rápido do MIPS (link no site da disciplina) para revisar sobre a linguagem MIPS e para obter os códigos de leitura e impressão de dados.

ANEXO – EXEMPLO de implementação do Algoritmo de Kruskal em C

ANEXO – EXEMPLO de implementação do Algoritmo de Kruskal em C
ANEXO – EXEMPLO de implementação do Algoritmo de Kruskal em C