Rapport de TP#

Écrivez dans les cellules suivantes des fonctions permettant de :

  • lister les arrangements (de type tuple) de k éléments parmi un ensemble S

  • tirer un arrangement de k parmi un ensemble S de façon uniforme

  • lister les combinaisons (de type Set) de k éléments parmi un ensemble S

  • tirer une combinaison de k parmi un ensemble S de façon uniforme

Vous pouvez utiliser les algorithmes de votre choix et vous inspirer de ceux vus pendant la séance (sous-ensembles, produit cartésien, arbres binaires).

Décrivez ci-dessous les algorithmes utilisés :

écrivez ici

// Ecrire votre code ici

Quelques exemples pour tester votre code (à adapter / compléter en fonction de votre code)

Hand = Set(["Rouge","Bleue","Verte","Jaune"])
list(arrangements(Hand,2)) # la fonction arrangements est celle que vous devez écrire
# on vérifie qu'on obtient pareil que Sage
assert set(arrangements(Hand,2)) == set(tuple(a) for a in Arrangements(Hand,2)) 
assert all(set(arrangements(Hand,i)) == set(tuple(a) for a in Arrangements(Hand,i)) for i in range(5))
random_arrangement(Hand,2) # la fonction random_arrangement est celle que vous devez écrire
def distribution(L):
    """
    Renvoie la distribution par nombre d'occurences d'une liste d'éléments
    Input :
     - une liste L d'éléments (non mutables)
    Output: un dictionnaire comptant les occurences de chaque élément de la liste L
    """
    d = {}
    for el in L:
        d[el] = d.get(el, 0) + 1
    return d
# on vérifie que la répartition est uniforme
distribution([random_arrangement(Hand,2) for i in range(10000)])
list(combinaisons(Hand,2)) # la fonction combinaisons est celle que vous devez écrire
# on vérifie qu'on obtient pareil que Sage
assert set(combinaisons(Hand,2)) == set(Set(c) for c in Combinations(Hand,2))
assert all(set(combinaisons(Hand,i)) == set(Set(a) for a in Combinations(Hand,i)) for i in range(5))
random_combinaison(Hand,2) # la fonction random_combinaison est celle que vous devez écrire
# on vérifie que la répartition est uniforme
distribution([random_combinaison(Hand,2) for i in range(10000)])