teaching:progappchim:algos_entiers

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révisionLes deux révisions suivantes
teaching:progappchim:algos_entiers [2015/04/20 08:29] villersdteaching:progappchim:algos_entiers [2015/04/20 10:04] villersd
Ligne 152: Ligne 152:
 Le PGCD est 42, obtenu par le produit des facteurs communs (soulignés), tandis que le PPCM est obtenu par le produit de tous les facteurs, en utilisant la puissance la plus grande (en gras). Tous les facteurs du tableau de décomposition, soit de la première colonne, soit de la seconde, sont tous utilisés. Par conséquent on a bien pour deux nombres a et b que PPCM(a,b) = a * b / PGCD(a,b) ! Le PGCD est 42, obtenu par le produit des facteurs communs (soulignés), tandis que le PPCM est obtenu par le produit de tous les facteurs, en utilisant la puissance la plus grande (en gras). Tous les facteurs du tableau de décomposition, soit de la première colonne, soit de la seconde, sont tous utilisés. Par conséquent on a bien pour deux nombres a et b que PPCM(a,b) = a * b / PGCD(a,b) !
  
-===== Problème du sac à dos ===== 
- 
-  * [[http://fr.wikipedia.org/wiki/Probl%C3%A8me_du_sac_%C3%A0_dos]] 
  
  
 ===== Problème des apéritifs ===== ===== Problème des apéritifs =====
 +
 +Énoncé en version "appliquée" :
 +
 +<blockquote>La carte des apéritifs propose un certain nombre d’éléments, à des prix différents. Quel assortiment puis-je acheter, coûtant exactement une certaine somme d’argent N ?</blockquote>
 +
 +Illustration :
 +{{ http://imgs.xkcd.com/comics/np_complete.png }}
 +
 +En chimie, un problème tout à fait équivalent consiste, en masses entières (donc en nombre de nucléons), à trouver une formule chimique incluant différents atomes d'éléments différents qui donnera une masse entière
 +donnée. En voici une solution :
 +
 +<sxh python; title : aperitif_initial-02.py>
 +#!/usr/bin/env python
 +# -*- coding: utf-8 -*-
 +"""
 +http://paternault.fr/informatique/jouets/aperitif.html
 +https://git.framasoft.org/spalax/jouets/blob/master/README.rst
 +https://wiki.python.org/moin/Generators
 +"""
 +
 +def aperitif(total, prix):
 +    """Solutions du problème des apéritifs.
 +     
 +    version sans itérateur 
 +
 +    :arg total int: Prix total à atteindre.
 +    :arg prix list: Liste des prix disponibles.
 +
 +    :return: liste des solutions, ces solutions étant des
 +             listes correspondant à ``prix``.
 +    """
 +    
 +    if len(prix) == 0:
 +        return []
 +    if len(prix) == 1:
 +        if total % prix[0] == 0:
 +            return [[int(total // prix[0])]]
 +    liste=[]
 +    for nombre in range(int((total // prix[0])+1)):
 +        for solution in aperitif(total - prix[0]*nombre, prix[1:]):
 +            liste.append([nombre] + solution)
 +    return liste
 +
 +atomes=[1,12,14,16,32]
 +# atomes=atomes[::-1]
 +masse=59
 +print atomes,type(atomes)
 +print masse, type(masse)
 +print aperitif(masse, atomes)
 +</sxh>
 +
 +
 +==== Références ====
   * [[http://xkcd.com/287/]]   * [[http://xkcd.com/287/]]
   * [[http://paternault.fr/informatique/jouets/aperitif.html]] et [[https://git.framasoft.org/spalax/jouets/blob/master/README.rst|ici]]   * [[http://paternault.fr/informatique/jouets/aperitif.html]] et [[https://git.framasoft.org/spalax/jouets/blob/master/README.rst|ici]]
Ligne 165: Ligne 215:
   * formules CHON(S)   * formules CHON(S)
   * protéines   * protéines
-  * spectro de masse ?+  * spectrométrie de masse (en masses entières) 
 + 
 +===== Problème du sac à dos ===== 
 +L’énoncé  de  ce  problème extrêmement difficile ([[http://fr.wikipedia.org/wiki/21_probl%C3%A8mes_NP-complets_de_Karp|un des problèmes de Karp]]) est par contre simple, faisant référence à un problème courant :  
 + 
 +<blockquote>Étant  donné  plusieurs  objets  possédant chacun  un  poids  et  une  valeur  et  étant  donné  un  poids  maximum  pour  le  sac,  quels  objets faut-il  mettre  dans  le  sac  de  manière  à  maximiser  la  valeur  totale  sans  dépasser  le  poids maximal autorisé pour le sac ?</blockquote> 
 + 
 +En voici une illustration (source wikimedia) : 
 +{{ http://upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Knapsack_greedy.svg/500px-Knapsack_greedy.svg.png }} 
 + 
 +Ce problème revêt une importance économique dans de nombreux secteurs tels que la découpe de matériaux (afin de minimiser les pertes) ou le chargement de cargaisons (avions, camions, bateaux,...). Un examen systématique des possibilités conduit à une explosion combinatoire du nombre de configurations à examiner ! 
 + 
 +Solutions en Python : 
 +  * [[http://rosettacode.org/wiki/Knapsack_problem/0-1|Rosetta code]], en force brute et programmation dynamique 
 +  * [[http://codereview.stackexchange.com/questions/20569/dynamic-programming-solution-to-knapsack-problem|codereview.stackexchange.com]], programmation dynamique 
 +  * [[http://www.markhneedham.com/blog/2013/01/07/knapsack-problem-python-vs-ruby/]] 
 + 
 +  * [[http://fr.wikipedia.org/wiki/Probl%C3%A8me_du_sac_%C3%A0_dos]] 
 +  * [[https://interstices.info/jcms/c_19213/le-probleme-du-sac-a-dos]] 
 + 
 + 
  
 ===== Références diverses ===== ===== Références diverses =====
  • teaching/progappchim/algos_entiers.txt
  • Dernière modification : 2023/01/10 09:04
  • de villersd