Ajuda com algoritmo

Olá pessoal. Estou com uma dúvida mais algorítmica do que de Java, não sei se aqui seria o lugar ideal pra postar esse tipo de coisa, mas enfim, caso não seja, alertem-me e moverei o tópico para o local adequado.

O problema é o seguinte, tenho 51 cilindros de raios distintos (1, 2, 3, 4…) todos os inteiros de 1 a 51, e devo posicioná-los a fim de colocá-los em um compartimento (também cilíndrico) de menor raio possível.

Só estou procurando por idéias de algoritmos eficientes para minimizar o raio do compartimento, qualquer sugestão é bem vinda.

Caso conheçam algum fórum especializado em algoritmos (podem ser matemáticos), gostaria que também compartilhassem.
Grato.

se eu entendi bem, vc tem 51 circulos a qual seu raio corresponde a seu numero. ex: circulo 1 raio 1cm, circulo 2 raio 2cm.
vc quer criar o menor circulo de forma a englobar todos os circulos e estes devem estar lado a lado ?

se foi isso mesmo que eu entendi, usa a api JTS.

como fazer?
1- primeiro vc cria um plano cartesiano pra posicionar seus circulos.
2- se vai pegar a centroide do circulo para posicioná-lo
3- começe do maior para o menor
4- o algoritmo deve posicionar cada circulo levando em consideração:
a) menor distancia entre centroides de cada ponto
b) um circulo não deve interceccionar o outro
c) use o sentido horario para posicionar os circulos - fica mais facil o calculo
d) com excessão do primeiro e do segundo circulos, vc deve considerar as duas centroides mais proximas do ponto.
5) quanto terminar de posicionar, crie um buffer a qual o raio deva englobar todos os outros circulos

se quiser fazer na unha isso pode ajudar
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&ved=0CDEQFjAD&url=http%3A%2F%2Fwww.dpi.inpe.br%2Fgilberto%2Flivro%2Fgeocomp%2Fgeometria.pdf&ei=A0K7To7ZH8f7ggeZitW_CA&usg=AFQjCNHW3uGruqePp_O1Wfc7Gft0dH-AWA&sig2=viI1xaYwlcwGU5VhiZ0cpw

e o algoritimo do circulo minimo ta aqui
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=26&ved=0CEEQFjAFOBQ&url=http%3A%2F%2Fw3.impa.br%2F~cicconet%2Fcursos%2Fgc%2Fcircmin.pdf&ei=VUO7TpfaG4_pgQfAzpHfCA&usg=AFQjCNGUiac-01pV1FiV6EyomiIshS-LQg&sig2=-R6SVNswJgXt76ZhZkQnwg

Os problemas abaixo são para cilindros iguais. Seu problema é com cilindros diferentes.
http://mathworld.wolfram.com/CirclePacking.html
http://www.jstor.org/pss/2688509
Provavelmente, para cilindros diferentes, você terá de usar algo semelhante a:
http://www.scielo.br/scielo.php?pid=S0101-74382000000200009&script=sci_arttext
Um desenho semelhante ao problema que você quer resolver pode ser visto aqui:



Conforme você pode ver, o método que lhe passaram (começar pelo maior e ir decrescendo os tamanhos dos círculos) não é tão ótimo assim.
EDIT - Aliás, o algoritmo que você precisa provavelmente é o citado no artigo http://en.wikipedia.org/wiki/Circle_packing_theorem