2016-05-21 4 views
0

est ici le violon pour lui: https://jsfiddle.net/rujbra6y/3/Est-il possible d'optimiser cet algorithme de remplissage?

Je suis déjà connecter la vitesse afin apporter des modifications et juste réexécuter une ou deux fois pour voir si la performance a augmenté du tout.

J'ai travaillé dessus pendant quelques heures et je ne vois rien d'autre que je puisse changer pour le rendre plus rapide. Je voudrais que ce soit le plus rapide possible car actuellement il y a un petit délai lorsque l'utilisateur utilise floodfill et pour une expérience utilisateur correcte, j'aimerais que ce délai soit aussi court que possible.

Y a-t-il d'autres optimisations ou hacks que je peux utiliser pour augmenter la vitesse?

+0

Ce serait génial si vous pouviez décrire ce que cet algorithme est supposé faire. Pourriez-vous nous en dire un peu plus sur votre implémentation et illustrer avec les exemples de code les plus significatifs? – leaf

+0

Oui, c'est possible mais c'est probablement un meilleur match pour le site de la soeur http://codereview.stackexchange.com/ – K3N

+0

@procrastinator: C'est juste un remplissage d'inondation standard. https://en.wikipedia.org/wiki/Flood_fill –

Répondre

1

Il y a quelques choses que vous pouvez faire à un bref coup d'oeil:

  • Remplacée Uint8ClampedArray avec Uint32Array. Cela vous évitera de déplacement inutile et ops AND Les
  • Remplacer push/pop avec un pointeur de pile, cette façon de mettre à jour tout cas
  • Vous pouvez définir un tableau typé (Int16Array) pour la pile en utilisant une taille fixe (assurez-vous pour le rendre assez grand)

la seule chose que vous devez connaître pour Uint32Array est l'octet de poids est petit-boutiste, que vous dire devez fournir la couleur cible au format 0xAABBGGRR (ou faire une première bit-shift donnant r, g, b comme valeurs séparées). Avec ces changements (sauf le dernier), le code est passé d'environ 69-75ms à 58-61ms sur mon ordinateur (i5 pour le moment).

Updated fiddle

Je vais laisser le tableau typé pour la pile comme un exercice. :-)

+0

Merci beaucoup! Je vais essayer de le faire fonctionner de mon côté. Je ne suis pas vraiment sûr de ce que vous voulez dire par le tableau typé. –

+0

@ChronBag https://developer.mozilla.org/fr-fr/docs/Web/JavaScript/Reference/Global_Objects/TypedArray – K3N