Bonsoir à tous.
Petite introduction rapide mon problème:
Je suis étudiant en L3 d'informatique, et j'ai un devoir d'algo à faire. Ne vous étonnez pas donc si ce que je raconte fait académique ^^
Je dispose donc d'un tableau de taille n par n, et chaque case contient doit un 0, soit un 1.
Pour l'énoncé, un 1 représente du noir et le but est de trouver le plus grand carré possible dans la tache.
Heureusement pour faciliter les choses, la tache a la propriété que pour tout segment (horizontal ou vertical) dont les extrémités sont dans la tache, l'intégralité du segment est dans la tache.
On me demande dans un premier temps de donner un algorithme naïf pour résoudre le problème. Pour ca, pas de soucis, j'ai défini une fonction qui pour un point regarde si son voisin de droite, de dessous, et de dessous à droite sont noirs aussi. Autrement dit, si c'est un carré de côté 2 (par définition, tt point est un carré de côté 1). Si oui, j'appelle récursivement la fonction en testant avec 3, puis 4 et ainsi de suite, jusqu'à ce que ca renvoie faux, auquel cas, je renvoie la valeur de la taille d'avant.
Pour la façon "naïve" de faire, j'itère sur tout les points qui valent 1 et je leur applique la fonction.
Je dois trouver un algo plus efficace pour le faire, et je tourne en rond depuis deux jours. Je pense que je peux partir sans soucis avec ma fonction qui vérifie si le point est le coin supérieur gauche d'un carré que j'ai décrite au dessus, et que donc l'astuce pour gagner en efficacité, c'est la sélection des points sur lesquels je peux appliquer la fonction. Sauf que je ne trouve aucun critère permettant d'éliminer ou de privilégier des points, donc je viens misérablement quémander de l'aide ici
Sachez que si j'apprécie et je remercie d'avance toute aide, je suis quand même du genre curieux, touche à tout et que j'aime bien gratter pour trouver. Donc si plutôt que de m'apporter la solution sur un plateau d'argent vous pouviez me mettre sur la voie, je vous en serais reconnaissant.
Merci à ceux qui prendront le temps de m'aider.
Partager