• Aucun résultat trouvé

Le nombre de caractères de ce triangle sera donc de n+n−1 +n−2

N/A
N/A
Protected

Academic year: 2022

Partager "Le nombre de caractères de ce triangle sera donc de n+n−1 +n−2"

Copied!
10
0
0

Texte intégral

(1)

.E545 1 .

Soitmla première suite d’un triangle de Steinhauss de taillen. Le nombre de caractères de ce triangle sera donc de n+n−1 +n−2... Soit de n(n+1)2 . Or

n(n+1)

2 est pair uniquement pour les entiers de la forme 4x+ 3 et 4xavecx∈N. Ainsi dans l’intervalleJ2; 20K, les seuls entiers permettant de construire un tri- angle de Steinhauss sont les entiers: {3; 4; 7; 8; 11; 12; 15; 16; 19; 20}.

- pourn= 3→011 - pourn= 4→1101 - pourn= 7→1000011 - pourn= 8→00000110 - pourn= 11→00000011010 - pourn= 12→100111101011 - pourn= 15→111001000101111 - pourn= 16→1111101101101011 - pourn= 19→0110111110111101111 - pourn= 20→11011111011110111110

2 .

On sait que les seuls entiers permettant de construire des triangles de Stein- hauss sont les entiers de la forme 4x+ 3 et 4xavecx∈Nsoit pour tout entier n≡0 (mod 4) ou n ≡3 (mod 4). Prouvons maintenant que pour ces entiers il existe toujours au moins un triangle équilatéralABC qui est un triangle de Steinhauss.

Notonsm={ξ1, ..., ξn−1, ξn−2, ξn}une suite de taillend’un triangle, tel que lesξiavec 1≤insont des entiers∈J0; 1K. On noteramj avec 1≤jn−1 une sous suite de ce triangle.

Etablissons deux lemmes qui vont par la suite permettre d’étudier la première suitem d’un triangle de Steinhauss.

Lemme 1.0 : Si les ξi = 0 d’une suite m de taille n deviennent des 1 et si lesξi = 1 deviennent des 0 alors le triangle conservera les mêmes sous-suites mn−1, mn−2, ...

On démontre ce résultat immédiatement en procédant à l’étude de couplets (ξi;ξi+1). Si l’on échange les 0 et les 1 alors à la place de (0; 0) on obtiendra (1; 1), à la place de (0; 1) on obtiendra (1; 0)... Ainsi puisque ces différents cou- plets forment le même chiffre on en déduit que la suitemn−1sera la même pour ces deux triangles. Ainsi par extension toutes les sous-suites seront égales.

Etudions maintenant le nombre de chiffres 1 dans un triangle de Steinhauss ABC.

(2)

Lemme 1.1 : Si tout lesξi d’une suitemsont égaux à 1 ou à 0 alors les sous- suitesmj ne seront composées que de 1.

Tout couplet (ξi;ξi+1) formera le chiffre 1, ainsi toutes les sous suites seront composées de chiffres 1.

Si l’on étudie le nombre de chiffres 1 dans un triangle de Steinhauss, on en déduit de la lemme 1.1 qu’il faut minimiser l’apparition de 1 ou de 0 adjacents dans une suitemafin de minimiser l’apparition de chiffres 1 dans un triangle de Steinhauss. Par exemple considérons une suite de taillen= 12 telle que 5ξi= 1 et 7ξi= 0. Si l’on veut minimiser le nombre de 1 dans le triangle il faut min- imiser la quantité de couplets (ξi= 1;ξi+1= 1) et de couplets (ξi= 0;ξi+1= 0) dans la suitem. Ainsi on peut construire la suite msuivante : 010010010011.

A l’inverse si l’on veut maximiser le nombre de chiffres 1 dans le triangle on peut construire la suite m suivante : 111110000000. On notera de même qu’

il faut minimiser l’apparition de couplets adjacents (ξi = 0;ξi+1 = 1) dans la construction d’une suitem puisque alors la sous-suitemn−1 ne sera composée que de 0, et alors la suitemne permettra pas de minimiser le nombre de chiffre 1 dans le triangleABC.

Ainsi on donne une méthode de construction (se basant sur la minimisation de sous triangles équilatérauxA0B0C0 composés uniquement de chiffres 1), d’une suite m permettant de construire un triangle ABC dans lequel le nombre de chiffres 1 est minimal.

