Я пишу инструмент для работы с мозаичными изображениями. Одной из функций является преобразование всего изображения в набор плиток и карту листов, например, изображение размером 160x144px будет иметь набор уникальных плиток размером 8x8 и карту идентификаторов листов размером 20x18.
Следующая цель - поддержка палитр. На некоторых старых платформах, в которых использовалась мозаичная графика, у вас может быть 8 палитр по 4 цвета в каждой или 16 из 16 в каждой. Я хочу автоматически создать набор палитр, который вписывается в пределы N-K, используя как можно меньше палитр;и назначьте эти палитры карте тайлов или предупредите, если это невозможно.
Есть несколько очевидных первых шагов: если какая-то отдельная плитка использует более K цветов, это будет невозможно;и как только это будет проверено, любой тайл, цвета которого являются подмножеством другого, может тривиально поделиться своей палитрой. Трудность заключается в обработке частично перекрывающихся палитр. Рассмотрим 17 плиток, каждая с 15 уникальными цветами;если перекрытия достаточно, они могут уместиться в цветовые палитры 16x16, но это может оказаться невозможным.
Я ожидаю, что здесь будет работать решение для динамического программирования. На любом этапе проблемы каждый имеет частичное назначение плиток;и решение состоит в том, какой из N палитр назначить следующий фрагмент. (Плитка может даже не иметь общих цветов с оптимальным выбором палитры в то время; рассмотрим 4 плитки по 4 уникальных цвета, все они могут использовать одну 16-цветовую палитру.)
Имеет этоконкретная проблема уже решена? Есть ли для него известный алгоритм или общие советы по динамическому программированию?