Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.
Carliste ?
Persalteas le 07/02/2012 à 10:51
salut, je cherche le moyen d'avoir l'algorithme le plus optimisé vitesse/poids afin de résoudre la chose suivante:
J'ai une liste de boléens de 8 valeurs, dont toutes égales à zéro, sauf une.
Il me faut un alogrithme pour trouver en quelle position de la liste se trouve celle qui vaut un.
exemple: si c'est {0,0,1,0,0,0,0,0}, que l'algo me renvoie 3.
Est-ce que quelqu'un saurait faire ?
Note: pour l'instant j'utilise:
Code
:For(D,1,8
:If L1(D
:D->E
:End
:Disp E
l1 étant ma liste et E le résultat. Mais ça me semble lourd et comme je sais qu'il y a des petits obsédés de l'optimisation...

sandro le 07/02/2012 à 11:15
je proposerais plutôt
ou
ou
Code
sum(L1{1,2,3,4,5,6,7,8
ou
Code
max(L1{1,2,3,4,5,6,7,8
(à voir lequel des 4 est le plus rapide)
Sandro
Persalteas le 07/02/2012 à 11:18
Aha... c'est pas mal Sandro, je vais regarder ça...
C'est même bien...
Merci beaucoup !
Le plus rapide, j'en sais rien... J'utilise ça dans une grande boucle, je ne sais pas le temps qu'elle prend. Mais t'inquiète pas mon prog est relativement fluide.
linkakro le 07/02/2012 à 18:07
Dommage que mon article ne t'ai pas été utile. Cela signifie qu'il n'est pas encore parfait.
D'ailleurs j'ai pensé précisément à un des exemples de sandro avant de le lire. Le reste lui est tout à fait original.Persalteas le 07/02/2012 à 21:07
Linkakro: je n'ai pas lu tout tes articles.
Lequel en parle ?
linkakro le 07/02/2012 à 23:55
Ah... c'est ballot, je croyais vraiment que tu lisais tout.
C'est celui sur les
tests et les optimisations.
J'ai ajoûté un exemple proche de ce sujet. (les autres ne le mentionnaient pas directement)
D'ailleurs en le relisant je me demande s'il est réellement utile : il semble trop technique et pas assez ludique.
Persalteas le 08/02/2012 à 08:31
Ha, ben voilà.
Je ne lis que le meilleur de ce forum
Pas les exemples hors-sujet
Enfin bon, dommage linkakro, merci Sandro
Sangohan38 le 08/02/2012 à 19:54
J'en ai encore une à tester:
L'avantage c'est qu'elle est généralisable par la formule
Code
1+dim(L1)-sum(cumSum(L1
Sangohan38
Persalteas le 08/02/2012 à 23:37
Merci, ça se raccourcit de plus en plus...
ça sert a quoi, au juste, cumSum( ?
parce que la, je te crois sur parole, sans comprendre ta formule...
Sangohan38 le 09/02/2012 à 00:23
cumsum( sert à faire la somme cumulée de la liste (on ajoute le 1er terme au second et c'est le nouveau second terme, le 2eme et 3eme et c'est le nouveau 3eme etc).
Par exemple dans le cas donné, on obtient {0,0,1,1,1,1,1,1} car on ajoute 0 au 1 à partir de la 4eme ligne.
Si on somme, on a donc le nombre de lignes qui valent 1 et du coup si on soustrait la taille de la liste par ce nombre, on a le nombre de lignes avant le 1 d'où l'utilité de rajouté 1 afin de connaitre la ligne du premier terme égal à 1.
Sangohan38Persalteas le 09/02/2012 à 21:04
Je dois avouer que c'est bien réfléchi.
Merci pour le tuyau.
Avertissement :Il s'agit d'une page optimisée pour la navigation mobile. Voir la
page originale.