Назъбен или многоизмерен масив за судоку

Искам да направя судоку с помощта на c#. Трябва ли да използвам назъбен или многоизмерен масив. И защо?

Знам, че назъбените масиви са по-бързи и по-ефективни за проста логика на масиви, като судоку. Но може би има и други аргументи?

Благодаря предварително.

Редактиране: Трябва да изпълня някои методи за решаване на судоку. Като алгоритъма за обратно проследяване. Открих, че многомерните масиви имат по-добър синтаксис.

Предполагам, че въпросът ми е: кое е най-лесно за използване, прилагане и модифициране?


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 е изборът на стил. В противен случай назъбените масиви са правилният начин. Вижте тази страхотна дискусия тук: stackoverflow.com/questions/597720/   -  person Mike Dinescu    schedule 08.03.2013
comment
Или нито едно от двете? 2D масив дава лесен достъп до всяка клетка, но не дава удобен начин за работа върху цял ред, колона или 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