Я работаю над игрой в Гомоку, и мне нужна эффективная структура данных для хранения состояния плат, Я думал о ее хранении в 2D-массиве, но я уверен, что есть больше эффективный способ. СпасибоПредставление Совета Гомоку
ответ
Что касается эффективности времени, так как я полагаю, что вы в основном будете выполнять поиск по индексу, массив будет в значительной степени лучшим выбором - он поддерживает этот поиск в постоянное время с низким постоянным коэффициентом.
С точки зрения экономии пространства:
Каждый квадрат может быть либо пустым, либо заполняется либо игрока. Таким образом, существует максимум 3 возможности. Для максимальной эффективности пространства мы могли бы хранить всю нашу плату в представлении base-3, но, поскольку компьютер работает в двоичном формате, нам нужно обработать всю доску, чтобы определить значение некоторого заданного квадрата (таким образом, простой поиск индекса будет время пропорционально размеру доски - если время действительно не проблема, вы могли бы подумать об этом). Вместо этого я бы рекомендовал использовать 2 бита на квадрат, что позволило бы указать одну из четырех возможностей (четвертая не используется).
Многие языки имеют своего рода реализацию битового набора, позволяя вам работать с массивом битов, что было бы идеально для вышеуказанного.
Вам также нужен только один бит-разряд (а не 2D), поскольку в работе с 2D-структурами обычно возникает небольшая часть служебных данных памяти. Преобразование из 2D в 1D является простым - мы могли бы преобразовать 2D-индекс в 1D либо с x*height + y
, либо с y*width + x
.
Хотя я бы порекомендовал сначала убедиться, что вам нужно выполнить эту оптимизацию - я считаю, что платы Gomoku, как правило, небольшие, поэтому даже объемное представление будет работать отлично (хотя некоторые методы AI составляют много копий платы, если вы это сделаете, минимальное представление будет иметь смысл).
- 1. Как начать с Гомоку?
- 2. Редактор альтернативного совета
- 3. Выбор совета разработки IoT
- 4. Вопросы совета Skobbler
- 5. Spring AOP: Выбор совета seletively
- 6. PHP MySQL Создание дискуссионного совета
- 7. Создание монопольного совета с GridBagLayout
- 8. h-index расчет для совета
- 9. Удалить из совета базы данных
- 10. поисковая система предприятия, требующая совета
- 11. Elasticsearch, срок рекомендательного совета возвращается
- 12. Расширенного совета архитектуры поиска neeeded
- 13. Установите переменную из совета АОП
- 14. Архитектура нашего решения и совета
- 15. Проверка подлинности Совета по проверке
- 16. Эффективный SQL-запрос/схема для совета лидеров
- 17. Искание совета по использованию QGLWidget в Qt4
- 18. Канбан совета потока и столбцов Отношения
- 19. Получить значение args от @ до совета
- 20. Ocaml совета реализации для алгоритма на множествах
- 21. попросите совета для разработки небольшой игры
- 22. Добавление совета к адаптеру входящего канала почты
- 23. ошибка при попытке инжекции совета poller
- 24. совета по Arduino IDE не работает
- 25. Задание совета в дальнейшей разработке Java-игр
- 26. Обновление существующего совета веб-приложений для asp.net
- 27. Переопределить интерактивную функцию с помощью совета
- 28. Spring AOP - Вызов совета из блока catch
- 29. Создание совета Презентация для шахматной игры
- 30. Новое программирование на VB и необходимость совета
Почему вы считаете, что существует более эффективная структура данных? Какие операции вам нужны для поддержки, которые неэффективны в 2D-массиве? Я не очень хорошо знаком с Gomoku, но похоже, что вы будете главным образом делать индексные запросы, для которых структура данных по выбору будет массивом. – Dukeling
Я ищу лучше с точки зрения эффективности памяти – YonBruchim