Blame view

Giac_maj/giac-1.4.9/examples/recur/permutation.cxx 1.78 KB
6663b6c9   adorian   projet complet av...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  //l:=[1,2,3]; circulaire(l) 
  //renvoie la liste l ou la tete est mise a la fin. 
  circulaire(l):={
  return concat(tail(l),l[0]);
  };
  //l:=[1,2,3];permcc(l,l) 
  //renvoie les permutations circulares de l
  //sans variable locale, ld liste reference de depart
  permcc(l,ld):={
  if (ld==[]) return [];
  return [l,op(permcc(concat(tail(l),l[0]),tail(ld)))];
  };
  //l:=[1,2,3];permutation_circ(l) 
  //renvoie les permutations circulares de l
  //utilise permcc
  permutation_circ(l):={
  return permcc(l,l);
  };
  //echange ds l les elements d'indices j et k
  echange(l,j,k):={
  local a;
  a:=l[j];
  l[j]:=l[k];
  l[k]:=a;
  return l;
  };
  //utilise echange permuts([1,2,3,4],0)permuts(l,k):={
  local lr;
  if (k==size(l)-1) return [l];
  lr:=[];
  for (j:=k;j<size(l);j++){
  l:=echange(l,k,j);
  lr:=[op(lr),op(permuts(l,k+1))];
  }
  return lr;
  };
  //l:=[1,2,3];permutation(l) 
  //renvoie toutes les permutations de l
  //utilise permuts
  permutation(l):={
  return permuts(l,0);
  };
  //au debut ld=[] et lf=l,
  //groupe_s([],l) renvoie toutes les permutations de l
  groupe_s(ld,lf):={
   local j,n,res;
   n:=size(lf);
   res:=NULL;
   if (n==1)
     return concat(ld,lf);
   for (j:=0;j<n;j++){
     res:=res,groupe_s(append(ld,lf[0]),tail(lf));
     // permutation circulaire
     lf:=append(tail(lf),lf[0]);
   }
   return res;
  };
  //utilise groupe_s
  //groupesym(l) renvoie toutes les permutations de l
  groupesym(l):=return(groupe_s([],l));
  
  //l:=[1,2];permss2([],l,l); 
  //ldl=debut de l, l=liste a permuter,
  //ld=liste de reference (=l au debut)
  // lr liste a renvoyer en variable locale
  permss2(ldl,l,ld):={
  local lr;
  if (l==[]) return [ldl];
  if (ld==[]) return [];
  lr:=permss2(concat(ldl,l[0]),tail(l),tail(l));
  lr:=append(lr,op(permss2(ldl,concat(tail(l),l[0]),tail(ld))));
  return lr
  };
  //utilise permss2, 
  //permute(l) renvoie toutes les permutations de l
  permute(l):={
  return permss2([],l,l);
  };