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 : 603
Catégorie(s) : Maths, Algorithme
Langage sélectionné : ObjectiveCaml
Langages dispo pour ce code :
- ObjectiveCaml
- Voir tous les langages pour ce code snippet



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 ...

{Delphi} COMPOSANT LISTE DE STRINGS AVEC CHAMPS
TRecordsList est une liste de strings, chaque string comportant une ou plusieurs "sous-chaînes" (cha...

{Visual Basic, VB6, VB.NET, VB 2005} EXTRAIRE LE TEXTE DES FENETRES D'APPLICATIONS TIERCES (LISTBOX, LISTVIEW, TEXTBOXES, ...)
une mini source mais assez utile, dans certains cas... cas concrêt: j'ai une appli au boulot qui...

{Visual Basic, VB6, VB.NET, VB 2005} LISTE DE FICHIERS SUR UN DISQUE EN VB6
Ce programme permet de lister une arborescence de répertoires et de fichiers. Le résultat est mis ...

{Visual Basic, VB6, VB.NET, VB 2005} CALCUL DÉTAILLÉ DE FACTORIEL
le code VBA d'excel permet de donner chiffre à chiffre le résultat du calcul de factoriel d'un nombr...

{Delphi} EDITEUR DE LISTES DE SONS ( SIMPLE MAIS BIEN )
Bonjour, alors voila une source ultra-simple, mais qui montre qu'avec le simple on peut faire un tr...

{PHP} LISTER LES TERMES RECHERCHÉS DANS GOOGLE OU YAHOO POUR ARRIVER À VOTRE SITE
Tout est dans le titre ;) Pour le test, un fichier google.html et yahoo.html est a utiliser avec ...

{PHP} GÉNÉRATEUR DE LISTE DÉROULANTE
Petite fonction qui peut vous servir pour générer des listes déroulantes dans un formulaire. très s...

{C / C++ / C++.NET} LISTE CHAINÉE
Ce programme permet de manipuler des Liste chainée... avec deux attributs (Clé (int) et Valeur (chai...

{Visual Basic, VB6, VB.NET, VB 2005} LOCALISER UNE VILLE DANS LE MONDE
J’ai cherché partout une liste de tous les villes du monde pour l'utiliser dans mon projet ça m'a pr...