2014-02-21 2 views
0

Я работаю над игрой в Гомоку, и мне нужна эффективная структура данных для хранения состояния плат, Я думал о ее хранении в 2D-массиве, но я уверен, что есть больше эффективный способ. СпасибоПредставление Совета Гомоку

+0

Почему вы считаете, что существует более эффективная структура данных? Какие операции вам нужны для поддержки, которые неэффективны в 2D-массиве? Я не очень хорошо знаком с Gomoku, но похоже, что вы будете главным образом делать индексные запросы, для которых структура данных по выбору будет массивом. – Dukeling

+0

Я ищу лучше с точки зрения эффективности памяти – YonBruchim

ответ

0

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

С точки зрения экономии пространства:

Каждый квадрат может быть либо пустым, либо заполняется либо игрока. Таким образом, существует максимум 3 возможности. Для максимальной эффективности пространства мы могли бы хранить всю нашу плату в представлении base-3, но, поскольку компьютер работает в двоичном формате, нам нужно обработать всю доску, чтобы определить значение некоторого заданного квадрата (таким образом, простой поиск индекса будет время пропорционально размеру доски - если время действительно не проблема, вы могли бы подумать об этом). Вместо этого я бы рекомендовал использовать 2 бита на квадрат, что позволило бы указать одну из четырех возможностей (четвертая не используется).

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

Вам также нужен только один бит-разряд (а не 2D), поскольку в работе с 2D-структурами обычно возникает небольшая часть служебных данных памяти. Преобразование из 2D в 1D является простым - мы могли бы преобразовать 2D-индекс в 1D либо с x*height + y, либо с y*width + x.

Хотя я бы порекомендовал сначала убедиться, что вам нужно выполнить эту оптимизацию - я считаю, что платы Gomoku, как правило, небольшие, поэтому даже объемное представление будет работать отлично (хотя некоторые методы AI составляют много копий платы, если вы это сделаете, минимальное представление будет иметь смысл).