IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

fonction récursive et tri


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 79
    Points : 48
    Points
    48
    Par défaut fonction récursive et tri
    Je cherche à coder le plus simplement possible en python la fonction suivante du tri fusion:
    avec A tableau a trier et p<q<r

    TRI-FUSION(A, p, r)
    si p < r
    alors q ← (p + r)/2

    TRI-FUSION(A, p, q)
    TRI-FUSION(A, q + 1, r)
    FUSION(A, p, q, r)
    en gardant les appels récursifs séparés. (pas de Fusion(tri-fusion(...),tri_fusion(..))
    Fusion réalise juste la fusion de 2 tableaux déjà triés en o(n) cad A de p à q et A de q+1 à r.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 049
    Points : 1 380
    Points
    1 380
    Par défaut
    heu ....
    t'aurais pas plutôt un exemple input/output ; ce serait plus clair pour moi ...

  3. #3
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def trifusion(A, p, r):
        if p < r:
            q = (p + r)/2
            trifusion(A, p, q)
            trifusion(A, q + 1, r)
            fusion(A, p, q, r)
    Non*?

    Évidemment, c’est récursif*!

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par aspire Voir le message
    Je cherche à coder le plus simplement possible en python la fonction suivante du tri fusion:
    avec A tableau a trier et p<q<r
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRI-FUSION(A, p, r)
        si p < r
        alors q ← (p + r)/2
            TRI-FUSION(A, p, q)
            TRI-FUSION(A, q + 1, r)
            FUSION(A, p, q, r)


    en gardant les appels récursifs séparés. (pas de Fusion(tri-fusion(...),tri_fusion(..))
    Fusion réalise juste la fusion de 2 tableaux déjà triés en o(n) cad A de p à q et A de q+1 à r.
    Salut

    Déjà pense à encadrer ton code entre balises "CODE" et non balises "QUOTE". Comme ça, il reste quand on cite ton post.

    Sinon ben toute l'astuce de l'algorithme "tri-fusion" consiste dans la fusion. Or là ben tu as un peu "oublié" cette étape...

    https://secure.wikimedia.org/wikiped...iki/Tri_fusion
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 79
    Points : 48
    Points
    48
    Par défaut
    En fait je cherche plus a récupérer les paramètres de la récursion. Je n'arrive pas a faire le tri sur place dans le tableau A. J'ai une solution récursive qui reprend les 2 listes et les fusionne mais en reconstruisant une nouvelle liste a chaque fois. Ici je cherche a utilisé le même tableau.

    Désolé pour les balises je suis allé un peu vite.
    @mont29:

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Points : 1 384
    Points
    1 384
    Par défaut
    Le tri fusion ne fonctionne pas en place, c'est d'ailleurs son principal désavantage par rapport au quicksort (son avantage est qu'il est O(n*log(n)) dans le pire des cas, contrairement au quicksort).

    Cela dit, il me semble que l'utilisation de mémoire supplémentaire peut être limité à n/2: il suffirait de recopier A[p:q], la fusion opérerait sur cette copie et sur le tableau A entre les indices q et r (pas besoin de recopier ceux-là), et le résultat irait directement dans A.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 79
    Points : 48
    Points
    48
    Par défaut
    C'est tout a fait ca dividee.
    La fusion n'est pas réalisée sur place.
    mais le quicksort est en o(n²) dans le pire des cas... alors que le tri fusion reste en o(nlgn).

    Qui connait l'algo utilisé dans la fonction standard sort() de python ?

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par aspire Voir le message
    Qui connait l'algo utilisé dans la fonction standard sort() de python ?
    S'il n'a pas changé depuis 2002, ça doit être "timsort" de Tim Peters: http://en.wikipedia.org/wiki/Timsort.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. fonction récursive: erreur
    Par calla29 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/05/2006, 11h51
  2. [VB6] XML, fonction récursive de recherche
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2006, 21h27
  3. [XSLT] fonction récursive à N niveaux
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/03/2006, 12h30
  4. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08
  5. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo