0
votes

Comment exécuter une fonction x% du temps qu'il doit être exécuté?

Cas d'utilisation: Les images en direct sont fournies en temps réel et doivent être visualisées à l'écran. Pour abaisser la charge de la CPU, l'utilisateur doit être capable de supprimer les images et de ne montrer que 10%, ou 50%, des images.

Si l'utilisateur choisit 50%, alors toutes les autres images doivent être affichées (pas 50 images dans une rangée, puis jetez 50, comme cela serait trop de 50%.)

Le code actuel: xxx

montre l'image 100 % des temps.

Si l'utilisateur fournit un entier, comme 1,2,3 .., ce qui signifie chacun, chaque seconde, chaque tiers et ainsi de suite, quelque chose de familier comme celui-ci pourrait être utilisé: < / p> xxx

Cependant, l'algorithme ci-dessus ne prend pas en charge montrant moins de 50% (la "2") des images, et donc la question est de savoir comment faire ça? < / p>

Comme il s'agit d'une application en streaming en direct, il doit être rapide.

De plus, le code ci-dessus est exécuté dans une fonction Callback , donc il y a aucune connaissance de quand il doit être exécuté.


0 commentaires

3 Réponses :


2
votes

Économisez la proportion donnée dans un "équilibre exécutant". Chaque fois qu'il atteint au moins 1,00, "encaisser" les économies d'une image.

Choisir 27% pour un exemple ... P>

show_count = 0.00
ratio = 0.27
while (we have more images to show) {
    show_count += ratio
    if (show_count >= 1.00) {
        show_image()
        show_count -= 1.00
}


0 commentaires

5
votes

Une image donnée est montrée, soit non montrée. S'il n'est pas montré, les chances de toute image future étant affichée devraient augmenter. Si elle est montrée, les chances de toute image future devraient descendre.

Donc, comptez jusqu'à 100. Si vous arrivez sur ou plus de 100, affichez la photo ... et soustrayez 100: P>

static counter(0);
if (counter >= 100) {
    showImage();
    counter -= 100;
}
counter += chance;


1 commentaires

Essayé et cela semblait fonctionner parfaitement. Algorithme très intéressant!



1
votes

Les autres réponses à cette question ne semblent tous à mettre en œuvre un compteur, alors je pensais que je suggérerais une approche probabiliste. Vous pouvez générer un nombre aléatoire entre zéro et une fois que votre fonction est appelée: xxx

puis, si le nombre aléatoire est inférieur au pourcentage prescrit d'images à afficher, affichez l'image. Sinon, jetez-le.


2 commentaires

Avoir un uppot pour la pensée latérale. Je ne sais pas si le résultat est assez "systématique". Mais j'aime votre pensée hors de la boîte.


Merci @yunnosch. J'apprécie les commentaires et vous avez raison: cette réponse ne garantirait pas que toutes les autres images soient affichées dans l'exemple de cas d'utilisation 50/50.