2012-02-24 6 views
1

私はSudokuソルバーを作ることを考えていましたが、私は2つの質問があります:リストとメソッド間の効率

1)もっと速いでしょうか?

A)すべての空白を確認し、数字のリスト(1-9)を使用して同じ行または同じカテゴリにある場合は削除し、長さが1の場合は残りを1つだけ追加します。必要なときにこれを繰り返します。

B)すべての番号を確認し、すべての点をチェックしてその番号があるかどうかを確認します。必要なときにこれを繰り返します。

2)長さ9の下でリストを収容するための最も効率的なリストは何ですか?

おかげで、

伝説

+0

(それも十字線、何もすることができ、「グループ」を使用し、私はあなたがやろうとしているのか分からないが、私は数独ソルバーを作成しました)。それは主に当時のジェネリックス&コレクションのエクササイズでしたが、最も難しい9x9スドクの場合でも0.2秒以内に終了しました。私はそれがAのようなものを使ったと思うが、最も基本的なものではなく、何かを終わらせたいと思うならば、より多くのルールや "推測"が必要になるだろう。 –

+0

K、問題は簡単に行うことができます。私が何を意味しているかを知りたいなら、自由に検索してください:Rune Sudoku。 –

答えて

1

回答2)ないリストが、セット意味をなさないと思います。この場合BitSet

ケース1)9x9スドクには27のルールがあります。

ケース1A)すべてのスポットは3つのルールに参加します。

ケース1B)すべての数字は9回繰り返されます。 3つのルールに現れます。

答え1)1Aと1Bは理論的には異ならないはずですが、1Aはアルゴリズムの簡素化を図っているようです。&

+0

BitSetの場合、9要素が必要ですが、すべて真ですが、スキャンするとfalseに設定されますか? また、A)は空き領域を通過する回数は少なくなりますが、スポットあたりの時間は長くなりますが、B)スポットあたりの時間は短くなりますが、必要なループが増えます。 –

+0

再帰的なバックトラック解決は、{** done ** = int [81]}、{** todo **}でパラメータ化されます。 {todo}から次の候補を選ぶことは、可能性の可能性が最も少ない_spot_の場合になります。私はBが同じ複雑さをもたらすと思う。しかし、あなたが正しいかもしれない。 –

1

私はB作品だと思います!バックトラッキングアルゴリズムを使用して、1〜9の数字のいずれかで空のスポットを確認できます(順番に)。最初に利用可能な選択肢(1-9)でスポットを埋めると先に進む。ある時点でスロットに番号を挿入できない場合は、前のスロットに戻って別の番号を試してください。 これは役に立つかもしれません:

http://edwinchan.wordpress.com/2006/01/08/sudoku-solver-in-c-using-backtracking/

関連する問題