Appellonsk ={ξ1, ..., ξn−1, ξn−2, ξn} la plus grande sous-chaîne de la suitem composée uniquement de chiffres 0 ou de chiffres 1.

D’après ce qui a été dit précedemment on déduit :

Lemme 1.2 : Si l’on veut minimiser le nombre de chiffres 1 dans un triangle de Steinhauss ABC il faut construire la suite m telle que k soit le plus petit possible et telle quek≥2.

Lemme 1.3 : Si l’on veut maximiser le nombre de chiffres 1 dans un triangle de SteinhaussABC il faut construire la suite m telle quek soit le plus grand possible ou bien en ayant un maximum de couplets adjacents (ξi= 0;ξi+1= 1) De ces deux lemmes on peut construire pour toutnune suitemqui permettra de minimiser le nombre de chiffres 1.

ξi+1=

0 sii6≡ −1 (mod 3) 1 sii≡ −1 (mod 3)

Par exemple pour n = 4 on obtient la suite m = {0,0,1,0}, pour n = 5 on obtient la suitem={0,0,1,0,0}.

On cherche à restreindre notre cadre d’étude, ainsi on cherche le nombre de chiffres 1 du triangleABC qui a pour base cette suitem. L’étude est facile du fait que cette suite est périodique, et il en sera de même des suitesmn−1, mn−2....

Nous n’exposerons pas la démonstration qui permet de trouver la formule qui donne le nombre 1 de ces triangles car elle est longue et fastidieuse. L’idée consiste simplement à séparer l’étude en trois parties : les entiers de la forme

(3)

4x+ 3 (la suite se termine alors par 010), les entiers de la forme 3x+ 2 (la suite se termine alors par 00) et les entiers de la forme 3x(la suite se termine alors par 1). Puis l’on étudie la périodicité des sous-suites et on trouve finalement les formules (au nombre de 3, pour chaque entier) : (les formules ont en paramètre le nombre de chiffres 1 de la suitem, notons ce nombrer, pour les entiers de la forme 4x+ 3 on a r=x−1, pour les entiers de la forme 3x+ 2 on r=x et pour les entiers de la forme 3xon ar=x) :

- pour les entiers de la forme 4x+ 3 : 3r(r+1)2

- pour les entiers de la forme 3x+ 2 : 3r(r+1)2 +r+ 1 - pour les entiers de la forme 3r(r−1)2 + 2r

Notonsf(n) la fonction qui associe une de ces trois valeurs suivant la forme de n. Par exemplef(3) = 2.

La construction d’une suitemmaximisant le nombre de chiffres 1 dans un tri- angleABC pour un entiern donné est simple : il suffit que la suitem ne soit composé uniquement de 1. On déduit directement que le nombre de chiffres 1 dans le triangleABC sera alors de n(n+1)2 .

Ainsi on a restreint notre cadre d’étude, en disant que tout triangle de taille ngénérera un nombre de chiffre 1 dans Jf(n);n(n+1)2 K. Intéressons nous donc maintenant aux triangles dans Jf(n);n(n+1)2 K tel que le nombre de chiffres 1 dans ces triangles soient inférieurs à (n+1)(n+2)4 . (** voir page 5).

On rappelle que le nombre de suite m de taille n et composée de x fois le chiffre 1 sont au nombre de : nx

. Ainsi si l’on prouve qu’au moins une de ces suites correspond à l’un des triangles de taille n(n+1)4x ou n(n+1)4n+x (d’après la lemme 1.0) alors on prouve l’existence d’un triangle de Steinhauss.

Ainsi si dansJf(n−1);n(n−1)2 Kon notex1le nombre de triangles composés de

n(n+1)

4 −xfois le chiffre 1 etx2le nombre de triangles composés de n(n+1)4 −n+x fois le chiffre 1 alors si l’inégalité : 2nx1−x2< nx

est vérifiée alors cela veut dire qu’il existe au moins un triangle de Steinhauss pourn.

Nous allons procéder par élimination des suites pour ainsi prouver qu’il existe au moins une suite avecxfois le chiffre 1 qui correspond à l’un des triangles de taille n(n+1)4n+xet n(n+1)4x.

