JeuWeb - Crée ton jeu par navigateur
[PHP] Déterminer le prochain point d'une spirale carrée dans une grille - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP] Déterminer le prochain point d'une spirale carrée dans une grille (/showthread.php?tid=5640)

Pages : 1 2 3


RE: [PHP] Déterminer le prochain point d'une spirale carrée dans une grille - Xenos - 13-10-2011

Itérateurs: complexité en O(N) (en gros)
Méthode non-récursive direct: complexité en O(1)

C'est vite réglé...
Et ça se voit aussi très vite vu la longueur du code itérateurs par rapport à la longueur du code non-récursif.

Pourquoi tenez-vous à utiliser du récursif alors qu'il existe une méthode sans?! ^^ C'est comme... si vous vouliez faire un récursif pour calculer 45*84, en faisant 45+(45*83) = 45+45+(45*82)...= 45+45+...+45, c'est forcément plus complexe à calculer, plus long, voir aprfois plus lourd à tapper qu'un 45*84 direct.

Enfin bref, faites comme vous voulez, après tout, j'ai pas besoin de spirale, si vous tuez vos serveurs, c'est pas mes oignons.


RE: [PHP] Déterminer le prochain point d'une spirale carrée dans une grille - niahoo - 13-10-2011

Ben moi j'ai déjà dit qu'en php effectivement la solution récursive était un mauvais design dans ce cas là.
Mais uniquement du point de vue PHP. Avec erlang par exemple, tu vas tout faire en récursif, ton code sera beaucoup plus expressif, maintenable, simple, etc. (de toute façon tu n'as pas le choix, les boucles n'existent pas).

Ensuite, dire qu'un itérateur est beaucoup plus fun que la récursion je suis absolument pas d'accord, mais bon c'est subjectif, et ce n'est pas le fun que quelquechose qui fait sa viabilité.

Par contre ... j'ai pas lu ton code, il est sûrement très bien, mais qu'est-ce qu'il est long pour une simple fonction de maths :p


RE: [PHP] Déterminer le prochain point d'une spirale carrée dans une grille - atra27 - 14-10-2011

Je pense que pour regler le probléme une bonne fois pour toutes, c'est de faire du récursif avec une fonction pour recommencer au dernier élément calculé (cas d'une erreur, fin d'execution, etc)

Comme ça, si jamais le probléme de la récursion trop longue se fait sentir, tu n'a qu'a les generer par paquets de 1000/2000 positions...

Enfin a mon avis, si c'est pour étre executé qu'une fois, on s'en fiche un peu de perfs... tu met le max_execution_time a 0 et voila on en parle plus! (sois bien sur que ton code s'arrete a un moment! sinon c'est plantage serveur...)


RE: [PHP] Déterminer le prochain point d'une spirale carrée dans une grille - jo_link_noir - 18-10-2011

(13-10-2011, 04:11 PM)Xenos a écrit : Itérateurs: complexité en O(N) (en gros)
Méthode non-récursive direct: complexité en O(1)
L'itérateur permet de récupérer les l'indices de la spirale d'un point O a un point P donc la complexité ressemble plus à:
Méthode non-récursive direct: O(1) * nombre_case
Itérateur (non récursive ici): complexité en O(1) * nombre_case

Dans ce cas je pense que l'itérateur est plus rapide, il n'utilise que des comparaisons (le InfiniteIterator pouvant etre remplacer par un entier comprit entre 0 et 3) alors que ton algo utilise une racine carre.
Au final c'est 2 problèmes différentes.

(13-10-2011, 04:11 PM)Xenos a écrit : Ensuite, dire qu'un itérateur est beaucoup plus fun que la récursion je suis absolument pas d'accord, mais bon c'est subjectif, et ce n'est pas le fun que quelquechose qui fait sa viabilité.
Je voulais dire pour récupérer les indices de la spirale, vu que c'est un intervalle, je trouve plus commode de passer par un itérateur.
Un itérateur n'empêche pas la récursivité (de manière transparente pour les langage supportant le mot clef yield (C#, js1.7, etc) sinon via callback) mais l'idée du buffer circulaire mais venu tout de suite et je ne voit pas comment le faire en récursive.

(13-10-2011, 04:11 PM)Xenos a écrit : Par contre ... j'ai pas lu ton code, il est sûrement très bien, mais qu'est-ce qu'il est long pour une simple fonction de maths 10
Ouai j'suis d'accords, mais les 4 methodes (next, valid, rewind et current) qui sont vraiment utilisées tiennent sur une trentaine de lignes. Le reste c'est le test, l'objet Rect pour stocker la taille et toArray() qui est une fonction optimiser pour transformer l'itérateur en tableau.

EDIT: quand j'ai fait le code de l'itérateur je n'avais plus internet et n'avait pas copier celui de Maz ce qui à ce que j'ai comprit fait la même chose. J'ai tester tout à l'heure mais je doit me planter, j'ai des valeurs négatives :/