Как домашнее задание в моем текущем курсе CS, нам дали указание написать программу, которая реализует алгоритм A * для задачи n-puzzle .Чтобы решить эту проблему, вы должны взять начальную конфигурацию платы nxn из StdIn.Подвох в том, что некоторые доски не могут быть решаемы.К счастью для нас, если вы создаете «двойную» доску, переворачивая любые два ненулевых квадрата и пытаясь решить эту проблему, нужно разрешить либо оригинал, либо двойника.Поэтому, чтобы реализовать алгоритм, мы эффективно пытаемся решить две доски одновременно, оригинал и двойник.
Выполнить это в одном потоке было довольно легко, и это фактическое назначение.Глядя на эту проблему, кажется, что это идеальное место для использования параллелизма.Я думал, что из основного потока я попытаюсь создать два параллельных потока, каждый из которых пытается решить свою собственную доску.Можно ли обойтись без слишком большого количества сумасшедшего кода в Java?В связи с этим, на многоядерном чипе это будет работать значительно быстрее, чем не многопоточная версия?Я пытаюсь прочитать документацию по Java для потоков, но это немного сложно для тех, кто никогда не пробовал этого раньше, и в этом отношении, я обнаружил, что учусь гораздо быстрее, написав / просмотрев примеры, чем читая больше документации.
Может кто-нибудь дать мне пример кода, который показывает структуру типов, класс, важные утверждения и т. Д.что было бы необходимо сделать это?До сих пор я думал, что хочу реализовать закрытый класс, который реализует реализуемые реализации, и чтобы основной поток выдавал прерывание, для которого когда-либо поток не заканчивает первым, чтобы выяснить, какой из них разрешим, плюс число ходов и последовательность досок дляполучить там.
РЕДАКТИРОВАТЬ: TL; ДР ЭТО НЕ ЧАСТЬ ВЫСТАВОЧНОГО НАЗНАЧЕНИЯ.Назначение должно было сделать однопоточную реализацию.Для собственного обогащения и ТОЛЬКО для собственного обогащения я хочу попробовать сделать мою реализацию многопоточной.