Etudions le nombre de chiffres 1 d’une suite de taillemn−1 à partir de la con- naissance du nombre de chiffre 1 dans la suitem.

On notera d’après la lemme 1.0 que les suites comportant x fois le chiffre 1 généreront les mêmes suitesmn−1que les suites comportantnxfois le chiffre 1. Ainsi pour un entierndonné on a seulement [n/2] cas à étudier. Les lemmes vues précedemment et donc les "stratégies" de construction d’une suitem(min- imisation et optimisation) s’appliquent directement sur l’étude qui va s’ensuivre.

Pour minimiser le nombre de chiffre 1 de la sous-suitemn−1il faut que la suite msoit composée d’un maximum de couplets de la forme (ξi = 0;ξi+1= 1) et sa permutation. C’est pourquoi pour toutnon peut déjà établir que pourx= 1 le nombre de 0 maximal de la sous-suitemn−1peut-être au maximum de 2. Donc le minimum de chiffres 1 sera den−2. Le nombre maximum de 1 formé pour la

(4)

sous-suitemn−1sera pour toutx∈J1;n−1Kden−1 (il suffit de former le maxi- mum de couplets de la forme (ξi= 1;ξi+1= 1) ou de la forme (ξi= 0;ξi+1= 0).

A l’inverse pour les valeursx= 0 et x= 1 (en appliquant cette "stratégie") on ne trouvera aucun coupleξi= 0;ξi+1= 1 (et ses permutations) alors le nombre de chiffres 1 de la suitemn−1 sera den.

De même si une suitem permet de générer une suitemn−1comportanty1 fois le chiffre 1 et une autre suite mn−1 comportant y2 fois le chiffre 1 alors elle peut générer une suitemn−1 comportant un nombre de chiffre 1 dansJy1;y2K. Pour s’en rendre compte il suffit de se dire qu’il suffit de changer les couplets (ξi= 0;ξi+1= 1) (ou sa permutation) en couplet de la forme (ξi= 0;ξi+1= 0) ou (ξi= 1;ξi+1= 1).

On prouve de façon similaire qu’une suitemcomportantxfois le chiffre 1 avec x∈J1; [n/2]Kgénèrera une suitemn−1comportant un nombre de chiffres 1 dans Jn−1−2x;n−2Kpournimpair et pournpair dansJn−1−2x;n−2K. Ces différentes études permettent d’affirmer qu’il existe bien un triangle de Steinhauss pour n = 4x+ 3 ou n = 4x puisqu’il suffit de considérer les tri- angles de Steinhauss dans Jf(n);n(n+1)2 K ayant un nombre de chiffres 1 dans J

n(n+1)

4n+ 1;n(n+1)4 Kcar si l’on considère l’ensemble des triangles composés d’un nombre w de chiffres 1 avec w ≤ [n2] et qu’il n’existe aucune suite m qui corresponde à un de ces triangles tel que le triangle formé soit un triangle de Steinhauss (soit lorsque le nombre de chiffres 1 de m est de n(n+1)4w) alors par souci de minimalité cela est impossible, donc il existe au moins un triangle de Steinhauss. Effectivement (voir plus haut) cela supposerait pour ces triangles qu’il existe seulement [n(n+1)8 −2w] + 1 suites avec un nombre de chiffres 1 différents pour former l’ensemble des triangles avec w chiffres 1 (et telle que la suite mn−1 soit composée d’un nombre de chiffres 1 dans : J

n(n+1)

2 −2w−2;n(n+1)2 −2w−1K), ce qui est peu. Ainsi dans tous les cas la suitem composé de n(n+1)4wcorrespond à l’un de ces triangles.

Par exemple pourn= 10 intéressons nous aux triangles comportant un nombre de chiffres 1 dansJ28; 32K, on a [112] = 5 choix possibles :

- (1). les triangles ayant 28 chiffres 1 - (2). les triangles ayant 29 chiffres 1 - (3). les triangles ayant 30 chiffres 1 - (4). les triangles ayant 31 chiffres 1 - (5). les triangles ayant 32 chiffres 1

Dans le cas (1) on cherchem telle msoit composée de 5 chiffres 1, ..., dans le cas (5) on cherchemtelle quemsoit composée de 1 chiffre 1.

Comme dit plus haut intéressons nous aux suites m10 qui ont un nombre de chiffres 1 dans . Dans le cas numéro (3) par exemple on peut citer : m = 111100001,m= 0101011001, .... Or puisque pour former ces suites qui ont donc un nombre de chiffres 1 dans l’intervalleJ4; 5K, il faut des suitesm11composées d’un nombre de chiffres 1 égal à 5, 4, 3. Or si l’on suppose qu’aucune suitem10

(nous sommes toujours dans le cas (3) ) ne peut être formée par une suitem11 avec 3 chiffres 1 alors cela suppose que seulement deux suites m11 composées d’un nombre de chiffres 1 différents pourraient former toutes les suitesm10com-

(5)

posées de 3 chiffres 1 ! Ce qui est impossible. Ainsi il existe au moins une suite m11 composée de trois chiffres, soit plus exactement au moins un triangle de Steinhauss. On peut en donner un exemple : m= 10000001010.

Ainsi ce qui a été exposé précedemment suppose que pour un entiern−1 il ex- iste parmi les triangles dont le nombre de chiffres 1 est dansJ

n(n+1)

4 −n;n(n+1)4 K au moins une suitemn−1 composée d’un nombre de chiffres 1 dans (voir plus haut) soit dans le cas (3) de l’exemple.

Ainsi cela prouve qu’il existe un triangle de Steinhauss pour les entiersn de la forme 4x+ 3 et 4x.

(**) On peut se demander ce qui justifie la présence de triangles dont le nombre de chiffres 1 est dansJ

n(n+1)

4n;n(n+1)4 K. D’après les stratégies d’optimisation et de minimisation vues précedemment on peut tout d’abord dire que plus le nombre de chiffres 1 de la suitemse rapproche du nombre [n2] plus le nombre de triangles ayant un nombre de chiffres 1 proche de la médiane deJf(n);n(n+1)2 K sera important (effectivement les suites ne prendront pas de valeurs extrêmes et il est alors possible "d’équilibrer" la taille des sous-chaînes. Or nx

est plus grand lorsque x se rapproche de [n2]. Justifiant ainsi l’apparition de plus de triangles proches de la médiane.

Les programmes majeurs ayant aidés à cette démonstration sont les programmes suivants :

- un programme affichant pour un entierntoutes les suites générant un triangle de Steinhauss.(1)

(6)

1 #include<iostream>

2 #include<algorithm>

3 #include<string>

4

5 using namespace std;

6 void avancement(unsigned int &a, string &m, unsigned int &n)

7 {

8 m = "";

9 for(size_t i = 0;i<n;++i)

10 {

11 if(i<a){m+=’1’;}else{m+=’0’;}

12 }

13 }

14 void striangle(unsigned int &a, string &m, unsigned int &n, unsigned int

&s)

15 {

16 unsigned copie = a;

17 unsigned int o = n;

18 string copii = m;

19 while(o!=1){

20 for(size_t i = 0;i<o-1;++i)

21 {

22 if(copii[i] == copii[i+1]){copii[i] = ’1’;copie++;}else{copii[i]

= ’0’;}

23 }

24 o-=1;}

25 if(copie == n*(n+1)/2-copie){cout<<m<<endl;s++;}

26 }

27 void permutation(unsigned int &a, string &m, unsigned int &n, unsigned int &s)

28 {

29 for(a = 0;a<n+1;++a)

30 {

31 avancement(a, m, n);

32 sort(m.begin(), m.end());

33 do{

34 striangle(a, m, n, s);

35 }while(next_permutation(m.begin(), m.end()));

36 }

37 }

38 int main()

39 {

40 unsigned int a(0);

41 unsigned int n(0);

42 unsigned int s(0);

43 string m("");

44 cin>>n;

45 permutation(a, m, n, s);

46 cout<<"Le nombre de triangles de Steinhauss pour : N = "<<n<<" est de

"<<s<<endl;

(7)

- un programme qui demande une suite à l’utilisateur et par la suite dessine le triangle en indiquant le nombre de 1 dans celui-ci : (2)

1 #include<iostream>

2 #include<string>

3 #include<vector>

4 using namespace std;

5 string space(string &m, size_t &a, const size_t u)

6 {

7 string mm("");

8 for(int k = 0;k<u-a;++k){mm+=" ";}

9 for(int j = 0;j<m.size();++j){mm+=m[j];mm+=" ";}

10 return mm;

11 }

12

13 int main()

14 {

15 string m("");

16 string mm("");

17 unsigned int un(0);

18 cin>>m;

19 for(int o = 0;o<m.size();++o){if(m[o] == ’1’){un++;}}

20 vector<string>triangle;

21 size_t a = m.size();

22 const size_t u = m.size();

23 mm = space(m, a, u);

24 triangle.push_back(mm);

25 while(a != 1)

26 {

27 for(size_t i = 0;i<m.size()-1;++i)

28 {

29 if(m[i] == m[i+1]){m[i] = ’1’;un++;}else{m[i] = ’0’;}

30 }

31 a-=1;

32 m.erase(m.begin() + a);

33 mm = space(m, a, u);

34 triangle.push_back(mm);

35 }

36 for(int j = triangle.size()-1;j>-1;--j)

37 {

38 cout<<triangle[j]<<endl;

39 }

40 cout<<"Le chiffre 1 apparait : "<<un<<" fois."<<endl;

41 cout<<"L\’entier n choisit etait de : "<<u<<"."<<endl;

42 return 0;

43 }

(8)

3 .

Si l’on utilise le programme numéro 1 (voir plus haut) on obtient suivantndes valeurskdu nombre de triangles de Steinhauss différentes :

n= 16 : k= 5160 n= 20 : k= 59984 ...

On observe la grande quantité pour un entiernde suitesmqui donne un triangle de Steinhauss. On a : [log25160] = 12 et [log259984] = 15... Cela permet di- rectement de déduire un algorithme qui permettrait pour de grandes valeurs de nde trouver en temps polynomial une suitempermettant la construction d’un triangle de Steinhauss. Effectivement puisqu’on a les inégalités : 212<5160 et 215<59984, on déduit que toutes les suites den= 12 permettent de construire des triangles de Steinhauss pourn = 16... Ainsi le nombre de cas a testé est bien plus faible, tandis que le programme qui avait été présenté dans la partie 2 aurait testé un grand nombre de possibilités. Par exemple pour n = 240 il aurait testé 2240 possibilités ce qui est bien trop élevé. De ce qui a été déduit précedemment on en déduit directement le programme suivant :

(9)

1 #include<iostream>

2 #include<string>

3 #include<algorithm>

4

5 using namespace std;

6 string nextl(string m, const size_t n)

7 {

8 string mm("");

9 if(m[0] == ’0’){mm+="01";}else{mm="11";}

10 for(size_t i = 1;i<n-1;++i){if(m[i] == ’0’){if(mm[i-1] == ’1’){mm+=’0

’;}else{mm+=’1’;}}if(m[i] == ’1’){if(mm[i-1]== ’0’){mm+=’0’;}else

{mm+=’1’;}}}

11 return mm;

12 }

13 string inverse(string m, const size_t n)

14 {

15 string mm("");

16 for(size_t i = 0;i<n;++i){if(m[i] ==’0’){mm+=’1’;}else{mm+=’0’;}}

17 return mm;

18 }

19 size_t nu(string m, size_t n)

20 {

21 size_t u(0);

22 while(n!=1){for(size_t i = 0;i<n-1;++i){if(m[i] == m[i+1]){m[i] = ’1’

;u++;}else{m[i] = ’0’;}}n-=1;}

23 return u;

24 }

25 int main()

26 {

27 const size_t p(4);

28 string m("111111010110110111011011000000");

29 const size_t n = m.size()+p;

30 vector<string>all;

31 all.push_back(m);

32 vector<string>allc;

33 for(int i = 0;i<p;++i)

34 {

35 for(int y = 0;y<all.size();++y)

36 {

37 m = nextl(all[y],n);

38 allc.push_back(m);

39 m = inverse(m,n);

40 allc.push_back(m);

41 }

42 all.clear();

43 all = allc;

44 allc.clear();

45 }

46 size_t u(0);

47 for(int i = 0;i<all.size();++i)

48 {

49 u = 0;

50 for(size_t y = 0;y<n;++y){if(all[i][y] == ’1’){u++;}}

51 if(nu(all[i],n) + u == n*(n+1)/4){cout<<all[i]<<endl;}

52

53 }

9

(10)

Décrivons tout d’abord les différentes fonctions qui composent ce programme : - la fonction nextl qui génère tout simplement la suitemn+1 d’une suite.

- la fonction inverse qui a pour but d’inverser les valeurs desξi d’une suitem.

Cette fonction est très utile car à partir d’une suitemil existe deux suitesmn+1

différentes (voir lemme 1.0)

- la fonction nu qui renvoie le nombre de chiffres 1 dans la suiteminitiale.

Ensuite on créait une valeur constante qui correspond à la profondeur (par ex- emple pourn= 16 on prendp= 4 car on utilisera une suitemde taille 12). On enregistre dans un string une suitem aléatoirement prise de taillenp. Puis on enregistre dans un vector toutes les suites de taillen que génère cette suite de taillenp. Puis on teste si les suites dans le vector permettent de créer un triangle de Steinhauss de taillen. Si c’est le cas on affiche la suite et on arrête le programme.

On notera que les performances de ce programme pourrait être améliorées al- gorithmiquement, par exemple l’ulisation de deux vectors n’est pas obligatoire- ment utile et de même il n’est pas forcément utile d’enregistrer toutes les suites men mémoire, car cela peut par la suite provoquer des problèmes comme par exemple pour une valeurp= 22, le programme envoie une erreur bad alloc du à un problème de mémoire.

Néanmoins cela est largement suffisant pour battre le record, on obtient pour une profondeurp= 18 et pour une suitemde taille 222 : la suitem= 240 permet-

tant de créer un triangle de Steinhauss suivante :m= 10101010110100011000001101011111010000000011101000011000110001000110001100011001 00001101000010110110001100110010100100001001011011110011000101000000010111001001

01000001001001100011010010010101101100010010010010001101010011000110100000100110 . Le programme trouve cette suite en 13.314s. On peut ainsi battre le record

sans trop de difficulté en proposant par exemple une suitemde taillen= 272 avecp= 20 :

m= 10101000111110011001111001011100011010011100101000100101011011010001110011111010 00110111010111011011110101001010101000110101101001001010100101000101100111100100 10111101010001110111011011000001110100010011101000011001111001111100100000100001 10010000001010100100000100111010

Il est permis pour le plaisir des yeux d’afficher une suitem de taille n= 300 trouvée par le programme avecp= 20 :

m= 11110001110110100101101011000110001100001110100111100001111101110100000110110000 10000101000101111110010101000110010100011110101000001001101110001110011001100010 10000011101000001011101001111010000010010110010110111111110110110011100101000100 101110100100110101011111000010111101000101100010001110010100.

N.B : Une autre piste intéressante que l’on n’a pas explorée est l’étude des suites de Steinhauss commençant par un nombre de chiffres 1 importants. Par exemple pour n = 20 on peut trouver : m = 11111111001001001000. Et on remarque "l’équilibre qui se créait dans cette suite, puisqu’on n’y retrouve les suites d’optimisation et de minimisation vuent précedemment. Ainsi en étudiant ces suites il est fort probable que l’on puisse de même construire un algorithme performant permettant de générer des suitesmpour un entierndonné.

Pellicer Simon

Références

Documents relatifs

The IIR Level 2 data products include cloud effective emis- sivities and cloud microphysical properties such as effective diameter and ice or liquid water path estimates..

We present a linear clustering model of cosmic infrared background (CIB) anisotropies at large scales that is used to measure the cosmic star formation rate density up to redshift

Our present SERRS sandwich-hybridization assay is based on the specific hybridiza- tion of two nucleic probes to target DNA to be detected in solution (Figure 1).. The nucleic

Simulating nitrogen budgets in complex farming systems using INCA: calibration and scenario analyses for the Kervidy catchment but, in terms of nitrate flux, the result is almost

Ozone vertical profiles derived from nadir mea- surements of the GOME instrument on board the ERS-2 satellite, by means of the FURM algorithm of the Univer- sity of Bremen,

In this case we can expect variation of the energetic particle source amplitude (which is proportional to the electron density in a cloud), pitch-angle anisotropy, and

A surprising result was that for pulsation signals away from the local ®eld line resonance (FLR) frequency the phase of the ionospheric Doppler oscillations was found to

Correlation coecient between CUTLASS ®rst range returns and EISCAT electron density at 235 km, introducing a time delay in the CUTLASS data proportional to the distance from