• Aucun résultat trouvé

Informatique tronc commun TP 4

N/A
N/A
Protected

Academic year: 2022

Partager "Informatique tronc commun TP 4"

Copied!
3
0
0

Texte intégral

(1)

Informatique tronc commun TP 4

30 octobre 2013

Note : après la séance, vous devez rédiger un compte-rendu de TP et le faire parvenir à votre enseignant, au plus tard une semaine après la séance de TP.

Ce compte-rendu sera pour cette séance :

– le fichier python contenant le code demandé (avant chaque question, on reportera en commentaire le numéro de la question),

– plus un compte-rendu (manuscrit ou électronique) pour les questions finales.

Le nom de votre fichier python sera impérativement forme dupont-jean-tp03.py, où dupont est à remplacer par votre nom et jean par votre prénom, les deux étant en minuscules (même la première lettre) etsans caractère accentué.

Dans la mesure du possible, on justifiera le code demandé par des invariants.

1 Opérations utiles sur les listes

Une liste tétant donnée :

1. len(t) désigne la longueur det;

2. pour tout idansrange(len(t)), t[i] désigne l’élément d’indicei.

3. On peut construire une liste de n éléments tous physiquement égaux à x avec l’expression [x] ∗ n.

4. On peut ajouter un élémentxà la fin detpar l’instructiont.append(x) (la longueur de taugmente alors de 1).

5. On peut ajouter tous les éléments d’une listeuà la fin de la listetpar l’instruction t += u.

On supposera que ces opérations sur les listes ont respectivement une complexité : 1. Θ(1)

2. Θ(1) 3. Θ(n)

4. Θ(1)(ce n’est pas tout à fait vrai mais pour ce TP, c’est raisonnable) 5. Θ(len(u)) (ce n’est pas tout à fait vrai mais pour ce TP, c’est raisonnable)

1

(2)

2 Programmation

1. Écrire une fonction random_list(n,k) construisant une liste de n entiers tirés au hasard dans l’intervalle range(k). On pourra utiliser la fonction randrange du modulerandomà cet effet.

2. Écrire une fonctioncounting_sort(k,t) prenant en argument une liste t d’entiers appartenant à range(k) et retournant une copie triée de ce tableau. On utilisera impérativement l’algorithme suivant :

– On construit un tableauu de taille k initialisé avec des0.

– On parcourtt. Pour chaque valeurxtrouvée, on incrémenteu[x]. À la fin du par- cours, pour tout entieriderange(k),u[i] contient donc le nombre d’occurrences de i danst.

– Il est alors facile de construire un tableaur trié répondant à la question posée.

3. Écrire suivant le même principe une fonctionbucket_sort(f,k,t) retournant une copie de t triée suivant le critère f. Plus précisément, f doit être une fonction prenant ses valeurs dansrange(k) et les éléments de la liste résultat sont triés par ordre croissant de leurs images par f.

De plus, on fera en sorte que le tri soit stable, c’est-à-dire que pour tout couple de valeurs x et y ayant même image par f, x et y apparaissent dans le même ordre danst et dans la liste triée.

4. On se donne la fonction suivante pour trier une liste d’entiers.

def radix_sort(k, t) :

""" Retourne une c o p i e de t t r i é e p a r o r d r e c r o i s s a n t . t d o i t c o n t e n i r d e s e n t i e r s a p p a r t e n a n t à r a n g e ( k∗ ∗2 )

"""

def lp(x) :

return x // k def rp(x) :

return x % k

u = bucket_sort(rp, k, t) r = bucket_sort(lp, k, u) return r

Vérifier (expérimentalement) sur une petite liste d’entier que cette fonction trie effectivement.

3 Étude de complexité

1. Expliquer (brièvement) et sous quelle hypothèse pourquoi la complexité derandom_list(n,k)) est un Θ(n).

2. Justifier que la complexité decounting_sort(n,k) est unΘ(max(n, k)).

3. Justifier que la complexité debucket_sort(n,k) est unΘ(max(n, k)).

2

(3)

4. Quelle est la complexité deradix_sort?

5. En admettant que la fonction bucket_sort répond bien à l’énoncé, justifier que radix_sorttrie le tableau donné en argument. On pourra commencer par regarder le cas où k vaut 10 pour comprendre ce qu’il se passe et se poser la question : à quelle(s) condition(s) surlp(x),lp(y),rp(x),rp(y) a t-onx<=y?

3

Références

Documents relatifs

Montrer que pour tout entier p, premierprobable1(p) retourne un booléen valant vrai si et seulement si p est probablement premier (au sens de la définition donnée plus

Cette liste de commandes peut être représentée de façon textuelle, c’est-à-dire sous forme d’une chaîne de caractère, comprenant (possiblement) plusieurs lignes, chaque

Vérifiez que vous pouvez créer un nouveau répertoire TP1 dans /home/tux et un fichier texte.txt dans TP1 (créer un fichier texte vide à partir de l’explorateur de fichier,

En cliquant alors sur «Go» dans la fenêtre de débogage, on peut exécuter le programme jusqu’au point d’arrêt?. Cliquer de nouveau sur «Go» permet de poursuivre l’exécution

Écrire une procédure fizzbuzz prenant en argument un entier n et affichant successi- vement la suite des entiers de 1 avec la règle suivante : les nombres multiples de 3 sont

choisie pour cette image (intensité de gris représentant le blanc), puis toutes les valeurs de la matrice représentant l’image, dans l’ordre où on les lirait normalement si la

Sachant qu’une division en base 10 a un « coût » proportionnel au nombre de chiffres, estimer le temps de calcul nécessaire pour connaître le nombre exact de chiffre dans

Ce compte-rendu sera pour cette séance le fichier python contenant le code demandé (avant chaque question, on reportera en commentaire le numéro de la question),.. Le nom de