在最小区域安排一个句子的字母?

时间:2013-06-30 11:06:19

标签: algorithm

我打算编写一个程序,在最小区域内重新排列句子的字母。我要写这个应用程序的工具并不重要。问题是我几乎不知道如何做到这一点。

我想要这样的事情:

enter image description here

是否有任何算法可以在最小区域内对某些曲面进行排序(让我们假设每个字母都是多边形曲面)?

3 个答案:

答案 0 :(得分:7)

this paper中,你可以找到Wordle的见解,Wordle是一个做漂亮标签云的工具。它做了一个随机化的贪婪算法逼近bin打包问题。

答案 1 :(得分:5)

它根本不容易......它与经过验证的NP-HARD的“装箱问题”有关 此外,您的问题涉及非矩形对象,因此它有点难,但幅度不大。

你应该采用像遗传算法这样的优化算法方法......

谷歌的“Bin Packing 2D”将产生相当多的有用链接和文章。

答案 2 :(得分:2)

我对这种算法的方法是遗传算法。这将是Java中的一个示例数据结构示例。

public class Individual{
 char letter;
 double x;
 double y;
 double rotation;
}

public class Population{
 private Individual[] individuals;

 public Population(String s) {
  individuals = new Individual[s.length()];  
  for(int i = 0; i < s.length(); i++ {
   Individual individual = new Individual();
   individual.letter = s.charAt(i);
   // set random x, y, and rotation;
   individuals[i] = individual; 
  } 
 }
 // Calculate Fitness: (1/Totalspace needed ) - Overlapping Space
 // Envolve Population
}