Bonsoir à tous,
J'ai quelques difficultés pour transformer un vecteur.
En effet j'ai écrit un programme pour décomposer une permutation en produit de cycles, qui est le suivant :
Ainsi, on obtient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 let id x = init_vect x (fun t -> t);; let max v = let r,n = ref v.(0), vect_length v in for i=0 to (n - 1) do if !r < v.(i) then r := v.(i) done; !r ;; let predecomp v = let n = vect_length v in let (v',v'',r,j)= ((copy_vect v) , (id n) , (ref (max v)) , (ref (max v))) in begin v'.(0) <- !r; v''.(!r) <- 0; r := v.(!r) end; for k = 1 to n - 1 do if v.(v'.(k-1)) <> !j then begin v'.(k) <- !r; v''.(!r) <- 0; r:=v.(!r) end else begin v'.(k) <- max v''; r := v.(max v''); j := max v''; v''.(max v'') <- 0 end done; v' ;;
Ce qui est juste, mais j'aimerais que le résultat s'affiche d'une manière différente. C'est à dire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #predecomp [|6;10;13;9;14;1;3;0;11;7;5;2;12;8;4|];; - : int vect = [|14; 4; 13; 8; 11; 2; 12; 10; 5; 1; 9; 7; 0; 6; 3|]
[|9; 7; 0; 6; 3; 10; 5; 1; 12; 13; 8; 11; 2; 14; 4|].
En effet les cycles dans ce cas sont (14,4) (13,8,11,2) (12) (10,5,1) (9,7,0,6,3).
Et au lieu de les afficher dans l'ordre décroissant des éléments de tête j'aimerai le faire dans l'ordre croissant de ces même éléments de tête. Ce que je n'arrive pas à faire...
Merci d'avance,
Remmal.
Partager