Speed quirk: redundant line gives six-fold speedup

Mark Dickinson dickinsm at verizon.net
Thu Aug 25 14:58:07 EDT 2005


In article <mailman.3528.1124993571.10512.python-list at python.org>, 
Stelios Xanthakis <sxanth at ceid.upatras.gr> wrote:
 
> In the sudoku solver, there is a min (number, object) which is
> probably what's affected by the extistance of the dummy variable.
> Now, in sudoku puzzles some times the algorithm has to suppose
> that in a box the right solution is one of the possible, try it
> and if it fails then try the other one.  I guess that the result
> of from the different 'min' leads the solver to first try the
> correct solution in the fast case and therefore need not attempt
> the wrong one.  Or at least this is what I think that happens.

Thank you!  That does indeed seem to be the explanation.  
The min() line looks for the shortest `constraint';  that is, the box 
with the fewest possible symbols, or the symbol with the smallest 
number of possible positions within a given row, column or block;  the
code below that line then tries all possibilities for this constraint.
The line should really be something like

  min(c for c in rowitems(h), key = lambda c: c.S)

but that isn't going to work until Python 2.5 comes out, and I was
too lazy to expand the whole thing properly instead of using the 
cheap trick I did.

Thanks again for clearing up this confusion.

Mark



More information about the Python-list mailing list