Étant donné un tableau de valeurs vrai/faux, quel est l'algorithme le plus efficace pour sélectionner un index avec une vraie valeur au hasard.Algorithme de sélection aléatoire rapide
Un algorithme simple esquisse est
a <- the array
c <- 0
for i in a:
if a[i] is true: c++
e <- random number in (0, c-1)
j <- 0
for i in e:
while j is false: j++
return j
Quelqu'un peut-il trouver un algorithme plus rapide? Peut-être existe-t-il un moyen de ne parcourir la liste qu'une seule fois même si le nombre d'éléments vrais n'est pas connu au début?
Juste curieux de savoir, dans quelles applications ces types d'algorithmes sont-ils utilisés? Il y a quelque temps, je suis tombé sur une question similaire, étant donné un tableau de taille infinie, les n premiers endroits sont remplis de 1, les autres sont des zéros. Maintenant, ce tableau est donné à un nouvel utilisateur (qui ne connaît pas la valeur de n). Maintenant, découvrez un algorithme pour marquer l'endroit où le dernier 1 est là. Cela j'ai résolu par la recherche binaire. S'il vous plaît donner quelques exemples où ceux-ci sont utilisés. – avd
Près de dupliquer: http://stackoverflow.com/questions/1133942/what-is-the-most-efficient-way-to-pick-a-random-card-from-a-deck-when-some-cards. Dans cette question le tableau est de taille 52, cependant, ce qui pourrait affecter les réponses (par exemple, vous êtes à peu près certain qu'un arary de taille 52 tient dans la mémoire, alors que 'a' ici ne correspond pas). –