N-Queens Problem .. Wie weit können wir gehen?

Des N-Damen-Problem:

Dieses problem besagt, dass, gegeben ein Schachbrett der Größe N durch N ist, finden die verschiedenen Permutationen, in der N Damen auf dem Brett platziert werden, ohne dass ein bedrohen sich gegenseitig.

Meine Frage ist:
Was ist der maximale Wert von N, für die ein Programm berechnen kann, die Antwort in angemessener Zeit? Oder was ist das größte N, die wir bisher gesehen haben?

Hier ist mein Programm in CLPFD(Prolog):

generate([],_).
generate([H|T],N) :-
   H in 1..N ,
   generate(T,N).

lenlist(L,N) :-
   lenlist(L,0,N).

lenlist([],N,N).
lenlist([_|T],P,N) :-
   P1 is P+1,
   lenlist(T,P1,N).

queens(N,L) :-
   generate(L,N),lenlist(L,N),
   safe(L),
   !,
   labeling([ffc],L).

notattack(X,Xs) :-
   notattack(X,Xs,1).

notattack(X,[],N).
notattack(X,[Y|Ys],N) :-
   X #\= Y,
   X #\= Y - N,
   X #\= Y + N,
   N1 is N + 1,
   notattack(X,Ys,N1).

safe([]).
safe([F|T]) :-
   notattack(F,T),
   safe(T).

Dieses Programm funktioniert genauso gut, aber die Zeit, die es dauert, nimmt mit N.
Hier ist eine Beispiel-Ausführung:

?- queens(4,L).

L = [2, 4, 1, 3] ;

L = [3, 1, 4, 2] ;

No

Bedeutet dies, dass Sie statt der 4 Königinnen, die in Zeile 2 in Spalte 1, Zeile 4 in Spalte 2, Zeile 1 in 3 und Zeile 3 in 4.(In 4 Von 4 Schachbrett)

Nun werden wir sehen, wie dieses Programm führt(Zeit genommen bei der Berechnung der ersten permutation):
Für N=4,5.....10 Berechnet, innerhalb von einer Sekunde
Für N=11-30 Dauert zwischen 1-3 Sekunden
Für N=40..50 Noch berechnet innerhalb einer minute
Bei N=60 Es geht aus dem Globalen stack(Suche Raum enorm).

War dies ein Hausaufgaben problem, das aufgrund der im letzten Monat. Also ich denke, Ihr Recht, über Sie zu diskutieren jetzt.(Das ursprüngliche problem war, nur um code-N-Queens)

Ich bin auch daran interessiert, dass Alternative Implementierungen in anderen Sprachen(die besser als meine Umsetzung) oder Wenn es gibt Raum für Verbesserungen in meinem Algorithmus/Programm

InformationsquelleAutor der Frage | 2009-12-07

Schreibe einen Kommentar