Segundo Projeto - Haskell

1 Projeto de Haskel - versao 1

Data de entrega: 29/5 (3a feira) ate as 8:00 via email.

Individual ou em pares.

Uma técnica de clusterização (ou agrupamento) de dados num espaço cartesiano é montar a arvore geradora mínima dos dados. A arvore indica a forma de menor custo de ligar todos os pontos. Se quisermos quebrar o conjunto de dados em k grupos, basta remover as k-1 maiores arestas do arvore geradora mínima, e considerar que cada uma das k sub-arvores (agora não mais conectadas) é um grupo.

Escreva um programa em Haskel que recebe os dados no seguinte formato

k
a x1 x2 x3
b y1 y2 y3
e z1 z2 z3
...

onde k é o numero de grupos a serem construídos a (b etc.) são os "nomes" dos pontos, e x1 x2 x3 nesse caso são as coordenadas num espaço de 3 dimensões do ponto a, y1 y2 y3 são as coordenadas do ponto b e assim por diante.

O programa devera imprimir o nome dos pontos em cada grupo - um grupo por linha, ordenados alfabeticamente. Por exemplo se tivermos que dividir os dados em 3 grupos então a saída

a b e f r 
i j p q m n 
c g h 

indica os 3 grupos (a ordem que os grupos são impressos não é importante). A saída pode ser também no formato

["a", "b", "e", "f", "r"] 
["i", "j", "p", "q", "m", "n"] 
["c", "g", "h"] 

Não se preocupe com otimização de estruturas de dados no algoritmo de construção da arvore geradora mínima. Se seu programa for cúbico (no número de pontos) não tem problema. O algoritmo de achar os componentes conexos na arvore depois de remover as k-1 arestas maiores também não precisa ser otimizado.

O seu programa rodará como:

runhaskell projeto2.hs < dados.txt 

ou seja os dados devem ser lidos do standard input.

Author: Jacques Wainer

Created: 2018-05-16 Wed 11:55

Validate