begin process at 2012 05 28 07:07:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Algorithme le plus rapide


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Algorithme le plus rapide

mardi 8 décembre 2009 à 19:52:49 | Algorithme le plus rapide

cogno

Bonjour les amis,

je cherche l'algorithme le plus rapide en C++ pour obtenir de la fonction suivante

inline int fonction (char* a) {


}

les résultats suivants:
entrée Sortie
A 3
E 4
C 9
K 10
L 40
autre 0

Il existe apparemment un algorithme plus rapide que le switch/case

Merci
mardi 8 décembre 2009 à 22:26:26 | Re : Algorithme le plus rapide

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
switch case n'est pas un algorithme.
Ce que tu recherches est une manière technique de faire les choses, pas un algorithme.

Je ne vois pas vraiment comment aller plus vite qu'un switch case !

A moins de faire de la métaprog, mais si les données sont acquises à l'exécution, ce ne sera pas possible.

(Ou peut être peut-on trouver une astuce à base de masque de bit, mais c'est un peu tiré par les cheveux).
mardi 8 décembre 2009 à 22:39:20 | Re : Algorithme le plus rapide

cogno

Réponse acceptée !
Et Pingu tes la seule personne active du forum? mdr

Merci en tout cas.
Moi j'ai répondu switch/case. Il m'a dit que c'était le second choix.

Il m'a dit qu'il pouvait avoir besoin de cette fonction 300 000 fois par seconde lol

En effet j'ai pas explorer la piste des masques binaires, c'est bien vu!

je peux malheureusement pas le faire maintenant car je ne suis plus sur des valeurs numériques..
mardi 8 décembre 2009 à 22:58:21 | Re : Algorithme le plus rapide

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
La seule solution qui me vient à l'esprit pour être plus rapide que switch case, c'est de calculer la logique à la compilation:
Code C/C++ :
#include <iostream>

template <char c>
struct Func
{
  static const int member = 0;
};

template <>
struct Func<'A'>
{
  static const int member = 3;
};

template <>
struct Func<'E'>
{
  static const int member = 4;
};

template <>
struct Func<'C'>
{
  static const int member = 9;
};

template <>
struct Func<'K'>
{
  static const int member = 10;
};

template <>
struct Func<'L'>
{
  static const int member = 40;
};

int main(void)
{
  std::cout << "Q = " << Func<'Q'>::member << std::endl;
  std::cout << "A = " << Func<'A'>::member << std::endl;
  std::cout << "E = " << Func<'E'>::member << std::endl;
  std::cout << "C = " << Func<'C'>::member << std::endl;
  std::cout << "K = " << Func<'K'>::member << std::endl;
  std::cout << "L = " << Func<'L'>::member << std::endl;

  return 0;
}
mardi 8 décembre 2009 à 23:00:54 | Re : Algorithme le plus rapide

cogno

Réponse acceptée !
En effet, ca peut etre ca, mais ou ets ce que tu fais la comparaison avec le char*a ?
mardi 8 décembre 2009 à 23:19:44 | Re : Algorithme le plus rapide

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Je ne le fais pas, puisque tout est à la compilation. C'est pour cela que j'ai précisé que c'était le seul moyen de vraiment aller plus vite, mais que ça ne résolvait pas le problème dans le cas ou les valeurs n'étaient connues qu'à l'exécution.
mardi 8 décembre 2009 à 23:24:37 | Re : Algorithme le plus rapide

cogno

Réponse acceptée !
Lui me demandait de remplir la fonction
inline int fct (char a*) {

.?.

}

Mais en effet, c'etait peut etre un "piège", dans le sens où il attendait que je propose une solution plus statique..
mardi 8 décembre 2009 à 23:44:16 | Re : Algorithme le plus rapide

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
J'ai finalement une solution, mais je ne pense pas qu'elle soit plus rapide qu'un switch case, et c'est un peu tiré par les cheveux:
Code C/C++ :
#include <iostream>

int fonction(char* a)
{
  return
    ((!!!(*a ^ 0b1000001)) * 3) +
    ((!!!(*a ^ 0b1000101)) * 4) +
    ((!!!(*a ^ 0b1000011)) * 9) +
    ((!!!(*a ^ 0b1001011)) * 10) +
    ((!!!(*a ^ 0b1001100)) * 40);
}

int main()
{
  std::cout << "Q " << fonction("Q") << std::endl;
  std::cout << "A " << fonction("A") << std::endl;
  std::cout << "E " << fonction("E") << std::endl;
  std::cout << "C " << fonction("C") << std::endl;
  std::cout << "K " << fonction("K") << std::endl;
  std::cout << "L " << fonction("L") << std::endl;

  return 0;
}

mardi 8 décembre 2009 à 23:49:56 | Re : Algorithme le plus rapide

cogno

Réponse acceptée !
A méditer sur le secret de tes masques :)

