Les Snippets

Connexion

trouver la n eme permutation lexicographique des elements d'une liste

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 28/02/2008 23:25:34 et initié par coucou747 [Liste]
Vue : 2423
Catégorie(s) : Maths, Algorithme
Langages dispo pour ce code :
- ObjectiveCaml



Langage : ObjectiveCaml
Date ajout : 28/02/2008
Posté par coucou747 [Liste]
(*factorielle*)
let fact n =
    let rec f acc = function
        | 0 -> acc
        | n -> f (n*acc) (n-1)
    in f 1 n;;
(*trouve la nth eme permutation des elements de la liste li, constituee de nbr elements*)
let rec perm nth nbr li=
    let rec f nth nbr li = function
        | [] -> li
        |hd::lt ->
        let fnbr=fact (nbr -1)
        in if nth < fnbr then
            hd:: (perm nth (nbr-1) (List.filter (fun x -> x <> hd) li))
        else
            f (nth - fnbr) nbr li lt
    in f nth nbr li li;;
perm 999999 10 [0;1;2;3;4;5;6;7;8;9];;
Remarque :
exemple :
perm 999999 10 [0;1;2;3;4;5;6;7;8;9];;
=> 2783915460

les permutations lexicographiques de [0;1;2] sont (dans l'ordre) :
[0; 1; 2]
[0; 2; 1]
[1; 0; 2]
[1; 2; 0]
[2; 0; 1]
[2; 1; 0]

pour une liste de taille n, il y en a n!, elles sont triees selon la position des elements dans la liste de depart.

Snippets en rapport avec : Liste, Permutation, Lexicographique, Factorielle



Codes sources en rapport avec : Liste, Permutation, Lexicographique, Factorielle

{PHP} TROUVER TOUS LES ANAGRAMMES D'UN MOT
Bonjour à tous. Ce code permet de lister tous les anagrammes d'un mot. C'est vraiment un code pour ...

{Visual Basic, VB6, VB.NET, VB 2005} AFFICHEUR DE LISTE AVEC VALIDATION (EXCEL)
Voici un classeur Excel avec Macro. Ce classeur permet de créer des listes (une par feuille) à volo...

{JAVA / J2EE} GENERATEUR DE MOT PAR INCREMENTATION
Cette class permet de renvoyer un mot à partir d'un autre avec une permutation du dernier caractère ...

{Delphi} STATUTILS - LES STATISTIQUES
Bonsoir, voici une librairie de gestion basique de séries statistiques, StatUtils. Evidemment elle...

{Delphi} DES THREADS EN 1 CLIN D'OEIL !
Bonjour, je vous présente, après une longue absence de Codes-Sources, ma nouvelle unité. Alors il ...

{IRC} LISTE COACH/FONDATEURS/MEMBRES POUR ORANGE
Ce petit addon vous permet simplement de lister les access d'un salon sur Orange... Rien d'extra ...

{Visual Basic, VB6, VB.NET, VB 2005} ANAGRAMMES
C'est vrai, il y a déjà des sources avec des anagrammes... Mais (pour celles que j'ai regardées...)...

{Visual Basic, VB6, VB.NET, VB 2005} GESTION DE LA MAINTENANCE ASSITÉ PAR ORDINATEUR GMAO
logiciel de gestion de la maintenance très pratique. Les règles de gestion : Règle n°1 : Un Bon ...

{Delphi} TEXTURE PACKER - OU COMMENT GÉRER UNE BANQUE DE TEXTURES FACILEMENT !
Bonjour, voici un editeur de banques de textures : vous pouvez mettre n'importe quel bitmap de moin...

{C / C++ / C++.NET} LISTER LES FICHIERS D'UN REPERTOIRE + FILTRES
Programmé sous Linux. Compatible windows. Liste les fichiers d'un répertoire come indiqué dans le...