Comment générer une matrice aléatoire en C++?
Je veux générer une matrice fixe rareté et aléatoire des index et de la valeur.
Afin de simplifier le problème, prendre de tableau par exemple: générer un arr[10] avec seulement 3 emplacement avec une valeur non nulle. Si je viens aléatoire de ces 3 indices un par un, l'efficacité de l'algorithme est mauvais à cause de la répétition.
Plus difficile, j'ai aussi envie de générer une matrice aléatoire avec le rang de k, car nulle cols et rows peut provoquer un bug avec mon code...Comment faire cette fois?
Merci!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez accomplir cela avec du TSL random_shuffle:
N-dimensions tableau peut être aplatie de dehors en dimension 1 (pour les fins de l'énumération de tous ses éléments). Disons que vous avez un 5x7 tableau - ce qui signifie qu'il y a un total de 35 éléments.
Une fois que vous "remplir" le premier élément est le nombre total de places disponibles descend par un afin que vous puissiez visualiser votre tableau comme ayant seulement 34 "vide" spots maintenant - donc tout ce que vous devez faire maintenant est de remplir un élément à l'indice entre 0 et 33, et n'oubliez pas de sauter le déjà rempli lorsque vous êtes localiser cet élément.
Cette deuxième partie peut obtenir de temps donc si vos tableaux sont toujours très rares, vous pouvez simplement la liste de tous ces "prises" spots dans un tableau séparé... non, ce ne serait pas vous aider beaucoup. Un distinct lié liste de tous les endroits sera aussi inefficace, demanderait beaucoup trop de temps (relativement) à allouer et à parcourir pour chaque et chaque itération.
Par essence, le problème est de trouver un moyen rapide d'indexation dans un tableau modifié, dans lequel le nombre total d'éléments est représentant les taches qui ne sont pas encore pris et pour un éparses de la matrice de tout moyen de l'enregistrement de celles prises spots va l'emporter sur le temps qu'il faut pour générer un côté aléatoire de l'indice en cas de collision.
Seulement si le tableau est plus ou moins denses (où "plus ou moins" est un inconnu pour moi de la valeur, mais je m'attends à être au-dessus de 60% -70%) se pourrait-il que tenir un registre des éléments utilisés peuvent l'emporter sur le temps qu'il faut pour générer un non-indice répété.
Si le tableau est de taille N et K est le nombre de non-zéro entrées viens de le faire:
Comme cela a été souligné, vous pouvez aussi mettre les non-zéro éléments au début du tableau et shuffle il. C'est clairement un meilleur algorithme si vous êtes seulement à l'initialisation d'une fois.
L'avantage de l'algorithme ci-dessus vient quand il faut ré-initialiser
a
à une autre matrice aléatoire de nombreuses fois. Il suffit de garderr
autour. Ré-initialisation n'est pas nécessaire. Chaque insertion ultérieure de K non nul éléments doit seulement K étapes. Si K est petit par rapport à N, ce peut être une grande victoire:r
tableau au cours de l'initialisation de K éléments pour une valeur aléatoire, N-K éléments à zéro, et puis brassage de la matrice?Bien, je suis nouveau dans la programmation et j'étais à la recherche d'un moyen de créer une matrice avec des participants au hasard, je l'ai fait et effectivement travaillées, espérons que cela est utile pour vous. 😀