A3 : Méthode Diviser pour Régner

Document de cours

Exercices

Tri-Fusion

B. Tri-Fusion

5. Implémentation en Python

🐍 Script Python
def diviser(l):
    """
    Fonction retournant les 2 moitiés de même longueur (+/- 1) d'une liste l
    """
    long = len(l)
    return l[:long//2], l[l//2:]
🐍 Script Python
def combiner(gauche,droite):
    """
    Combine 2 listes triées gauche et droite en une liste triée.
    """
    resultat = []   
    while len(gauche) > 0 and len(droite) > 0:  # Tant que les listes gauche et droite ne sont pas vides
        if gauche[0] < droite[0]:               # Comparaison de la 1ère valeur de chaque liste
            resultat.append(gauche[0])          # Et ajout au résultat de la plus petite
            gauche = gauche[1:]                 # Suppression de la valeur ajoutée
        else:
            resultat.append(droite[0])
            droite = droite[1:]

    if len(gauche) == 0:                        # Dans le cas où 
        resultat = resultat + droite            
    else:
        resultat = resultat + gauche
    return resultat
🐍 Script Python
def tri_fusion(l):
    if len(l)<=1:
        return l
    else:
        gauche,droite = diviser(l)
        return combiner(tri_fusion(gauche), tri_fusion(droite))

C. Rotation d'une image

🐍 Script Python
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np


def rotate(image):
    n = len(image)
    if n > 1:
        temp = np.copy(image[n//2:, :n//2])
        image[n//2:, :n//2] = rotate(image[n//2:, n//2:])
        image[n//2:, n//2:] = rotate(image[:n//2, n//2:])
        image[:n//2, n//2:] = rotate(image[:n//2, :n//2])
        image[:n//2, :n//2] = rotate(temp)
    return image


image = np.array(Image.open('R2D2.jpg'))
image = rotate(image)
plt.imshow(image)

En itératif

🐍 Script Python
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np

def rotate(image):
    n = len(image)
    result = np.copy(image)
    for i in range(n//2):
        for j in range(n//2):
            # partie à compléter pour déplacer
            # les pixels des quatre quadrants

    return result


image = np.array(Image.open('vador.jpg'))
image = rotate(image)
plt.imshow(image)