Algorithme/Code en python

Fermé
Loulou75 - Modifié le 21 nov. 2018 à 21:29
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 - 22 nov. 2018 à 20:40
Bonjour,

Je souhaiterais implémenter l'algorithme suivant en python :

si i = j alors

retourner (A[i], 1)

sinon

(x, cx) = maj(i, (i + j)/2)
(y, cy) = maj((i + j)/2 + 1, j)

si cx ̸= 0 alors

cx ← cx + occur(x, (i + j)/2 + 1, j)

si cy ̸= 0 alors

cy ← cy + occur(x, i, (i + j)/2)

si cx >(j−i+1)/2 alors

retourner (x, cx)

sinon

si cy >(j−i+1)/2 alors retourner (y,cy)

sinon

retourner (−,0)

Ce qui nous donne :

def occur(A,x,i,j):
    
    p=0
    
    for k in range (i,j+1):
        
        if x==A[k]:
            
            p=p+1
            
    return p

def maj(i,j):
    

    if i==j:
        
        return(A[i],1)
    
    else:
        
        (x,cx) = maj(i,(j-i+1) // 2)
        (y,cy) = maj(((j-i+1) // 2)+1,j)
        
        if cx!=0:
            
            cx=cx+occur(x,((j-i+1) // 2)+1,j)
        
        if cy!=0:
        
            cy=cy+occur(x,i,(j-i+1) // 2)

        if cx>(j-i+1) // 2:

            return (x,cx)
        
        else:

            if cy>(j-i+1) // 2:

                return (y,cy)
            
            else:

                return (-1,0)

*

Mais du coup ce que j'ai fais ne marche pas, sa reste bloqué sur cette ligne de code
(x,cx) = maj(i,(j-i+1) // 2)


Je vous remercie d'avance pour votre aide.

Configuration: Macintosh / Safari 11.0.3


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

1 réponse

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
21 nov. 2018 à 21:44
bonjour, essayons d'abord de comprendre ton algorithme:
que signifie la ligne suivante, où tu utilises = et pas ←?
(x, cx) = maj(i, (i + j)/2)

comme tu n'expliques pas le contexte, comment pouvons-nous deviner ce que tu essaies de faire?
par ailleurs, "sa reste bloqué", vraiment? peut-être un message d'erreur?
0
Merci pour ta réponse, en fait c'est une fonction récursive basée sur un découpage du tableau A en deux listes de même taille, il va trouver l'élément majoritaire dans au moins une des deux listes.

Tu as raison je devrais utiliser "←", c'est bien "=" en python?

Merci pour ton aide.
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > Loulou75
22 nov. 2018 à 00:46
as-tu essayé:
x,cx = maj(i,(j-i+1) // 2)
0
Loulou75 > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
22 nov. 2018 à 20:20
J'ai essayer ça ne marche pas malheureusement
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476 > Loulou75
Modifié le 22 nov. 2018 à 20:42
"ça ne marche pas": message d'erreur?
pourrais-tu également partager ton code complet?
0
Jithel Messages postés 843 Date d'inscription mercredi 20 juin 2018 Statut Membre Dernière intervention 31 août 2021 171
Modifié le 21 nov. 2018 à 23:02
L'affectation d'une valeur à une variable se fait bien avec le = en Python
0