Как я могу оценить сложность Головоломки с графической раскраской?

Я разрабатываю небольшой html холст и JavaScript на основе игры, чтобы тренировать себя, и я выбираю, чтобы создать карту раскраски игры-головоломки.

Я изначально планировал установить сложность головоломки, используя время, которое данный алгоритм займет для решения головоломки, но я, наконец, решил реализовать алгоритм решения грубой силы. Другие алгоритмы были слишком сложными для меня, так как я не нашел четких ресурсов, где алгоритм оптимальной 3-или 4-colourability был хорошо объяснимый.

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

Итак, как бы вы определили относительную сложность головоломки раскраски карты ?

3 ответов


ваша карта является неориентированным графом. Вершины-это поверхности, которые должны быть заполнены цветами, а ребра-соединяющими соседями.
Сложность одной головоломки низкая, когда у вас мало соседей на каждой поверхности. Сложная загадка, где каждая вершина имеет много граней.
Таким образом, способ ранжирования головоломок будет просто:

difficulty = total_number_edges - total_number_vertices

наивный один. Теперь вы можете улучшить эту формулу, добавив другие переменные, такие как максимальное число ребер в вершина или общее количество вершин (так как головоломка с большим количеством поверхностей для заполнения сложнее и занимает больше времени)

difficulty = (total_number_edges - total_number_vertices)  
                        * (total_number_vertices / max_edges_in_vertex)

вы должны быть изобретателем главной формулы:)


задача раскраски карты/графика "NP-complete". Это означает, что научное сообщество почти уверено, что любой данный алгоритм для задачи будет тратить экспоненциальное (огромное) количество времени на определенные экземпляры проблемы (т. е. головоломки). Вот почему любой алгоритм, который вы реализуете (ВКЛ. ваш механизм "грубой силы") будет подавляться некоторыми экземплярами головоломки.

Я бы рекомендовал вам реализовать несколько различных алгоритмов для решения ваших головоломок, например,

  • алгоритм 1-один за другим, выберите случайную область и дайте ей цвет, который все еще "подходит", т. е. не является цветом любого цветного соседа. Если вы столкнулись с конфликтом (не можете раскрасить выбранную область), остановите алгоритм. Запустите этот цикл, скажем, N раз и вычислите количество раз, когда цикл фактически окрашивает всю карту; пусть это будет K. здесь вы получите оценку K / N (процент), 0% = трудная проблема (возможно, невозможная), 100% = очень очень легко проблема

  • Algorithm 2-Добавьте количество обратных шагов к алгоритму 1, например, позвольте для максимальных 1,000 шагов обратных шагов. Выполните тот же цикл" выборки". Вы получаете еще один балл 0%-100%.

затем используйте полученные баллы (вы получите более высокие баллы от Alg. 2 чем от Alg. 1, потому что он более мощный), чтобы получить относительную сложность для головоломок.

ключ ко всему этому заключается в том, что если вы получите оценку (0%, 0%), то есть вы не знаю, если головоломки разрешимы, вы отбрасываете его, потому что вы не хотите представлять свои проблемы аудитории, которые могут быть неразрешимыми:)

наконец, использовать свои собственные суждения на "карте" баллы для 'читабельно' сложность описания --- выберите несколько головоломок, решить их вручную, проверьте результат ваша программа вычисляет, затем увидеть, как процентные показатели карту на ваше восприятие.


Я нашел абзац, который дал мне идею о том, как вы могли бы оценить сложность.

один класс алгоритмов аппроксимации на основе" жадного " метода-вершины обрабатываются по порядку, при этом каждой вершине присваивается наименьшая пронумерованный класс цвета, который не помещает его в конфликт со своими ранее цветными соседями. Потому что вершины, смежные с текущей вершиной, могут использовать все четыре цвета, пятый, или даже шестой, седьмой и т. д. цвет может быть необходимым. Когда жадный метод должен создать новый цвет класс вершинного считается impasee.

Так количество необходимых цветовых классов может быть трудность вашей головоломки. Вы можете обрабатывать вершины, например, от самой высокой степени до самой низкой степени (схема заказа Большой)

Я нашел цитированный абзац в газете Быстрый Вероятностный Алгоритм Для Четырехцветной Большой Плоской Графики by Раймонд А. Архулета и Генри Д. Шапиро