begin process at 2010 09 06 12:18:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > ALGO : RESOLUTION "LE COMPTE EST BON" AVEC DES ARBRES BINAIRE

ALGO : RESOLUTION "LE COMPTE EST BON" AVEC DES ARBRES BINAIRE


 Description

le jeu televisé "des chiffres et des lettres" propose "le compte est bon"

mon code propose une résolution du compte est bon via des arbres binaires.

données :
6 chiffres aléatoire comprit entre 1 et 10.
1 chiffre a trouver comprit entre 100 et 999.

résultat:
la liste des opérations qui servent a trouver meilleur le résultat possible(le nombre à trouver, ou la solution qui s'en rapproche le plus).

Source

  • #include <iostream>
  • #include <time.h>
  • #include "leCompteEstBon.h"
  • int main()
  • {
  • srand((unsigned int)time(NULL));
  • clock_t start = clock();
  • LeCptEstBon *leCompteEstBon;
  • leCompteEstBon = new LeCptEstBon();
  • leCompteEstBon->computeResult();
  • leCompteEstBon->printSolution();
  • delete leCompteEstBon;
  • clock_t finish = clock();
  • float elapsed = (float)(finish-start) / (float)CLOCKS_PER_SEC;
  • cout<<endl<<"------------------------------"<<endl;
  • cout<<"elapsed time :"<<elapsed<<" seconds "<<endl;
  • cout<<"------------------------------"<<endl;
  • cout<<endl<<"press a key "<<endl;
  • int waiting;
  • cin>>waiting;
  • exit(0);
  • }
#include <iostream>
#include <time.h>
#include "leCompteEstBon.h"

int main()
{
	srand((unsigned int)time(NULL));
	clock_t start = clock();

	LeCptEstBon *leCompteEstBon;
	leCompteEstBon = new LeCptEstBon();

	leCompteEstBon->computeResult();
	leCompteEstBon->printSolution();

	delete leCompteEstBon;

	clock_t finish  = clock();
	float elapsed = (float)(finish-start) / (float)CLOCKS_PER_SEC;
	cout<<endl<<"------------------------------"<<endl;
	cout<<"elapsed time :"<<elapsed<<" seconds "<<endl;
	cout<<"------------------------------"<<endl;

	cout<<endl<<"press a key "<<endl;
	int waiting;
	cin>>waiting;
	exit(0);
}

 Conclusion

J'attends vos remarques sur ce code, notamment sur ses performances.
Il s'execute en 1 à 2 secondes pour les cas les plus compliqués.
Existe t'il un code plus rapide?

Je n'ai pas utilisé un système de "tas" car je ne vois pas comment résoudre cet exemple via les tas:
données : 5 5 10 8
solution a trouver : 105
5 * 5 = 25     (A)
8 * 10 = 80    (B)
25 + 80 = 105  (A+B)

on voit dans cet exemple que le fils droit effectue (A), et fils gauche effectue (B), indépendamment l'un de l'autre. puis (A)+(B). comment faire sans arbre ?

merci pour vos remarques,

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip CALCUL DU DETERMINANT par arfang03
Source avec Zip Source avec une capture EULER AURAIT 303 ANS par pgl10
Source avec Zip Source avec une capture FORMULES POUR NOMBRES PREMIERS par pgl10
Source avec Zip Source avec une capture TRAITEMENT DE L'EQUATION D'UNE CONIQUE AVEC UN GRAMMAIRE par kinkek
Source avec Zip BELLMAN:LA VALEUR DU PLUS COURT CHEMIN ET LE PLUS COURT CHEM... par Perace

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SNAKE CONSOLE par Maxou1012
Source avec Zip IMPLÉMENTATION DAWG par Ze1wina
Source avec Zip Source avec une capture BEJEWELED EN C par marven23
Source avec Zip Source avec une capture SUDOKU NIVEAU FACIL, MOYEN DIFFICILE (GOOGLE) PAS AU PLUS par cool2source
Source avec Zip MORPION MINI JEU PRIMITIVE ARTIFICIAL INTELLIGENCE par darkor

Commentaires et avis

Commentaire de BruNews le 14/05/2009 20:25:04 administrateur CS

Regarde celui ci:
http://www.cppfrance.com/codes/CHIFFRES-LETTRES-WIN32_11289.aspx

Commentaire de panini21 le 14/05/2009 22:00:51

@ BruNews
Joli.
Les deux code réalisent le même travail, mais de manière différentes. Mais dans ce cas, la récursivité est beaucoup plus rapide.

J'ai basé mon code sur l'idée de ne jamais avoir a refaire un calcul : calcul effectué une fois, stocké dans un conteneur set, puis réutilisable par un n½ud de l'arbre plus profond que le n½ud actuel.
De même, ton code ne refait pas 2 fois le même calcul, mais la manière dont sont stockés les calculs temporaires et relancés pour de nouveaux calcul sont terriblement plus efficace...

Je pense que le ralentissement vient du fait que je crée une multitude de conteneur ???

Jolie la manière pour garder une trace des résultats dans un tableau de char.


Commentaire de BruNews le 14/05/2009 23:49:21 administrateur CS

La création d'un conteneur (multitude de new et delete) et ensuite le parcours d'un conteneur (pointeur sur suivant et deref de ce pointeur) n'ont bien sur aucun rapport en terme de performances avec une structure linéaire en mémoire (tableau).
Il faut donc bien voir que ce n'est pas la récursivité qui donne les perfs de l'autre version, on peut même dire qu'on aurait pu les améliorer en virant toute récursivité mais ça aurait demandé un gros effort de codage.

Bien que n'ayant parcouru ton code qu'à peine en diagonale (le temps me manque), je tiens à préciser que tu as très bien fait de présenter cette version.

Commentaire de panini21 le 15/05/2009 16:21:53

Je me suis amusé a comparer les 2 codes :
je place un compteur quand on check le résultat actuel et la solution (a chaque fois qu'on fait un calcul en fait)
je place un chrono sur chaque code (entre debut et fin du calcul)

j'ai obtenu cet exemple, assez significatif...
exemple :
numbers : 8 9 6 10 100 7
number to find : 306

---------------------------------------------
        mon code :
325 calculs en 47 (millisecondes)
calculs :
   7 *  6 = 42
   42 -  8 = 34
   34 *  9 = 306


---------------------------------------------
        autre code :
7807 calculs en 0 (millisecondes)
calculs :
   8 + 9 = 17
   6 * 17 = 102
   10 - 7 = 3
   102 * 3 = 306


conclusion:
mon code résous le problème "mieux" (3 lignes contre 4 lignes)
mon code effectue moins de calculs aussi (300 contre 7000 ...)
Mais, il est 100 fois plus lent (47 contre 0)...

C'est la fête ...


Commentaire de panini21 le 15/05/2009 16:35:41

un autre pour la route :

    numbers : 4 2 5 7 9 100
    number to find : 564


---------------------------------------------
        mon code :
946 calculs en 94 (millisecondes)
calculs :
   7 +  4 = 11
   100 +  11 = 111
   111 *  5 = 555
   555 +  9 = 564

---------------------------------------------
        autre code :
51426 calculs en 16 (millisecondes)
calculs :
   4 * 2 = 8
   7 * 9 = 63
   5 - 63 = -58
   8 * -58 = -464
   100 - -464 = 564

Commentaire de clem0338 le 18/05/2009 10:03:48

Peut être une question idiote, mais les nombres négatifs sont valides (dernier cas) ????

Commentaire de panini21 le 18/05/2009 15:47:31

@clem0338
Dans le vrai jeu non, mais dans le code de aardman/BruNews ça peut arriver. Ça change pas grand chose...
J'ai fixé ce problème en mettant le plus grand chiffre à gauche dans les calculs, comme ça on a plus de chiffre négatif.

if (a>b)
{
   res1 = a - b;
   res2 = a + b;
   res3 = a * b;
   res4 = a / b; // plus test si la solution est un nombre entier...
}
else
{  
   res1 = b - a;
   res2 = b + a;
   res3 = b * a;
   res4 = b / a; // plus test si la solution est un nombre entier...
}

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Algorithme Jeu Vidéo Tétris [ par kiboumz ] Bonjour, je suis pr&#233;sentement aux &#233;tudes en programmation informatique et j'apprend le language C, l'assembleur et Vb.Net. Cependant les seu Algorithme d'un jeu de dames simplifié [ par PRUNE87 ] Bonjour, Je recherche l'algorithme (programme principal + fonction/procédure d'un jeu de dames simplifié dont voici la règle: "L'ordinateur demande algorithme de Huffman [ par amazyo ] Bonjour, SVP je cherche depuis une semaine 'Algorithme de HUFFMAN mais pour l'instant j'ai rien trouvé, s ke vous pouvez m'aider. je vous remercie d' Triangle de Pascal [ par choucroutes ] bonjour je débute en algorithme serait t il possible de m apporter quelque information sur cet exercice merci.< Demande d'aide pour un MMORPG [ par DavMiro0 ] Bonjour à tous ! Je viens vous demander votre aide. J'ai une team pour créer un petit MMORPG. Le seul hic c'est que je ne sais pas du tout l'architect tuto pour création de jeu 2D en c et avec winapi [ par dyroj ] boujour,je souhaite aprendre tous se qu'il y a à savoir sur le monde du 2D.donc si vous avez des tuto sur le mapping,scrolling ... en c et non c++ et JEU DE MOTUS [ par salwa87 ] slt , chui étudiante à l'ENIT é g besoin du code en programme c du jeux de motus. Pouvez vous m'aider ? je cherche un algorithme de l'indexation d'un texte [ par baster200x ] bonjour tout le monde, ben je cherche un algorithme qui fait l'indexation d'un texte par la méthode de "sac de mots".c-à-d : l'algorithme doit fournir algorithme et morphologie [ par dadou846 ] bonçoir à tous :j'ai une image en niveau de gris et je dois appliquer les opérateurs de la morphologie mais j'arrive pas a commencer,j'ai pas trouvé s


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
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 : 0,983 sec (4)

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