devancer par tant d'exclamation...je me dis que si en effet cest ca, je suis fier de ne pas l'avoir trouvé héhé (j'ai économiser de la chute de cheveux)

mais a mon avis tu as raison, ya que le masquage qui reste comme solution
mardi 8 décembre 2009 à 23:52:10 | Re : Algorithme le plus rapide

CptPingu

Administrateur CodeS-SourceS
Réponse acceptée !
Simplifiable en:
Code C/C++ :
#include <iostream>

int fonction(char* a)
{
  return
    (!(*a ^ 'A') * 3) +
    (!(*a ^ 'E') * 4) +
    (!(*a ^ 'C') * 9) +
    (!(*a ^ 'K') * 10) +
    (!(*a ^ 'L') * 40);
}

int main()
{
  std::cout << "Q " << fonction("Q") << std::endl;
  std::cout << "A " << fonction("A") << std::endl;
  std::cout << "E " << fonction("E") << std::endl;
  std::cout << "C " << fonction("C") << std::endl;
  std::cout << "K " << fonction("K") << std::endl;
  std::cout << "L " << fonction("L") << std::endl;

  return 0;
}

1 2 3

Cette discussion est classée dans : fonction, rapide, algorithme


Répondre à ce message

Sujets en rapport avec ce message

Un logiciel trop rapide [ par Cyr62110 ] J'ai crée un petit logiciel mais il y'as un gros, un énorme problémeJe le lance, je répond à la fonction scanf()Puis le logiciel donne la réponse et s Initiation a la programation " algorithme " [ par trendyboy ] Salut tt le monde, Je suis pas un pro de l'algo pis la j'étais entrin de revizé pour mon exam final et je suis bloké devan deux exercices, je demande C++ Transformée de Fourier Rapide Algorithme du Papillon [ par mamadoucasa ] Bonjour, Je cherche à trouver le moyen de calculer une transformée de fourier rapide, j'ai déjà une idée grace aux précédents posts mais ne sais pas code c , c++ en algorithme genetique pour optimiser une fonction non lineaire [ par dandee2 ] bonjour ,  ou  est ce que je peux trouver en language c++ un code source en algorithme genetique pour optimiser la fonction  :F(x,y,z)=x4.y4.z4-y4.z+e Algorithme [ par serie1 ] Bonjour, je débute. Quelqu'un pourrait m'expliquer le déroulement de cet alogo. J'ai bien compris que l'on appelle la fonction que l'on a crée "calcu Algorithme RSA [ par stade13 ] Bonjour, je me permet de crée ce sujet pour la raison suivante: J'ai implémenté l'algorithme RSA et il fonction a merveille sauf que je dois ajouter tendance d'une temperature [ par thdigit ] bonjour a tous je capture toutes les secondes une valeur de temperature et je recherche un algorithme qui puisse me donner la tendance de cette tempe algorithme tarjan [ par hassan116 ] Bonjour, je viens faire appel à votre aide pour un problème sur un algorithme Tarjan de détection de composantes fortement connexes dans un graphe algorithme zéro d'une fonction [ par louna12 ] Bonsoir, pouvez-vous m'aider sur ce qui suit, svp? Écrire un algorithme qui calcule le zéro d'une fonction f(x) sur l'intervalle [a; b], avec une pré fonction cvLoadImage de cv.h [ par soundous1909 ] Bonjour, je vient d'installer Opencv 2.2.0 sous Ubuntu . Mon problème est avec la fonction cvLoadImage , en exécutant ce code la fenêtre s'ouvre mais


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,200 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales