Je tente de modifier l'algorithme de sélection pour travailler avec la situation suivante:Modification algorithme de sélection pour sélectionner des éléments pondérés
Mon imput est une liste de nombres x1, x2, ..., XN (pas nécessairement commandé) .
Chacun de ces nombres a un poids "w". J'appelle W la somme de tous les poids. Si je fournis une valeur X, qui est supérieure à 0 mais non supérieure à W, comment puis-je trouver xi, de sorte que la somme des poids de tous les x dont l'indice est supérieur à i est inférieure à X, et Le poids de xi + la somme des poids de tous les éléments dont l'index est supérieur à i est supérieur ou égal à X.
Ceci est facilement accompli si nous trions tous les x en fonction de leur index, mais je souhaite le faire sans trier .
Les personnes ne sont pas triées par identifiant. Par exemple, l'identifiant peut être trié 3, 2, 1, 4, etc. Les poids sont également distribués arbitrairement parmi ces éléments. – AlexTex
Mais je suppose que l'identifiant est lié à un compte? Si vous les voulez dans l'ordre de l'identifiant ... et que vous connaissez les identifiants (même s'ils ne sont pas encore en ordre), ce n'est pas un problème de tri en supposant qu'ils sont tous continus, etc. arrangez-les. Par exemple. pour 3,2,1,4 juste faire 4 slots et ensuite mettre chaque nombre dans son emplacement. –
Voici une tentative de réécriture du problème en utilisant des littéraux (je suppose qu'il est plus facile de le comprendre de cette façon): Mon imput est une liste de nombres x1, x2, ..., xn (pas nécessairement ordonnée) et chacun de ces chiffres ont un poids "w". J'appelle W la somme de tous les poids. Si je fournis une valeur X, qui est supérieure à 0 mais non supérieure à W, comment puis-je trouver xi, de sorte que la somme des poids de tous les x dont l'indice est supérieur à i est inférieure à X et la somme des Le poids de xi + la somme des poids de tous les éléments dont l'index est supérieur à i est supérieur ou égal à X. Je ne suis pas sûr que votre solution soit O (n). – AlexTex