Particionar um retângulo em quadrados próximos de áreas determinadas

Eu tenho um conjunto deN números positivos e um retângulo de dimensõesX eY que eu preciso particionarN retângulos menores que:

a área de superfície de cada retângulo menor é proporcional ao número correspondente no conjunto especificadotodo o espaço do grande retângulo é ocupado e não há espaço restante entre retângulos menorescada pequeno retângulo deve ter a forma mais próxima do quadrado possívelo tempo de execução deve ser razoavelmente pequeno

Eu preciso de instruções sobre isso. Você conhece esse algoritmo descrito na web? Você tem alguma idéia (o pseudo-código está bom)?

Obrigado.