Avec son papa, ils ont alors pensé qu'il serait amusant de compléter cet exposé avec le calcul (simplifié) de la population des souris.
Voici les hypothèses:
- Chaque souris femelle donne, pour la première fois après 10 semaines, puis toutes les 6 semaines, naissance à 6 souriceaux (3 femelles et 3 mâles)
- Aucune souris ne meurt (l'espérance de vie d'uns souris est d'environ 2 ans)
- Toutes les souris ont tous des petits (c'est-à-dire toutes les femelles :-)).
- Nous commençons avec une seule souris femelle (-> Immaculée Conception :-))
Bonne chance!
Suite...
J'ai pour ma part résolu ce problème avec un petit programme Perl :
#!/usr/bin/perl
use strict;
my $INITIAL_POPULATION = 1; # Only Females!
my $GESTATION1 = 10; # GESTATION1 has to be
my $GESTATION2 = 6; # greater than GESTATION 2
my $FORK_M = 3;
my $FORK_F = 3;
my $MAX_WEEKS = 100;
my $population = $INITIAL_POPULATION; # Initial population
my @female = (map(0, (0..$GESTATION1 - 2)), $INITIAL_POPULATION);
foreach my $week (0..$MAX_WEEKS) {
printf ("%3i -> %20s\n", $week, $population);
my $x = $female[$week % $GESTATION1];
$population += $x*($FORK_M + $FORK_F);
$female[$week % $GESTATION1] = 0;
$female[($week + $GESTATION2) % $GESTATION1] += $x;
$female[($week + $GESTATION1) % $GESTATION1] += $x*$FORK_F;
}
Ce programme utilise peu de mémoire. En plus des constantes, il à besoin d'un "array" (@female) de 9 INTEGERS, et de 3 variables INTEGER : un compteur ($population), un itérateur ($week) et une variable temporaire ($x).
Voici à quoi doit ressembler le résultat
ReplyDelete> Nous commençons avec 1 souris (première génération)
population(0) = 1
population(1) = 1
...
population(9) = 1
> Premières naissances de la première génération
population(10) = 7
population(11) = 7
...
population(15) = 7
> deuxièmes naissances de la premières génération
population(16) = 13
...
population(19) = 13
> premières naissances de la deuxième génération
population(20) = 31
population(21) = 31
...
J'ai fait une petite pause dans la préparation de mon examen de mardi. Voici ce que ça a donné :
ReplyDeletehttp://www.seuret.com/divers/souris_smilla.pdf
C'est marrant comme petit problème :)
Merci Mathias pour ta solution. Elle est vraiment très élégante. Je pense juste qu'il y a un petit bug dans l'addition finale. Le résultat correct est "4423" et non "4223"... mais je pense qu'il s'agit simplement d'une faute de frappe.
ReplyDelete