:-) si vous n'essayez pas de garder l'ordre, alors le temps estO(1), le nombre total d'étapes de toutes les boucles= taille du tableau.
trop paresseux pour coder :-)
1. rechercher les 3 premiers de gauche à droite.
2. si elle est trouvée, cherchez alors un non-trois de droite à gauche, copiez-le à la place du 3.
continuez jusqu'à ce que 1,2 se croisent, coupez le tableau par le nombre de copies.
Idéalement, c'est exactement la moitié du "tri à bulles" :-) Si au lieu de copier, vous faites un échange, le résultat sera un tableau partiellement ordonné (les 3 tiers sont déplacés vers la droite).
Le nombre total d'étapes de toutes les boucles = la taille du tableau est d'une complexité O(n). Si le tableau d'entrée est trié, le problème donné est résolu par recherche binaire. La complexité est O(log(n)) dans le cas moyen et O(n) dans le pire cas.
Il est assez compact et fonctionne même correctement. Félicitations à Peter. Mais en termes de vitesse, il vient en deuxième position. Ou la première place depuis la fin, si on ne compte pas l'original, complètement inutilisable par la variante de vitesse du propriétaire de ce fil.
2018.11.1403:26:49.182 ArrayDeleteValue (BTCUSD,M15) вариант Pastushak: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 131158 микросекунд
2018.11.1403:26:49.185 ArrayDeleteValue (BTCUSD,M15) вариант Korotky: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 2431 микросекунд
2018.11.1403:26:49.188 ArrayDeleteValue (BTCUSD,M15) вариант Fedoseev: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 1809 микросекунд
2018.11.1403:26:49.190 ArrayDeleteValue (BTCUSD,M15) вариант Semko: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 785 микросекунд
2018.11.1403:26:49.194 ArrayDeleteValue (BTCUSD,M15) вариант Pavlov: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 2839 микросекунд
2018.11.1403:26:49.199 ArrayDeleteValue (BTCUSD,M15) вариант Nikitin: Контрольная сумма = 496575839; элементов - 997971; время выполнения = 4049 микросекунд
2018.11.1403:26:49.204 ArrayDeleteValue (BTCUSD,M15) вариант Vladimir: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 3888 микросекунд
2018.11.1403:26:49.212 ArrayDeleteValue (BTCUSD,M15) вариант Peter: Контрольная сумма = 496575839; элементов - 998974; время выполнения = 7597 микросекунд
Ce n'est pas du tout que je suis paresseux, mais MT n'est que sur les SDV et on n'expérimente pas sur eux.
à ce sujet :
+- 1 :-) Je reviens de la campagne dans quelques jours, je vais vérifier...
ps. en plus, dans le code, une entrée supplémentaire dans la boucle à la fin...une broutille, mais qui peut être supprimée
Bravo ! Après avoir corrigé quelques erreurs, vous m'avez peut-être fait tomber de mon piédestal, même sans utiliser ArrayCopy. Échec et mat. :))
template <typename T>
int arrayFilter3(T &arr[], const T x) // вариан Kuznetsov
{
int i=0;
int j=ArraySize(arr)-1;
for(;;) {
while(arr[i]!=x && i<j) i++;
while(arr[j]==x && i<j) j--;
if (i<j) {
arr[i++]=arr[j--];
} elsebreak;
}
ArrayResize(arr,j+1);
return j+1;
}
2018.11.1403:48:29.572 ArrayDeleteValue (USDRUB,M1) вариант Pastushak: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 131929 микросекунд
2018.11.1403:48:29.576 ArrayDeleteValue (USDRUB,M1) вариант Korotky: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 2411 микросекунд
2018.11.1403:48:29.579 ArrayDeleteValue (USDRUB,M1) вариант Fedoseev: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 1839 микросекунд
2018.11.1403:48:29.581 ArrayDeleteValue (USDRUB,M1) вариант Semko: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 782 микросекунд
2018.11.1403:48:29.585 ArrayDeleteValue (USDRUB,M1) вариант Pavlov: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 2813 микросекунд
2018.11.1403:48:29.590 ArrayDeleteValue (USDRUB,M1) вариант Nikitin: Контрольная сумма = 496206996; элементов - 997969; время выполнения = 4200 микросекунд
2018.11.1403:48:29.596 ArrayDeleteValue (USDRUB,M1) вариант Vladimir: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 3597 микросекунд
2018.11.1403:48:29.604 ArrayDeleteValue (USDRUB,M1) вариант Peter: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 7684 микросекунд
2018.11.1403:48:29.606 ArrayDeleteValue (USDRUB,M1) вариант Kuznetsov: Контрольная сумма = 496206996; элементов - 999002; время выполнения = 681 микросекунд
Bravo ! Après avoir corrigé quelques erreurs, vous m'avez fait tomber de mon piédestal même sans utiliser ArrayCopy. Échec et mat. :))
Bien que ce ne soit pas exactement le cas, car le tableau de sortie est tout à fait différent - déjà mélangé. Mais c'est quand même cool !
Bien sûr, si nous avons affaire à des devis, cela ne fonctionnera pas. Je suis à nouveau sur le podium. ))
J'ai changé la façon de calculer la somme de contrôle. Ce n'est plus la simple somme de tous les éléments, mais la somme est (valeur de l'élément)/(numéro de l'élément). Et voilà ce que j'ai obtenu :
2018.11.1404:20:26.063 ArrayDeleteValue (USDRUB,M1) вариант Pastushak: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 132291 микросекунд
2018.11.1404:20:26.067 ArrayDeleteValue (USDRUB,M1) вариант Korotky: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 2322 микросекунд
2018.11.1404:20:26.071 ArrayDeleteValue (USDRUB,M1) вариант Fedoseev: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 1831 микросекунд
2018.11.1404:20:26.074 ArrayDeleteValue (USDRUB,M1) вариант Semko: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 773 микросекунд
2018.11.1404:20:26.079 ArrayDeleteValue (USDRUB,M1) вариант Pavlov: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 2879 микросекунд
2018.11.1404:20:26.085 ArrayDeleteValue (USDRUB,M1) вариант Nikitin: Контрольная сумма = 7093.903216084301; элементов - 998017; время выполнения = 3605 микросекунд
2018.11.1404:20:26.090 ArrayDeleteValue (USDRUB,M1) вариант Vladimir: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 3622 микросекунд
2018.11.1404:20:26.100 ArrayDeleteValue (USDRUB,M1) вариант Peter: Контрольная сумма = 7090.600736767353; элементов - 999003; время выполнения = 7252 микросекунд
2018.11.1404:20:26.102 ArrayDeleteValue (USDRUB,M1) вариант Kuznetsov: Контрольная сумма = 7085.49357433088; элементов - 999003; время выполнения = 691 микросекунд
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Comparez les 2 variantes de code sur le même TdR :
и :
Cela pourrait-il avoir été écrit par la même personne à un peu plus d'une heure d'intervalle ? L'écriture est douteuse.)Alexei, tu tues les jeunes talents...
Ce marketeur n'a pas été capable de commencer à vendre pendant 5 ans... et vous dites qu'il est encore pire en tant que programmeur.
Désolé, je ne voulais pas vous tuer.
:-) si vous n'essayez pas de garder l'ordre, alors le temps estO(1), le nombre total d'étapes de toutes les boucles= taille du tableau.
trop paresseux pour coder :-)
1. rechercher les 3 premiers de gauche à droite.
2. si elle est trouvée, cherchez alors un non-trois de droite à gauche, copiez-le à la place du 3.
continuez jusqu'à ce que 1,2 se croisent, coupez le tableau par le nombre de copies.
Idéalement, c'est exactement la moitié du "tri à bulles" :-) Si au lieu de copier, vous faites un échange, le résultat sera un tableau partiellement ordonné (les 3 tiers sont déplacés vers la droite).
Le nombre total d'étapes de toutes les boucles = la taille du tableau est d'une complexité O(n).
Si le tableau d'entrée est trié, le problème donné est résolu par recherche binaire.
La complexité est O(log(n)) dans le cas moyen et O(n) dans le pire cas.
Je n'ai toujours pas compris la version de Peter.
Il est assez compact et fonctionne même correctement. Félicitations à Peter.
Mais en termes de vitesse, il vient en deuxième position. Ou la première place depuis la fin, si on ne compte pas l'original, complètement inutilisable par la variante de vitesse du propriétaire de ce fil.
Comment l'avez-vous testé ?
Comment avez-vous fait vos tests ?
Étudiez le code.
C'est mauvais quand on est trop paresseux pour coder.
Ce n'est pas du tout que je suis paresseux, mais MT n'est que sur les SDV et on n'expérimente pas sur eux.
à ce sujet :
+- 1 :-) Je reviens du camp d'été dans quelques jours, je vais vérifier...
ps. en outre, dans le code, il y a une entrée de boucle supplémentaire sur la terminaison... une broutille, mais elle peut être supprimée
Ce n'est pas du tout que je suis paresseux, mais MT n'est que sur les SDV et on n'expérimente pas sur eux.
à ce sujet :
+- 1 :-) Je reviens de la campagne dans quelques jours, je vais vérifier...
ps. en plus, dans le code, une entrée supplémentaire dans la boucle à la fin...une broutille, mais qui peut être supprimée
Bravo ! Après avoir corrigé quelques erreurs, vous m'avez peut-être fait tomber de mon piédestal, même sans utiliser ArrayCopy. Échec et mat. :))
Bravo ! Après avoir corrigé quelques erreurs, vous m'avez fait tomber de mon piédestal même sans utiliser ArrayCopy. Échec et mat. :))
Bien que ce ne soit pas exactement le cas, car le tableau de sortie est tout à fait différent - déjà mélangé. Mais c'est quand même cool !
Bien sûr, si nous avons affaire à des devis, cela ne fonctionnera pas. Je suis à nouveau sur le podium. ))
J'ai changé la façon de calculer la somme de contrôle. Ce n'est plus la simple somme de tous les éléments, mais la somme est (valeur de l'élément)/(numéro de l'élément).
Et voilà ce que j'ai obtenu :