2010-05-31 12 views

Répondre

12

Il peut y avoir plusieurs raisons que l'on voudrait mélanger aléatoirement une séquence ordonnée d'éléments. Par exemple, un jeu de cartes. Shuffling n'est pas un algorithme trivial, tout comme le tri n'est pas - Il est donc assez commun de nécessiter une fonction de bibliothèque. Quant à savoir pourquoi une liste - évidemment il doit s'agir d'une collection ordonnée, donc pas de collection générale. Seule la liste et ses sous-types sont garantis pour être commandés. La classe Collections ne fournit pas d'opérations pour les tableaux, mais vous pourriez (et probablement, pour les performances) passer une ArrayList à cette méthode.

+1

+1 pour le dernier paragraphe – jensgram

+0

... en fait l'implémentation est plutôt triviale. Chaque élément obtient un nouvel index, si l'emplacement est déjà occupé, la collection (ou l'itérateur) calcule l'emplacement libre suivant. –

+0

@Andreas_D ne le sous-estimez pas, vous devez faire attention à utiliser un algo dans lequel toutes les permutations sont également probables, donc ce n'est pas complètement trivial - voir http://en.wikipedia.org/wiki/Fisher-Yates_shuffle – Jesper

5

Um, si vous avez une collection, et que vous voulez mélanger ... il

L'exemple le plus évident serait un jeu de cartes où vous avez des objets représentant des cartes individuelles, et une collection représentant le pont qui vous voulez mélanger. Autre exemple: si vous présentez plusieurs réponses à un utilisateur dans un questionnaire et que vous ne voulez pas qu'il y ait un biais dû à l'ordre des réponses, vous présentez à chaque utilisateur un ensemble de réponses à choisir.

1

Eh bien, imaginez que vous modélisez un jeu de cartes. Shuffle serait l'une des premières fonctions que vous écrivez.

Chaque fois que vous souhaitez randomiser le contenu d'une collection, vous devez utiliser shuffle.

1

Quelques idées comment vous pouvez utiliser cette méthode:

  • cartes Lecture aléatoire dans un jeu
  • Randomisez un tableau dans un cas de test pour un algorithme de tri
  • Traînant cas de test dans votre suite de test pour vous Bien sûr, ils ne dépendent pas les uns des autres
  • Si vous essayez de résoudre un problème NP-complet comme le vendeur itinérant, une approche consiste à prendre l'entrée, la mélanger plusieurs fois et ensuite utiliser le résultat avec la plus courte longueur. Cela vous donne une solution qui s'exécute en O (N) (où N est le nombre de nœuds).