Упорядочить буквы предложения в минимальной области?

Я собираюсь написать программу, которая перестраивает буквы предложения в минимальной области. Инструмент, который я собираюсь написать это приложение, не имеет значения. Проблема в том, что я почти не знаю, как это сделать.

Мне нужно что-то вроде этого:

enter image description here

Существует ли какой-либо алгоритм для сортировки некоторых поверхностей (пусть каждая буква является поверхностью многоугольника) в минимальной области?

Ответ 1

В в этой статье вы можете найти информацию о Wordle, инструменте для создания красивых облаков тегов. Он выполняет рандомизированное алчное алгоритмическое приближение проблемы упаковки корзины.

Ответ 2

Это совсем не просто... это связано с "проблемой упаковки бутылок", которая доказана NP-HARD.
Кроме того, ваша проблема связана с непрямоугольными объектами, поэтому она немного сложнее, но не по величине.

вам следует использовать подход алгоритма оптимизации, например, генетические алгоритмы или такие...

Google для "Bin Packing 2D" приведет к созданию нескольких полезных ссылок и статей.

Ответ 3

Мой подход для такого алгоритма был бы генетическим. Это будет образец выборки данных в 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
}