10

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

我想要这样的东西:

在此处输入图像描述

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

4

3 回答 3

7

本文中,您可以找到 Wordle 的见解,这是一个制作漂亮标签云的工具。它对装箱问题进行了随机贪心算法逼近。

于 2013-06-30T11:41:47.137 回答
5

这一点都不容易……它与被证明是 NP-HARD 的“装箱问题”有关。
此外,您的问题涉及非矩形物体,所以它有点难,但不是数量级。

您应该采用优化算法方法,例如遗传算法或此类...

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

于 2013-06-30T11:38:50.703 回答
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
}
于 2013-06-30T13:22:57.583 回答