Мой вопрос тесно связан с: удалением дублирующих шахматных игр и последующим сохранением уникальных игр в Postgresql
Я хочу хранить большой набор шахматных PGN, избегающих дубликатов, таких как Кемпчи.
Цитата Kempchee "У меня очень много шахматных игр (около 5 миллионов), хранящихся в нескольких файлах pgn (переносная запись игры). Если вы не знакомы с PGN, результатом будет CSVфайл при разборе; содержит несколько полей, содержащих информацию об игроках, местоположении и т. д., а затем одно текстовое поле большего размера с ходами, разделенными каким-либо разделителем, возможно пробел. В каждой игре будет один ряд с такими данными. "
Хотя для меня, в частности, я использую следующую структуру дерева в качестве структуры данных:
Проблема в том, что шахматные игрыможно перемещать в одну и ту же игру с помощью другого порядка хода.Я предполагал, что если другая ветвь дерева будет перенесена в ранее существующую игру в другом узле, я бы установил указатель для перехода на этот узел.Причина в том, что мне нужен счетчик того, сколько раз была достигнута определенная игра, и чтобы она сохраняла память только из одного узла.
Я могу сравнивать игры, используя FEN, который лучше всего описан здесь: https://www.chessprogramming.org/Forsyth-Edwards_Notation
Короче говоря, он не похож на pgn, поскольку он просто отображает текущую позицию шахматной игры вместе с некоторыми специальными деталями.Таким образом, даже если все части находятся в одном и том же месте, одна игра может иметь права на рокировку, а другая не может сделать ее другой игрой.
Итак, с помощью способа сравнения игр и большого набора данных, как объединить дубликаты в моем дереве, не просматривая все возможные узлы при каждой вставке?
Дополнительные сведения:
Я программирую на Java
https://lichess.org/analysis#explorer: я хотел бы подражать тому, что делает Lichess в правом нижнем углу, где указано, сколько игроков сыграло на Х ход с победойсоотношение потерь / ничьей.Мне не удалось найти руководства, основанные исключительно на собственном коде.