Лучший способ хранить большое префиксное дерево - PullRequest
7 голосов
/ 20 мая 2011

Я собираюсь написать программу, которая будет представлять AI для игры в настольную игру против игрока. Я хочу сохранить каждую сыгранную игру в дереве префиксов an для поиска похожих игр. Но я боюсь, что дерево может стать слишком большим, чтобы быть в памяти. Так что это лучший способ хранить его. И чтобы иметь возможность быстро его искать. Я не думаю, что запись в файл является хорошим решением. Может быть в каком-то короле БД?

1 Ответ

4 голосов
/ 20 мая 2011

То, что вы ищете, это встроенная БД, и большинство из них написаны на C ++, но есть некоторые, которые имеют оболочки C #.Я бы порекомендовал Berkeley DB для .NET (который является оберткой для Oracle Berkeley DB ).

Я бы порекомендовал вам создать уникальный хеш длякаждое префиксное дерево, в котором генерируются хеши, будет иметь местность, которая должным образом представляет аналогичные префиксные деревья: другими словами, хеши для двух одинаковых префиксных деревьев должны быть очень близки друг к другу.Игра, на которую вы ссылаетесь, называется Tic-Tac-Toe, поэтому хеширование подобных игр Tic-Tac-Toe должно быть легким, вот несколько ссылок (я их не читал, я просто быстро нашел«хэширование крестики-нолики» и таковы были результаты):

Хеш затем сохраняется в БД Berkeley, а дерево префиксов сохраняется в файле aux, или, если вы хотите, вы также можете сохранить его вЗначение.Поскольку Berkeley DB хранит пары ключ-значение, вы можете установить хэш в качестве ключа и значение на что угодно (т. Е. Ваше дерево префиксов или путь к вспомогательному файлу, содержащему ваше дерево префиксов).Затем все, что вам нужно сделать, - это найти похожие хеши и извлечь соответствующие деревья из файла (ов) aux.

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

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