Que signifie la mémoire Θ (1)?


13

J'ai la définition d'un algorithme in situ du professeur, mais je ne la comprends pas.

Les algorithmes in situ font référence aux algorithmes qui fonctionnent avec la mémoire Θ (1).

Qu'est-ce que ça veut dire?


3
Connaissez-vous la notation Landau ?
David Richerby

4
"Un algorithme est dit être un algorithme in situ, ou un algorithme sur place, si la quantité de mémoire supplémentaire requise pour exécuter l'algorithme est O (1), c'est-à-dire que [la mémoire] ne dépasse pas une constante, quelle que soit sa taille l'entrée . Par exemple, heapsort est un algorithme de tri in situ « . en.wikipedia.org/wiki/In_situ#Computer_science
Auberon

@Auberon, il faut ajouter que impose une exigence supplémentaire à O ( 1 ) : que la mémoire totale utilisée dans une invocation particulière ne tombe pas en dessous d' une constante quelle que soit la taille de l'entrée. Θ(1)O(1)
Olathe

1
@Olathe Je n'ai pas encore vu d'algorithme qui utilise plus de zéro mais moins d'une constante de n'importe quelle ressource
adrianN

@adrianN, le cryptage AES des fichiers se fait avec l'utilisation de la RAM sous une limite supérieure constante. Vous traitez un bloc à la fois, chaque bloc a besoin de la même quantité de RAM pour être traité, et la RAM peut être réutilisée d'un bloc à l'autre. Un exemple plus simple consiste à convertir toutes les lettres d'un fichier encodé en ASCII en majuscules. Vous pouvez lire un bloc, disons 4096 octets, du fichier, traiter ces 4096 octets, écrire les résultats de ce bloc et réutiliser la même RAM pour le bloc suivant.
Olathe

Réponses:


13

Commençons par déballer ce que signifie .Θ(1)

Big et big Θ sont des classes de fonctions. Il y a une définition formelle ici , mais aux fins de cette question, nous disons qu'une fonction f est en O ( 1 ) s'il y a une constante c où, pour tout x , f ( x ) C . Autrement dit, f croît au plus aussi vite qu'une fonction constante.OΘfO(1)cxf(x)Cf

Big- ne signifie pas grand-chose pour les fonctions constantes, car lors de la description du temps de l'algorithme ou de l'utilisation de l'espace, il n'y a pas beaucoup en dessous de la constante. Mais pour expliquer ce que cela signifie, f Θ ( 1 ) s'il existe des constantes c , d telles que, pour tout x , d f ( x ) c . C'est-à-dire que f croît au moins aussi vite, et au plus aussi vite, en fonction constante.ΘfΘ(1)c,dxdf(x)cf

Maintenant, qu'est-ce que cela a à voir avec l'utilisation de la mémoire? Considérons un algorithme . Il existe une fonction (mathématique) qui, étant donnée une entrée n , donne l'utilisation maximale de la mémoire de votre algorithme A sur toute entrée de taille n . Appelons cette fonction m e m .AnAnmem

Alors maintenant, nous combinons nos deux concepts. Si un algorithme utilise la mémoire , sa fonction d'utilisation de la mémoire est en Θ ( 1 ) , ce qui signifie qu'il existe des d , c tels que, pour toute entrée, la mémoire utilisée se situe entre d et c .Θ(1)Θ(1)d,cdc

En bref, cela signifie que l'utilisation de la mémoire de l'algorithme est dans une plage constante, quelle que soit l'entrée.

Habituellement, la fonction de mémoire ne tient pas compte de la mémoire utilisée pour stocker l'entrée de l'algorithme, car sinon l'utilisation de la mémoire serait toujours d'au moins .Θ(n)


"ne dépend pas efficacement de sa contribution." - pour quelle définition de "effectivement"?
Raphael

Comme dans, la mémoire utilisée peut changer en fonction de l'entrée, mais uniquement dans un intervalle fixe. N'hésitez pas à le modifier si vous pouvez penser à une meilleure formulation.
jmite

Je ne pense pas qu'il y ait une meilleure formulation que "la mémoire utilisée est entre et c pour n'importe quelle entrée". Il n'y en a pas non plus besoin. dc
Raphael

de simples exemples illustratifs seraient utiles
vzn

8

Complexité d'espace constante de l'algorithme

La quantité de mémoire utilisée par votre algorithme est indépendante de l'entrée.

On dit qu'un algorithme a une complexité d'espace constante s'il utilise une quantité fixe d'espace. Il peut s'agir de variables ou d'un tableau d'exactement 10 éléments.1010

Cependant, les algorithmes in situ remplissent leur fonction prévue sur l'entrée elle-même et nécessitent donc très peu ou pas d'espace supplémentaire. L'entrée est généralement remplacée par la sortie lors de l'exécution de l'algorithme. ( ref )

Les algorithmes in situ ne prennent pas en compte l'espace occupé par l'entrée et ne prennent en compte que l'espace supplémentaire, lors du calcul de la complexité de l'espace.


3
Ceci est une erreur. Par exemple, il se peut que, pour un algorithme particulier, les entrées de moins de trois caractères utilisent 5 octets de mémoire tandis que toutes les entrées plus grandes utilisent un million d'octets de mémoire. L'utilisation de la mémoire de cet algorithme ne serait certainement pas indépendante de l'entrée, mais il utiliserait certainement l' espace . Pour corriger l'instruction, il existe des limites supérieures et inférieures constantes à l'utilisation de la mémoire qui sont indépendantes de l'entrée. Θ(1)
Olathe

@Olathe L'espace occupé par chaque entrée en termes d'octets et le nombre d'entrées en termes de nombre ne sont-ils pas deux concepts différents?
Prateek

0

Cela signifie que la quantité de mémoire supplémentaire requise pour l'algorithme n'est pas supérieure à une quantité constante qui ne dépend pas de la taille d'entrée pour une entrée suffisamment grande.


2
ΘOΩO(x2)f(x)=3x2 f(x)=xΘ(x2)f(x)=3x2f(x)=x
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.