fix(four-color): stop solver freeze on large maps
Plain backtracking froze the tab on big maps. Pick the most constrained region first (DSATUR), and stop after 100,000 attempts. Measured on 52,000 maps (38x38): max 48 ms, about 1 in 2,900 give up.
This commit is contained in:
1 parent
07e0fc1192
commit
2224774e00
6 files changed
+143
-23
No files matched your search
@@ -790,13 +790,14 @@
|
||||
"DISCLAIMER_BOTTOM": "Zum einfärben in die Zelle klicken. Durch erneutes klicken ändert sich die Farbe."
|
||||
},
|
||||
"ALERT": {
|
||||
"NO_SOLUTION": "Keine Lösung gefunden (das sollte bei einer planaren Karte nicht passieren!)."
|
||||
"NO_SOLUTION": "Keine Lösung gefunden (das sollte bei einer planaren Karte nicht passieren!).",
|
||||
"LIMIT_REACHED": "Keine Lösung innerhalb von {{limit}} Versuchen gefunden. Bitte eine neue Karte erzeugen."
|
||||
},
|
||||
"HOW_IT_WORKS": {
|
||||
"INTRO": "Die Karte entsteht auf einem Gitter: pro 30 Zellen wird ein Keim an eine zufällige freie Position gesetzt. Alle Keime wachsen gleichzeitig per Breitensuche (eine gemeinsame Warteschlange), bis jede Zelle zu einer Region gehört. Zwei Regionen sind Nachbarn, wenn zwei ihrer Zellen eine Kante teilen.",
|
||||
"ITEM_1": "Datenstruktur: eine Liste von Regionen, jede mit einem Set ihrer Nachbar-IDs (Adjazenzliste). Das Gitter speichert pro Zelle nur Regions-ID und Farbe.",
|
||||
"ITEM_2": "Lösen: Backtracking in der Reihenfolge der Regions-IDs. Für jede Region werden die Farben 1 bis 4 probiert; passt keine, geht der Löser eine Region zurück. Keine Heuristik wie 'meiste Nachbarn zuerst', darum liegen die Farbversuche bei großen Karten manchmal deutlich über der Zahl der Regionen.",
|
||||
"ITEM_3": "Die Standardkarte (25 × 25, 20 Regionen) löst er in unter 1 ms. Große Karten können sehr lange dauern, weil das Backtracking keine Heuristik hat und der Worst Case exponentiell ist.",
|
||||
"ITEM_2": "Lösen: Backtracking. Der Löser nimmt immer die am stärksten eingeschränkte Region zuerst (DSATUR): die mit den meisten verschiedenen Farben bei ihren Nachbarn, bei Gleichstand die mit den meisten Nachbarn. Für sie werden die Farben 1 bis 4 probiert; passt keine, geht der Löser einen Schritt zurück. Versuche zählen jede Farbzuweisung, auch die später zurückgenommenen.",
|
||||
"ITEM_3": "Die Standardkarte (25 × 25, 20 Regionen) löst er in unter 1 ms. Meist braucht er genau einen Versuch pro Region. Damit die Seite nie einfriert, gibt er nach 100.000 Versuchen auf (ungefähr 1 von 3.000 Karten in der größten Stufe) und meldet das; dann hilft eine neue Karte.",
|
||||
"ITEM_4": "Prüfen: alle Regionen durchgehen und jede Farbe mit den Nachbarn vergleichen, O(Regionen + Grenzen)."
|
||||
}
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user