Examen 2016 - Question 15

Examen 2016 - Question 15

by Lucas Tortora -
Number of replies: 3

Bonjour,

La question 15 de l'examen de 2016 demande de recréer un algorithme, cette fois en complexité O(n), alors que celui que j'avais écrit auparavant étant de complexité O(n^2).

Je ne suis pas trop sur de comment recommencer depuis zéro pour le faire! Faudrait-il utiliser un algorithme récursif? Ou peut-on le faire par itération, etc?

Merci beaucoup!

Lucas


In reply to Lucas Tortora

Re: Examen 2016 - Question 15

by Parzival Hans Nussbaum -

Salut Lucas,

On peut écrire un alogrithme en O(n1 +n2) si les deux listes sont ordonnées. L’idée est que tu as deux pointeur, un pour chaque liste (des variables [a et b] qui contiennent des indexes). À chaque fois on calcule l’écart entre les deux éléments de la liste et on regarde s’il est plus petit que le plus petit qu’on a trouvé jusqu’à ce point. Pour la prochaine itération on essaie de minimiser la distance entre les deux en incrément l’index du élément plus petit.

Tu trouve le algorithme comme image attaché à ce message.

Beau week-end 

Parzival

Plus petit écart

In reply to Parzival Hans Nussbaum

Re: Examen 2016 - Question 15

by Lucas Tortora -

Salut Parzival,

Merci beaucoup pour la réponse et les explications!

Je vais essayer de m'entraîner maintenant en utilisant tes conseils.

Merci et bon week-end.

Lucas

In reply to Lucas Tortora

Examen 2016 - Question 15

by Parzival Hans Nussbaum -
Ps.
Souvent on peut identifier le type l’algorithme qu’on aura besoins en regardant la complexité demandé. Ça viendra avec l’entraînement. Par exemple si O(log n) est demandé il est très probable que la réponse demande un algorithme utilisant le principe d’une recherche dichotomique. etc. Avec O(n1+n2) normalement c’est un indice qu’on doit faire une itération sur deux listes avec une seule boucle. Cette complexité donne nous aussi la restriction qu’on ne devra pas utiliser des algorithmes des tris.