====== Suite du feu de forêt ======
Il s'agit d'une suite numérique dont la représentation graphique évoque un panache de fumée au-dessus d'un incendie, d'où le nom.
===== Définition mathématique =====
$\left(u_n\right)_{n\geq 0}$ dont les valeurs sont toutes dans dans $\mathbb{N}$.
Pour chaque valeur de $u_n$ on choisit la valeur la plus petite pour que, pour $1 \geq k \geq \frac{n}{2}$, $u_n$ ne soit jamais en progression arithmétique avec $u_{n-2k}$ et $u_{n-k}$.
===== Calcul des premiers termes =====
Bon... dit comme ça c'est très abstrait alors construisons les premiers termes pour comprendre.
Pour $u_0$ et $u_1$ on peut choisir $0$ sans contrainte. C'est à partir de $u_2$ que la contrainte commence à se poser.
**Calcul de $u_2$**
La contrainte exclut des valeurs. La contrainte s'exprime pour tous les $1 \geq k \geq \frac{n}{2}$. Donc ici, on seulement $k=1$.
Pour chaque valeur de $k$, il faut envisager $u_{n-2k}$ et $u_{n-k}$ et exclure le terme suivant...
* avec $k = 1$ on regarde $u_{2-2\times 1} = 0$ et $u_{2- 1} = 0$. 0, 0, ... $u_2$ ne pourra pas être égal à 0.
//En effet, si $u_2$ était égal à 0, cela ferait 0, 0, 0 ce qui serait une progression arithmétique (+ 0 à chaque fois)//
C'était la seule contrainte. On doit choisir pour $u_2$ le plus petit entier acceptable. Donc $u_2 = 1$.
**Calcul de $u_3$**
Là encore, on a seulement $k = 1$.
* $k = 1$ : $u_{3-2\times 1} = 0$ et $u_{3- 1} = 1$. 0, 1, ... $u_3$ ne pourra pas être égal à 2.
//En effet, si $u_3$ était égal à 2, cela ferait 0, 1, 2 ce qui serait une progression arithmétique (+ 1 à chaque fois)//
On doit choisir $u_3 = 0$
**Calcul de $u_4$**
* $k = 1$ : $u_{4-2\times 1} = 1$ et $u_{4- 1} = 0$. 1, 0, ... $u_4$ ne pourra pas être égal à -1.
* $k = 2$ : $u_{4-2\times 2} = 0$ et $u_{4- 2} = 1$. 0, 1, ... $u_4$ ne pourra pas être égal à 2.
On doit choisir $u_4 = 0$
**Calcul de $u_5$**
* $k = 1$ : $u_{5-2\times 1} = 0$ et $u_{5- 1} = 0$. $\Rightarrow$ 0 exclu.
* $k = 2$ : $u_{5-2\times 2} = 0$ et $u_{5- 2} = 0$. $\Rightarrow$ 0 exclu.
$u_5 = 1$
**Calcul de $u_6$**
* $k = 1$ : $u_{6-2\times 1} = 0$ et $u_{6- 1} = 1$. $\Rightarrow$ 2 exclu.
* $k = 2$ : $u_{6-2\times 2} = 1$ et $u_{6- 2} = 0$. $\Rightarrow$ -1 exclu.
* $k = 3$ : $u_{6-2\times 3} = 0$ et $u_{6- 3} = 0$. $\Rightarrow$ 0 exclu.
$u_6 = 1$
**Calcul de $u_7$**
* $k = 1$ : $u_{7-2\times 1} = 1$ et $u_{7- 1} = 1$. $\Rightarrow$ 1 exclu.
* $k = 2$ : $u_{7-2\times 2} = 0$ et $u_{7- 2} = 1$. $\Rightarrow$ 2 exclu.
* $k = 3$ : $u_{7-2\times 3} = 0$ et $u_{7- 3} = 0$. $\Rightarrow$ 0 exclu.
$u_7 = 3$
etc.
===== Observations =====
Comme vous le constatez, on commence par faire une liste de valeurs exclues puis on prend le petit entier positif qui n'est pas exclu.
On voit que pour $u_n$ on a $n \div 2$ contraintes, ce qui va exclure au pire $n \div 2$ entiers différents. Donc il suffit de chercher de $0$ à $n \div 2$ compris pour trouver le plus entier qui n'est pas exclu.
Dit autrement, on est certain que $u_n \leq n \div 2$.
===== Implémentation =====
Vous allez pouvoir procéder ainsi :
* On se fixe un nombre ''N'' de termes à calculer. Par exemple ''N = 100'' dans un premier temps et quand on est sûr que cela fonctionne bien, on peut passer à ''N = 10000'' (temps de calcul beaucoup plus long !)
* La suite sera stockée dans une liste ''u''. On pourra initialiser ''u = [0, 0]'' pour les deux premiers termes.
* Pour chaque nouveau terme, on commence par produire la liste des exclus. Puis on cherche le plus petit entier qui n'est pas exclu. Enfin on ajoute ce résultat à la suite de ''u''
Quand on a ''u'', il faut l'afficher :
import matplotlib.pyplot as plt
plt.plot(u, 'o') # 'o' pour n'afficher que des points non reliés
plt.show()