Зубчатый или многомерный массив для судоку

Я хочу сделать судоку с помощью С#. Должен ли я использовать зубчатый или многомерный массив. И почему?

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

Заранее спасибо.

Изменить: мне нужно выполнить некоторые методы решения судоку. Как алгоритм возврата. Я обнаружил, что многомерные массивы имеют лучший синтаксис.

Полагаю, у меня вопрос: что проще всего использовать, реализовать и изменить?


person dylanmensaert    schedule 08.03.2013    source источник
comment
В судоку используется доска размером 9x9 полей. Я не понимаю, почему вы хотите использовать зубчатый массив в этом случае.   -  person Nolonar    schedule 08.03.2013
comment
Вы хотите сохранить как шаблон запуска судоку, так и полное решение? Зубчатый массив может быть полезен, если вы планируете хранить только начальный шаблон, где массив не заполнен цифрами.   -  person j.karlsson    schedule 08.03.2013
comment
Вы уже ответили на свой вопрос. Единственная причина отдавать предпочтение многомерным массивам в .NET — выбор стиля. В противном случае зубчатые массивы - это путь. См. это замечательное обсуждение здесь: в чем разница между многомерным массивом и массивом массивов в c"> stackoverflow.com/questions/597720/   -  person Mike Dinescu    schedule 08.03.2013
comment
Или ни то, ни другое? Двумерный массив обеспечивает легкий доступ к каждой ячейке, но не дает удобного способа работы со всей строкой, столбцом или областью 3x3 (без повторения каждой из 9 ячеек и копирования в новую структуру).   -  person mbeckish    schedule 08.03.2013
comment
Если вы согласны с тем, что проще набирать на один символ меньше, то используйте многомерный массив и перестаньте думать.   -  person Alvin Wong    schedule 08.03.2013
comment
Производительность не проблема. Дешевый процессор, вероятно, решит баджилион судоку в секунду.   -  person Mark Segal    schedule 08.03.2013


Ответы (3)


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

Совет. Проблемы с производительностью могут возникнуть не из-за выбора многомерных или зубчатых массивов.

person Levi Botelho    schedule 08.03.2013

Выберите структуру данных, которая лучше всего представляет конкретные данные.

Используете ли вы массив для представления сетки вещей с фиксированными размерами (например, решение судоку)? Затем используйте многомерный массив.

Может ли измениться количество вещей, которые вы хотите сохранить в массиве (например, шаблон запуска судоку или возможные значения, которые пользователь вводит для ячейки судоку)? Тогда, возможно, зубчатый массив лучше.

Вы также можете иметь несколько типов массивов в своей программе, например, многомерный массив для хранения решения и зубчатый массив для хранения других данных. Или совсем другая структура данных.

Суть в том, что для чего-то вроде судоку с относительно небольшим объемом данных производительность не будет вашей самой большой проблемой. Будет лучше, если вы структурируете программу как можно четче, а о производительности позаботитесь позже.

person WildCrustacean    schedule 08.03.2013

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

person DanBrum    schedule 08.03.2013