Объединение дубликатов в дереве - PullRequest
0 голосов
/ 30 июня 2019

Мой вопрос тесно связан с: удалением дублирующих шахматных игр и последующим сохранением уникальных игр в Postgresql

Я хочу хранить большой набор шахматных PGN, избегающих дубликатов, таких как Кемпчи.

Цитата Kempchee "У меня очень много шахматных игр (около 5 миллионов), хранящихся в нескольких файлах pgn (переносная запись игры). Если вы не знакомы с PGN, результатом будет CSVфайл при разборе; содержит несколько полей, содержащих информацию об игроках, местоположении и т. д., а затем одно текстовое поле большего размера с ходами, разделенными каким-либо разделителем, возможно пробел. В каждой игре будет один ряд с такими данными. "

Хотя для меня, в частности, я использую следующую структуру дерева в качестве структуры данных:

My Tree

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

Я могу сравнивать игры, используя FEN, который лучше всего описан здесь: https://www.chessprogramming.org/Forsyth-Edwards_Notation

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

Итак, с помощью способа сравнения игр и большого набора данных, как объединить дубликаты в моем дереве, не просматривая все возможные узлы при каждой вставке?

Дополнительные сведения:

Я программирую на Java

https://lichess.org/analysis#explorer: я хотел бы подражать тому, что делает Lichess в правом нижнем углу, где указано, сколько игроков сыграло на Х ход с победойсоотношение потерь / ничьей.Мне не удалось найти руководства, основанные исключительно на собственном коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...