我打算编写一个程序,在最小区域内重新排列句子的字母。我要写这个应用程序的工具并不重要。问题是我几乎不知道如何做到这一点。
我想要这样的事情:
是否有任何算法可以在最小区域内对某些曲面进行排序(让我们假设每个字母都是多边形曲面)?
答案 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
}