IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème de complexité d'un algorithme [Python 2.X]


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Problème de complexité d'un algorithme
    Bonjour,

    bien que je ne connaisse très peu python et même plus généralement la programmation (j'ai suivi un semestre à la fac au cours d'une licence de mathématiques), je me suis mis dans l'idée d'écrire un programme.
    J'imagine que presque tout le monde connaît les règles du poker mais si ce n'est pas le cas demandez-moi et je vous apporterai toutes les précisions nécessaires.
    Je vous joins le programme que j'ai écrit.
    J'ai donc voulu écrire une fonction sous python qui, si on lui donne notre main (constituée de deux cartes) et celle de l'adversaire nous renvoie le pourcentage de chance que l'on a de gagner, le pourcentage de chance de match nul ainsi que le pourcentage de chance de perdre à la fin du coup si on joue tout son tapis avant le flop.
    J'ai pour ça créer plein de fonctions qui définissent si on a réussi à former une main ou pas sur un tableau de 5 cartes donné puis une fonction pour savoir quel jeu l'emporte sur un tableau donné et finalement, la fonction qui réalise ce que je cherche, c'est-à-dire qui donne les pourcentages de gain, match nul et perte.
    Pour cela j'ai fait compter à python le nombre de victoire, match nuls et défaites sur toutes les combinaisons de 5 cartes possibles en enlevant les carte des mains des joueurs. Il y en a donc 5 parmi 48 c'est à dire 1712304 combinaisons.
    Ne sachant pas calculer la complexité d'un algorithme je n'ai aucune idée du temps que peut mettre mon ordinateur pour fournir la réponse. Bref, quand j'ai lancé le programme, mon ordinateur s'est mis à faire un bruit d'avion, j'imagine qu'il a mis les ventilos en plein régime, et au bout de 15 secondes j'ai stoppé le programme car je m'inquiétais pour le PC, je viens juste de l'acheter et je n'aimerais pas qu'il lui arrive quelque chose ^^.
    Premièrement je voudrais savoir s'il est possible que mon PC soit endommagé si le processeur chauffe trop ou quelque chose comme ça. Deuxièmement je voudrais que vous m'excusiez si ma première question est idiote ! Bref, est-ce que je peux lancer le programme sans craintes et attendre 30min-1h voir s'il me donne une réponse ?
    Et sinon j'aimerais savoir s'il est possible de calculer la complexité de l'algorithme que j'ai créer, est-ce que c'est long à étudier sachant que j'ai de solides bases mathématiques et très peu de connaissances en informatique (je suis en master 1 de maths). Pendant ce temps je vais essayer d'optimiser les fonctions que j'ai écrites, j'imagine que l'on peut réduire le coût en opérations facilement et que mes fonctions sont mal écrites.
    Ah et au cas où ça serve mon processeur est un intel core i7-4700MQ CPU @2,4GHz.

    Merci à ceux qui ce sont lancés dans la lecture de ce paragraphe indigeste !
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Concernant ta question à propos de ton ordi, il faudrait que tu nous en dises plus. Son type (portable/bureau), sa mémoire, nombre de processeurs, etc. Pour un ordi récent, 1712304 éléments à traiter ne sont absolument pas un soucis. Peut-être que les ventilos se sont mis en marche pour éviter au processeur de chauffer mais tu peux laisser ton ordi calculer pendant quelques minutes sans crainte. A la limite c'est plus les ventilateurs qui risquent que l'ordi. Ceci dit, t'as des outils de surveillance température qui existent.

    Concernant ton programme, et surtout Python, il te faut savoir qu'il existe des tas de librairies gratuites qui te permettent plein de trucs. Un gros avantage à utiliser ces librairies c'est que certaines sont écrites dans des langages rapides (C/C++) tout en restant utilisables dans Python. Va voir là-bas s'il n'y aurait pas ton bonheur (je pense surtout à NumPy).

    Concernant la complexité de l'algo, celle-ci se calcule surtout au nombre d'itératons qu'on doit faire pour traiter un tableau de n éléments. Si une boucle suffit, on dira que la complexité est de "n" (chaque élément est traité une fois donc tu as "n" traitements). Si maintenant pour un élément du tableau tu dois traiter tous les autres, alors ta complexité est en n² (chaque élément est traité n fois donc tu as n² traitements). J'ai pas encore regardé ton code mais si tu évalues 1712304 possibilités pour chaque carte sortie, alors tu as un algo de type n² (on garde le terme même quand les cardinaux des deux ensembles traités n'est pas le même). Mais même un n² n'est pas forcément mauvais tant que tu sais ce que ça implique...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse !!
    J'ai donc lancé le calcul et après avoir corrigé quelques problèmes dans mes algorithmes, tout marche et donne les bons résultats. Cependant il met entre 8 et 16min pour trouver un résultat...
    Je vais donc m'intéresser à ce que tu m'as dit, NumPy, et essayer d'optimiser mes algorithmes pour que le temps de réponse soit plus court.
    Merci encore pour ton aide et aussi pour ton explication sur la complexité !
    Je posterai à nouveau si j'ai du mal à optimiser.
    Bonne soirée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Complexité de l'algorithme de multiplication matricielle de strassen
    Par judge06 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 09/07/2007, 07h27
  2. Complexité de l'algorithme de multiplication de Karatsuba
    Par judge06 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 27/03/2007, 12h02
  3. Complexité de l'algorithme de Tri Fusion
    Par judge06 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 26/03/2007, 22h04
  4. [Complexité d'un algorithme] Triangle de Sierpinski
    Par Opérateur dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 18/12/2006, 15h25
  5. complexité d'un algorithme par un...algorithme??
    Par afrikha dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 02/11/2005, 00h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo