O que significa memória 1 (1)?


13

Eu tenho a definição de um algoritmo in situ do professor, mas não o entendo.

Algoritmos in situ referem-se a algoritmos que operam com memória Θ (1).

O que isso significa?


3
Você está familiarizado com a notação Landau ?
David Richerby

4
"Um algoritmo é considerado um algoritmo in situ, ou algoritmo no local, se a quantidade extra de memória necessária para executar o algoritmo for O (1), ou seja, [memória] não exceda uma constante, não importa quão grande seja a entrada . Por exemplo, heapsort é um algoritmo de ordenação in situ ". pt.wikipedia.org/wiki/In_situ#Computer_science
Auberon 28/03

@Auberon, deve-se acrescentar que impõe um requisito adicional a O ( 1 ) : que a memória total usada em qualquer chamada em particular não caia abaixo de uma constante, independentemente do tamanho da entrada. Θ(1)O(1)
Olathe

1
@Olathe Eu tenho para ver ainda um algoritmo que usa mais de zero, mas menos do que uma constante de qualquer recurso
Adriann

@adrianN, a criptografia de arquivos AES é feita com o uso de RAM sob um limite superior constante. Você processa um bloco de cada vez, cada bloco precisa da mesma quantidade de RAM a ser processada e a RAM pode ser reutilizada de um bloco para o outro. Um exemplo mais simples é converter todas as letras em um arquivo codificado em ASCII para maiúsculas. Você pode ler em um bloco, digamos, 4096 bytes, do arquivo, processar esses 4096 bytes, gravar os resultados desse bloco e reutilizar a mesma RAM para o próximo bloco.
Olathe

Respostas:


13

Primeiro, vamos descompactar o que significa.Θ(1)

Big , e grande Θ , são classes de funções. Há uma definição formal aqui , mas para os fins da presente pergunta, dizemos que uma função f está em O ( 1 ) se há uma constante c , onde, para todos os x , f ( x ) C . Ou seja, f cresce no máximo tão rápido quanto uma função constante.OΘfO(1)cxf(x)Cf

Big- não significa muito para funções constantes, porque ao descrever o tempo do algoritmo ou o uso do espaço, não há muito abaixo da constante. Mas, para explicar o que isso significa, f Θ ( 1 ) se existem algumas constantes c , d tais que, para todos x , d f ( x ) c . Ou seja, f cresce pelo menos tão rápido e, no máximo, tão rápido quanto uma função constante.ΘfΘ(1)c,dxdf(x)cf

Agora, o que isso tem a ver com o uso de memória? Considere algum algoritmo . Existe alguma função (matemática) que, dada uma entrada n , fornece o uso máximo de memória do seu algoritmo A em qualquer entrada do tamanho n . Vamos chamar essa função m e m .AnAnmem

Então, agora combinamos nossos dois conceitos. Se um algoritmo utiliza de memória, em seguida, a sua função é a utilização da memória em Θ ( 1 ) , o que significa que existe algum d , c tal que, para qualquer entrada, a memória usada é entre d e c .Θ(1)Θ(1)d,cdc

Em resumo, isso significa que o uso de memória do algoritmo está em um intervalo constante, independentemente da entrada.

Geralmente, a função de memória não leva em consideração a memória usada para armazenar a entrada no algoritmo, pois, caso contrário, o uso da memória sempre seria pelo menos .Θ(n)


"não depende efetivamente de sua entrada." - para qual definição de "efetivamente"?
Raphael

Como em, a memória usada pode mudar dependendo da entrada, mas apenas dentro de um intervalo fixo. Sinta-se livre para editá-lo, se você puder pensar em uma redação melhor.
jmite

Eu não acho que exista uma redação melhor do que "a memória usada está entre e c para qualquer entrada". Nem há necessidade de um. dc
Raphael

exemplos ilustrativos simples seriam úteis
vzn 31/03

8

Complexidade constante do espaço do algoritmo

A quantidade de memória que seu algoritmo usa é independente da entrada.

Diz-se que um algoritmo tem complexidade de espaço constante se fizer uso de uma quantidade fixa de espaço. Pode ser variáveis ​​ou uma matriz de exatamente 10 elementos.1010

No entanto, os algoritmos in situ executam a função pretendida na própria entrada e, portanto, requerem muito pouco ou nenhum espaço extra. A entrada geralmente é substituída pela saída à medida que o algoritmo é executado. ( ref )

Os algoritmos in situ não consideram o espaço ocupado pela entrada e levam em conta apenas o espaço extra, enquanto calculam a complexidade do espaço.


3
Isto está incorreto. Por exemplo, pode ser que, para um algoritmo específico, entradas com menos de três caracteres usem 5 bytes de memória enquanto todas as entradas maiores usem um milhão de bytes de memória. Uso de memória desse algoritmo seria definitivamente não ser independente da entrada, mas ele definitivamente iria usar espaço. Para corrigir a declaração, existem limites superiores e inferiores constantes para o uso da memória, independentes da entrada. Θ(1)
Olathe

@Olathe O espaço ocupado por cada entrada em termos de bytes e o número de entradas em termos de contagem não são dois conceitos diferentes?
Prateek

0

Isso significa que a quantidade de memória adicional necessária para o algoritmo não é maior que uma quantidade constante que não depende do tamanho da entrada para uma entrada suficientemente grande.


2
ΘOΩO(x2)f(x)=3x2 f(x)=xΘ(x2)f(x)=3x2f(x)=x
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.