Vous êtes sur la page 1sur 4

Licence Informatique 1ère année

Algorithmique et Programmation

Examen – 25/02/2019 - 2h00

Les notes de cours, TD et TP sont autorisées.

Exercice 1 (9 points) : Le gouvernement veut automatiser l'analyse des idées émises dans le cadre du
grand débat national. Chaque idée est décrite par un texte (chaine de caractères), le pseudonyme du citoyen
qui a émis l'idée, et le coût (positif ou négatif) de l'idée pour les finances publiques. Exemple d'idée : texte =
"rétablir l'ISF", citoyen = "toto27", coût = +3,2 milliards d'euros.

a- Proposez des structures de données pour représenter les idées émises. (1 point)

On suppose dans les questions qui suivent que la structure de données a été initialisée avec les
idées émises.

b- Écrivez une fonction qui prend les idées en entrée et renvoie le coût moyen des idées. (2 points)

c- Écrivez une fonction qui prend les idées en entrée et le pseudonyme d'un citoyen et renvoie le
nombre d'idées émises par le citoyen. (2 points)

d- Écrivez une fonction qui prend en entrée un tableau des idées émises et renvoie le pseudonyme
du citoyen qui a émis le plus d'idées. On suppose que le tableau a au moins une case et qu'il est trié par
ordre croissant selon les pseudonymes. (4 points)

Exercice 2 (4 points) :

// l = taille du tableau t
fonction avec retour booléen mystere(chaine t[], entier l, chaine x)
entier i, j;
booléen trouvé;
début
trouvé <- faux;
i <- 0;
j <- l-1;
tantque (i<=j ET non trouve) faire
si (t[i] = x OU t[j] = x) alors
trouve <- vrai;
sinon
i <- i+1;
j <- j-1;
finsi
fintantque
retourne trouvé;
fin

a- Que fait la fonction mystere? (1 point)

b- Donnez le paramètre de complexité de la fonction mystère, indiquez quel est le cas au pire s'il
existe, et calculez la complexité de la fonction (dans le cas au pire s'il existe, dans le cas général sinon). Le
calcul de la complexité doit être justifié, sinon il ne sera pas pris en compte. (3 points)
Exercice 3 (7 points) :

La fonction suivante remplit un tableau d'entiers générés aléatoirement et triés par ordre croissant.
On suppose que rand(100) renvoie un entier aléatoire entre 0 et 100 et que cette instruction s'exécute en
temps constant.

fonction avec retour entier[] aleaTrie(entier n)


entier t[n], i, j, e;
début
pour (i allant de 0 à n-1 pas de 1) faire
e <- rand(100);
j <- i;
tantque (j>0 ET t[j-1]>e) faire
t[j] <- t[j-1];
j <- j-1;
fintantque
t[j] <- e;
finpour
retourne t;
fin

a- Donnez le paramètre de complexité de l'algorithme. Indiquez quel est le cas au pire s'il existe.
Calculez la complexité de l'algorithme, dans le cas au pire s'il existe, dans le cas général sinon. Le calcul de
la complexité doit être justifié, sinon il ne sera pas pris en compte. (4 points)

b- Écrivez un autre algorithme de complexité linéaire qui génère aussi un tableau d'entiers
aléatoires triés par ordre croissant. (3 points)
Exercice 1

enregistrement Idee
chaine texte, pseudo;
réel coût;
finenregistrement

Idee t[] contient les idées.

fonction avec retour réel coutMoyen (Idee t[l], entier l)


entier i;

CO
réel r;
début
r <- 0;
pour (i allant de 0 à l-1 pas 1) faire
r <- r+t[i].coût;
finpour
retourne r/l;
fin

RR
fonction avec retour entier nbIdees (Idee t[l], entier l, chaine pseudo)
entier i, n;
début
n <- 0;
pour (i allant de 0 à l-1 pas 1) faire
si (t[i].pseudo = pseudo) alors

EC
n <- n+1;
finsi
finpour
retourne n;
fin

fonction avec retour chaine plusActif(Idee t[l], entier l)

TI
entier i, n, nMax;
chaine pMax, p;
début
p <- t[0].pseudo;
n <- 1;

O
nMax <- -1;
pour (i allant de 1 à l-1 pas 1) faire
si (t[i].pseudo ≠ p) alors
si (n>nMax) alors

N
pMax <- p;
nMax <- n;
finsi
p <- t[i].pseudo;
n <- 1;
sinon
n <- n+1;
finsi
finpour
si (n>nMax) alors
pMax <- p;
finsi
retourne pMax;
fin

Exercice 2

La fonction mystere cherche l'élément x dans le tableau t en utilisant une recherche séquentielle
boustrophédon. Le paramètre de complexité est la taille du tableau, qu'on appele n. Le cas au pire est celui
où le test de la conditionnelle est toujours faux, donc quand x n'est pas dans le tableau. Dans ce cas au pire,
il y aura n/2 tours de la boucle tantque, et la complexité sera de la forme a*n/2 + b avec a et b des
constantes, on a donc une complexité au pire linéaire.

Exercice 3

Le paramètre de complexité est la taille du tableau, n. Le cas au pire est celui où la condition du tantque est
toujours vraie, c'est-à-dire que chaque entier déjà généré est plus grand que l'entier e qu'on veut placer dans
le tableau. Dans ce cas, la boucle tantque fera un tour lors du premier tour de la boucle pour, puis deux tours
lors du deuxième tour de la boucle pour, ..., et n-1 tours lors du dernier tour de la boucle pour. La complexité
sera donc de la forme 1+2+...+(n-1)=O(n²).

CO
Fonction qui fait le même travail en temps linéaire :

fonction avec retour entier[] aleaTrie(entier n)


entier t[n], i;
début
t[0] <- rand(100);
pour (i allant de 1 à n-1 pas de 1) faire

RR
t[i] <- t[i-1]+rand(100-t[i-1]);
finpour
retourne t;
fin

EC
TI
O
N