eliot-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Eliot-dev] Re: optimisation board_search


From: Philippe CHATAIGNON
Subject: [Eliot-dev] Re: optimisation board_search
Date: Wed, 14 Jan 2009 21:01:12 +0100
User-agent: Thunderbird 2.0.0.19 (Windows/20081209)

Olivier Teuliere a écrit :
> J'envisage d'intégrer une architecture client-serveur dans une future
> version d'Eliot, donc vos programmes Python pourront peut-être me
> donner des idées...
>   
J'ai mis en place 2 dépots mercurial (http://www.selenic.com/mercurial),
l'un pour le serveur + le générateur :
hg clone http://hgbiw.ath.cx/pub/pyscrabse
l'autre pour le client (qui nécessite wxpython) : hg clone
http://hgbiw.ath.cx/pub/wxscrab

le serveur et le client tournent sous Linux/BSD avec python 2.5 (ou 2.4
avec elementtree). Pour le client, il existe une version Windows (les
scripts py2exe sont dans le dépot) que je peux transmettre si besoin.
> Je pense que ce test est nécessaire. Tout d'abord, il s'agit d'un "et"
> logique, et non pas d'un "et" binaire, ce qui fait que la lettre A
> n'est pas privilégiée par rapport aux autres.
>
> L'idée derrière ce test est qu'un joker pur (non encore associé à une
> lettre au sein d'un mot) matche n'importe quel masque de cross _sauf_
> le masque vide. Par exemple, si le mot COQ est placé en H6, la case I8
> aura un cross-check vide (aucun mot de 2 lettres ne commence par Q).
> Un mot horizontal ne pourra pas passer par la case I8, même si c'est
> un joker qui est placé sur la case.
>
> En pratique, supprimer ce test ne fausse pas les résultats de
> recherche, parce que le seul cas d'utilisation de la méthode check()
> est justement l'optimisation dont vous parlez. Cette optimisation
> consiste à éviter certains calculs (la formation des débuts de mots)
> lorsqu'on est sûr par avance qu'ils ne mèneront à rien, mais si l'on
> n'est pas sûr (i.e. si le cross-check matche avec la lettre courante)
> on fait quand même les calculs. La seule incidence de la suppression
> du test est donc de "moins optimiser" : certains calculs qui
> pourraient être évités ne le sont pas.
>
> Pour vous en convaincre, vous pouvez placer un log après la ligne "if
> (match)" (ligne 284) dans board_search.cpp.
> En faisant une recherche avec le tirage "?R", lorsque COQ est placé en
> H6, on passe 13 fois dans le if, contre 16 fois si on supprime le test
> dans la méthode check().
>
> Si mes explications ne sont pas claires, n'hésitez pas à le dire :-)
>   
Les explications sont très claires. Mon erreur vient du fait que j'ai
pris le && pour un &. On optimise effectivement davantage en testant la
nullité du cross-check en cas de présence d'un joker. Je vais intégrer
ça dans le générateur demain.

Encore merci pour la réponse et pour Eliot...

PhC






reply via email to

[Prev in Thread] Current Thread [Next in Thread]