Algorithm 将一个句子的字母排列在最小的区域?

Algorithm 将一个句子的字母排列在最小的区域?,algorithm,Algorithm,我要写一个程序,在最小区域内重新排列一个句子的字母。我将要编写这个应用程序的工具并不重要。问题是我几乎不知道如何才能做到这一点 我想要这样的东西: 有没有算法可以将一些曲面(假设每个字母都是多边形曲面)按最小面积排序?这一点都不容易。。。它与被证明是NP-难的“装箱问题”有关。 此外,您的问题涉及到非矩形对象,所以它有点难,但不是大小 你应该选择一种优化算法,比如遗传算法之类的 谷歌搜索“Bin Packing 2D”将产生许多有用的链接和文章。在中,你可以找到Wordle的见解,这是一个制作

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

我想要这样的东西:


有没有算法可以将一些曲面(假设每个字母都是多边形曲面)按最小面积排序?

这一点都不容易。。。它与被证明是NP-难的“装箱问题”有关。
此外,您的问题涉及到非矩形对象,所以它有点难,但不是大小

你应该选择一种优化算法,比如遗传算法之类的


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

在中,你可以找到Wordle的见解,这是一个制作漂亮标签云的工具。它对装箱问题进行随机贪婪算法近似。

我对这种算法的方法是遗传算法。这是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
}
公共类个人{
字符字母;
双x;
双y;
双旋转;
}
公共阶层人口{
个人[]个人;
公众人口{
个体=新个体[s.长度()];
对于(int i=0;i
多边形填充的问题是众所周知的,绝非易事。是否可以进行任意旋转,或者只是180度的倍数?讲述完故事后,你需要说
,所以我认为问题是
。我说不出话来!@Barmar“这个问题涉及到……一个软件算法”。不是吗?这是一般问题的一个变体。即使问题的许多简单场景(具有漂亮的矩形)也被证明是,也就是说计算速度非常慢/昂贵,尽管通常有“启发式”方法,通常可以用更少的计算实现“相当好”的打包。