Chapitre 6. Programmation en R
255
+ return(combmat)
+ }
Nous proposons ci-apr` es deux codes C/C++ et deux codes Fortran permettant de r´ ealiser la mˆ eme op´ eration, mais dans un d´ elai beaucoup plus court.
• Cr´ eation de la fonction C/C++
Code C++ de la fonction combnC, disponible dans le fichier http://biostatisticien.
eu/springeR/combn.cpp :
1 # include < math .h >
2 extern "C" {
3 void combnC ( int * combmat , int * n , int * m) {
4 int i , j , e , h , nmmp1 , mp1 ;
5 int * a;
6 a= new int [m [0]];
7 for (i =1; i <= m [0]; i=i +1) a[i -1]= i;
8 e =0;
9 h=m [0];
10 for (i =1; i <= * (m +0); i=i +1) combmat [i -1]= i;
11 i =2;
12 nmmp1 =n [0] - m [0] + 1;
13 mp1 =m [0] + 1;
14 while (a [0] != nmmp1 ) {
15
if(e < n[0] - h) {
16
h =1;
17
e=a[m [0] -1];
18
a[m [0] - h ]= e + 1;
19
for (j =1; j <= m [0]; j ++) combmat [(i -1) * m [0]+ j -1]= a[j -1];
20
i=i +1;
21
} else {
22
h=h + 1;
23
e=a[ mp1 - h -1];
24
for (j =1; j <= h;j=j +1) a[m [0] - h + j -1]= e + j;
25
for (j =1; j <= m [0]; j ++) combmat [(i -1) * m [0]+ j -1]= a[j -1];
26
i=i + 1; }
}
27 delete [] a;
28 }}
Code de la fonction principale, disponible dans le fichier http://biostatisticien.
eu/springeR/main.cpp :
1 # include < iostream >
2 using namespace std ;
Précédent

- 288/701

Suivant