18-10-2011, 11:37 AM
(Modification du message : 18-10-2011, 11:42 AM par jo_link_noir.)
(13-10-2011, 04:11 PM)Xenos a écrit : Itérateurs: complexité en O(N) (en gros)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: complexité en O(1)
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 10Ouai 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 :/