Sudoku solver
BartC
bc at freeuk.com
Sun Mar 29 17:11:45 EDT 2015
On 29/03/2015 19:03, Marko Rauhamaa wrote:
> BartC <bc at freeuk.com>:
>
>> As Chris mentioned, when I say 'faster than C', I mean X running my
>> algorithm was faster then C running Marko's algoritim (on Ian's data).
>> This was just an illustration of algorithm being more important than
>> language.
>
> Be careful with the benchmark comparisons. Ian's example can be solved
> with the identical algorithm in eight different ways (four corners, left
> or right). I ran the example with my recent Python solver and got these
> times in the eight cases:
>
> 884 s
> 2.5 s
> 13 s
> 499 s
> 5.9 s
> 128 s
> 1360 s
> 36 s
>
> (That suggests a slight modification to the original strategy: solve it
> in each of the eight ways "in parallel" and the worst case should be
> significantly alleviated.)
Well, in this case all the benchmarks ran the same algorithm on the same
data, which makes them a better test of the implementations than of the
algorithm.
I've mentioned a (possibly) significantly faster algorithm which I
believe to be still brute-force (now in Python here:
http://pastebin.com/CKmHmBKm).
But I realise it could just be luck in approaching the solution from a
literally different angle and encountering the answer sooner. (I think
both stop as soon as they find any valid solution.)
What I've done is try it on 3 rotations as well as the original (+90,
+180, +270 degrees, but haven't bothered with flips and reflections).
While the original took 13 seconds (using my algorithm in Python), the
rotations took 18, 49 and 87 seconds respectively.
Since the original time in PyPy took 90-odd seconds, I was about to
acknowledge that mine might not be that much faster after all. Then I
realised I was using Python 3.1 not PyPy! Python 3.1 took 28 minutes on
original hard puzzle using your code, and 13-87 seconds with mine.
So I think this other algorithm is still much faster. I've no idea why,
especially since it messes about concatenating strings and converting
them to and from integers.
--
Bartc
More information about the Python-list
mailing list