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

{PHP} DIFFÉRENCE ENTRE DEUX DATE EN JOURS (LISTE RÉCUPÉRÉE DANS UN TABLEAU)
Salut J'ai cherché une fonction permettant de récupérer une liste de date entre deux dates donnée...

{C / C++ / C++.NET} CALLOCATOR
Salutations! Voici une reprise de mon code précédent CHeapCollector. Celui-ci n'a pas tout à fait ...

{C / C++ / C++.NET} ANIMATIION GRAPHIQUE DES STRUCTURES DE DONNÉES
cette application a été réalisée comme un projet de fin d'étude Licence LMD 2008/2009 en algérie sét...

{C# / C#.NET} TOOLTIP TEXT POUR LA LISTE DÉROULANTE D'UN COMBOBOX
Ce code permet d'afficher un ToolTip lors du survol de la dropdwonlist d'un combobox. Cette fonctio...

{Javascript / DHTML} RETROUVER LE NUMÉROS DE TELEPHONE DE VOTRE EMPLOYER RAPIDEMENT!!
Vous désirez trouvez le numéros d'un membre de votre personnel rapidement, selectionnez le nom de l'...

{C# / C#.NET} EACHPARALLEL
En attendant la version 4 du Framework et l’arrivée des ParallelExtensions, voici une méthode ...

{Visual Basic, VB6, VB.NET, VB 2005} SCANLIST V4
Encore plus rapide que la version précédente et avec l'option html et le lien qui suit le fichier (e...

{PHP} SEARCH QUERY COMPOSER
Cette petite fonction vous permettra de composer une condition MySQL pour par exemple une barre de r...

{Javascript / DHTML} TABLEAU GÉNÉRÉ ET TRIÉ PAR LE CLIENT
Le but ici est d'illustrer plusieurs techniques de développement javascript. La première concerne ...