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

Algorithmes et structures de données Discussion :

Calcul de complexité d'une fonction récursive avec boucle for


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2019
    Messages : 2
    Par défaut Calcul de complexité d'une fonction récursive avec boucle for
    Bonjour je suis nouveau sur ce forum et j'aimerais savoir comment calculer la complexité d'une fonction récursive et notamment la complexité de la fonction cis-dessous qui a en plus une boucle for. Merci de votre aide ^^ (la fonction)


    Code python : 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
    38
     
    def Recherche(bibli, motARechercher, fenetre,  listText, file = '/', fileName = '/', premiereRecurrence = True) :
        ''' Fonction recursive qui recherche des livres selon un mot'''
     
        if premiereRecurrence == True : # pour ne pas que ça se lance lors de la récursion
            for texteACacher in listText :
                texteACacher.pack_forget() #efface les précédents résultats affichés par la fonction de recherche si elle a été lancé précedemment
     
        fileCopy = file #on sauvegarde le chemin de départ
        fileNameCopy = fileName #on sauvegarde le chemin de départ
     
        for livreOuSousBibli in os.listdir('bibliotheque' + file) :
     
            if os.path.isdir('bibliotheque' + file + livreOuSousBibli): # un sous dossier équivaut à une sous-bibliotheque
                file +=  livreOuSousBibli + '/' # on modifie le lien
                fileName +=  livreOuSousBibli[:-3] + '/' # on modifie le lien (-3 pour enlever le nombre qui correspond à la position
                # d'une sous-bibliothèque et qui est à la fin du nom du dossier représentnat la sous-bibli)
                Recherche(bibli[livreOuSousBibli[:-3]], motARechercher, fenetre,  listText,  file = file, fileName = fileName, premiereRecurrence = False) # on lance la récursion pour le faire aussi pour les livres dans la sous-bibli
            else :
                if livreOuSousBibli != '.DS_Store' : # fichier caché sur mac qui est lu par 'listDir' et qui m'a fait perdre de nombreuses heures pour trouver le problème
                    f = open('bibliotheque' + file + livreOuSousBibli, 'r') #on ouvre un fichier txt correspondant à un livre
                    lignes  = f.readlines()
                    ensembleDesMots = " ".join(lignes)
                    ensembleDesMots = ensembleDesMots.replace('\n', '')
                    ensembleDesMots = ensembleDesMots.split(' ') # on créer ainsi une liste qui contient tout les mots de tout les livres de la bibliothèques
                    pasDeuxFois = True
                    for mot in ensembleDesMots : #pour chaque mot :
                        if mot == motARechercher and pasDeuxFois == True :
                            # on vérifie si c'est le mot qu'on souhaite rechercher,( pas deux fois permet que si le même livre contient plusieurs fois le mot à rechercher, il ne s'affiche qu'une fois)
                            pasDeuxFois = False
                            textAffiche = Label(fenetre, text = 'bibliotheque' + fileName + livreOuSousBibli[:-4]) #le -4 sert à enlever le .txt du fichier qui représente le livre
                            textAffiche.pack() #affiche le chemin du livre qui contient le le mot souhaité
                            listText.append(textAffiche) #stocke les labels affichés pour pouvoir les supprimer par la suite
     
     
                    f.close()
            file = fileCopy #on réinitialise pour le prochaiin livre en redonnant le chemin de depart
            fileName = fileNameCopy #on réinitialise pour le prochaiin livre en redonnant le chemin de depart

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Bonjour

    La fonction n'est pas récursive puisqu'elle ne s'appelle pas elle-même.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2019
    Messages : 2
    Par défaut
    Si elle s'appelle bien...

    la ligne a été mis en rouge dans le code du forum je ne sais pas trop pourquoi ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Recherche(bibli[livreOuSousBibli[:-3]], motARechercher, fenetre,  listText,  file = file, fileName = fileName, premiereRecurrence = False) # on lance la récursion pour le faire aussi pour les livres dans la sous-bibli

  4. #4
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 297
    Par défaut
    Au temps pour moi. C'est la fonction de recherche de Firefox qui marche toujours aussi mal.

    Dans ta situation, on peut appeler f() la fonction numérique donnant la quantité d'opérations nécessaires pour exécuter la fonction recherche(). Tu obtiendras f() en fonction de f(). Soit une formule de récurrence. Tu calculeras alors le terme général de cette suite. C'est la complexité algorithmique de la fonction recherche().

Discussions similaires

  1. Surcharge d'une fonction récursive avec et sans generics
    Par Tony310 dans le forum TypeScript
    Réponses: 1
    Dernier message: 13/11/2018, 17h25
  2. Réponses: 7
    Dernier message: 15/07/2011, 15h22
  3. Réponses: 3
    Dernier message: 03/03/2010, 19h05
  4. Complexité d'une fonction récursive
    Par sisiniya dans le forum C
    Réponses: 3
    Dernier message: 04/12/2009, 11h26
  5. Permutation avec une fonction récursive
    Par nypahe dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 29/04/2009, 07h32

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