Алгоритм сортировки оттенков в кратчайшие промежутки времени, например `350,354,2,10,15`?[0-360 градусов] - PullRequest
3 голосов
/ 02 апреля 2011

В цветовых схемах я хотел бы отсортировать оттенки, но хотел бы избежать «больших пропусков», то есть предпочесть 350,354,2,10,15, чем 2,10,15,350,354 (когда выражено в виде значений 0-360 градусов). Каков наилучший подход для этого (например, в php)? Это найти «самый большой разрыв» и начать после этого? Есть идеи получше?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2011

Просто найдите самый большой промежуток и поместите его в начало.

  1. Сортируйте массив
  2. Найдите самый большой промежуток (проход по массиву, найдите самое большое расстояние между двумя соседями)
  3. Переместить пробел в начало (Еще один цикл для сдвига всех чисел)
0 голосов
/ 02 апреля 2011

Если у вас их не так много:

  1. , просто сортируйте по порядку
  2. найдите дисперсию (по модулю 360) (т. Е. Как далеко они находятся от "по модулю")360 означает ')
  3. Переместите первый в конец, еще раз проверьте дисперсию.
  4. После того, как вы попробовали все из них, выберите тот, который имеет наименьшее значение.

Этот алгоритм имеет размер O (N ^ 2) в размере списка.

Основной вывод заключается в том, что у вас есть только N 'вращений' здесь.Определите статистику «gappiness», примените грубую силу для всех N оборотов и используйте механизм, который минимизирует «gappiness».

...