Le 18 janvier 2023 à 08:17:47 :
Alors je dois avouer que ça date un peu donc je ne m'en souviens pas forcément super bien ce que tu cherche se nomme théorie de la terminaison et de la complexité.
L'invariant c'est un propriété qui ne change pas à chaque itération d'une boucle et permet de démontrer la terminaison d'un algorithme.
Ce n'est donc pas ce que tu cherche.
Ce que tu cherche c'est le dénominateur commun des deux boucles. L'intérêt est comme tu l'as dis est de diminuer la complexité de temps des algorithmes naïfs.
J'ai trouvé un site qui résume plutôt bien le tout sans rentrer dans de la théorie algorithmique pompeuse:
https://librecours.net/module/js/js03/pres/co/optimisation.html?mode=html#:~:text=Complexit%C3%A9%20en%20temps&text=Elle%20donne%20un%20ordre%20d,de%20vue%20de%20l'utilisateur.
Merci pour la réponse. J'ai pensé à ça aussi sauf que ce que j'avais particulièrement en-tête par contre c'était un peu comme le problème de "trapped rain water" mais avec le nom "tea cup". En gros, pour le "tea cup", dans un array de nombre naturel, on doit trouver la "vallée" la plus longue. Exemple : 7,4,3,3,4,6 est une vallée à cause de la monté et de la descente. Je pense qu'on construit d'abord une boucle n^2 de façon naïve, on remarque un invariant et on l'utilise pour le simplifier (ATTENTION: je ne demande pas qu'on me donne la solution à ce problème).
Ce que je veux savoir, pour ceux qui ont fait le problème de dessus, si c'est bien juste une histoire de trouver un "dénominateur commun aux deux boucles" ou bien il y a bien une technique particulière où on utilise un invariant?
Maintenant que j'y pense, l'idée serait de trouver un invariant qui reste vrai à chaque itération et d'utiliser cet invariant pour nous donner la solution et qu'on a ainsi un algo (une boucle plutôt) en O(n)...
Merci pour les réponses si vous en avez d'autres