J'ai de la difficulté à comprendre ce qu'est la complexité de l'espace O(1). Je comprends que cela signifie que l’espace requis par l’algorithme ne croît pas avec l’entrée ou la taille des données sur lesquelles nous utilisons cet algorithme. Mais qu'est-ce que cela signifie exactement?
Si nous utilisons un algorithme sur une liste chaînée, par exemple 1-> 2-> 3-> 4, pour parcourir la liste et atteindre "3", nous déclarons un pointeur temporaire. Et parcourez la liste jusqu'à atteindre 3. Cela signifie-t-il qu'il nous reste encore O(1) d'espace supplémentaire? Ou cela signifie-t-il quelque chose de complètement différent? Je suis désolé si cela n’a aucun sens. Je suis un peu confus.
Pour répondre à votre question, si vous avez un pointeur et parcourez la liste, celle-ci compte pour O(1) complexité d'espace. Si vous avez 10, 100 ou même 1 000 pointeurs, la complexité de l’espace est de O (1). Mais si vous voulez avoir des pointeurs 'N', et même si 'N' est aussi petit que 1, la complexité de l'espace est O (N).
J'espère que vous comprenez, O(1) indique un espace constant (10, 100 et 1000 étant constants) et ne varie pas en fonction de la taille de l'entrée (disons N).
Supposons que je crée une structure de données avec une taille fixe et que quoi que je fasse à la structure de données, elle aura toujours la même taille fixe. Les opérations effectuées sur cette structure de données sont donc O (1).
Un exemple, disons que j'ai un tableau de taille fixe 100. Toute opération que je fais, qu'il s'agisse de lire dans le tableau ou de mettre à jour un élément, cette opération sera O(1) sur le tableau. La taille de la matrice (et donc la quantité de mémoire utilisée) ne change pas.
Un autre exemple, disons que j'ai une LinkedList à laquelle j'y ajoute des éléments. Chaque fois que j'ajoute un élément à la liste de liens, il s'agit d'une opération O(N) dans la liste, car j'augmente la quantité de mémoire nécessaire pour contenir tous ses éléments.
J'espère que cela t'aides!