From Surf Wiki (app.surf) — the open knowledge base
Backmarking
In constraint satisfaction, backmarking is a variant of the backtracking algorithm.
Backmarking works like backtracking by iteratively evaluating variables in a given order, for example, x_1,\ldots,x_n. It improves over backtracking by maintaining information about the last time a variable x_i was instantiated to a value and information about what changed since then. In particular:

- for each variable x_i and value a, the algorithm records information about the last time x_i has been set to a; in particular, it stores the minimal index j such that the assignment to x_1,\ldots,x_j,x_i was then inconsistent;
- for each variable x_i, the algorithm stores some information relative to what changed since the last time it has evaluated x_i; in particular, it stores the minimal index k of a variable that was changed since then.
The first information is collected and stored every time the algorithm evaluates a variable x_i to a, and is done by simply checking consistency of the current assignments for x_1,x_i, for x_1,x_2,x_i, for x_1,x_2,x_3,x_i, etc.

The second information is changed every time another variable is evaluated. In particular, the index of the "maximal unchanged variable since the last evaluation of x_i" is possibly changed every time another variable x_j changes value. Every time an arbitrary variable x_j changes, all variables x_i with ij are considered in turn. If k was their previous associated index, this value is changed to min(k,j).
The data collected this way is used to avoid some consistency checks. In particular, whenever backtracking would set x_i=a, backmarking compares the two indexes relative to x_i and the pair x_i=a. Two conditions allow to determine partial consistency or inconsistency without checking with the constraints. If k is the minimal index of a variable that changed since the last time x_i was evaluated and j is the minimal index such that the evaluation of x_1,\ldots,x_j,x_i was consistent the last time x_i has been evaluated to a, then:
- if j, the evaluation of x_1,\ldots,x_j,x_i is still inconsistent as it was before, as none of these variables changed so far; as a result, no further consistency check is necessary;
- if j \geq k, the evaluation x_1,\ldots,x_k,x_i is still consistent as it was before; this allows for skipping some consistency checks, but the assignment x_1,\ldots,x_i may still be inconsistent.
Contrary to other variants to backtracking, backmarking does not reduce the search space but only possibly reduce the number of constraints that are satisfied by a partial solution.
References
- {{cite book | url-access=registration
This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page.
Ask Mako anything about Backmarking — get instant answers, deeper analysis, and related topics.
Research with MakoFree with your Surf account
Create a free account to save articles, ask Mako questions, and organize your research.
Sign up freeThis content may have been generated or modified by AI. CloudSurf Software LLC is not responsible for the accuracy, completeness, or reliability of AI-generated content. Always verify important information from primary sources.
Report