/ / Java - Complexidade de espaço com variável - java, space-complexity

Java - Complexidade de espaço com variável - java, complexidade de espaço

A complexidade espacial é aqui O (n)? Como se k aumenta em 5, minha variável p também aumentaria em 5.

Tudo o que esse método faz agora é obter o nó em k. Por exemplo: 1-> 5-> 3, quando k = 2, o nó é 5.

public ListNode reverseKGroup(ListNode head, int k) {
int p = 1;

while (p < k) {
if (head.next == null) {
return head;
}
head = head.next;
p++;
}

return head
}

Respostas:

4 para resposta № 1

Considerando estritamente seu algoritmo, ele tem uma complexidade de espaço O (1). Sua entrada é um cabeçalho de uma lista e um número k, mas o seu algoritmo não consome mais espaço do que apenas uma referência head e um número p. Na minha opinião, a lista existente não pertence à complexidade do seu método, mas sua complexidade de tempo é O (N).

--- responda a pergunta de Theo no comentário:

p é um número (neste caso, do tipo primitivo int, então leva 4 bytes - tamanho constante). E se p aumenta, não significa, leva mais espaço,mas que um número mais alto é armazenado em. p = 5 significa que os bytes seguintes estão definidos: "0,0,0,5", para p = 257, os bytes são definidos: "0,0,1,2". Eu suponho, a JVM armazena a data em ordem de byte big endian, então o primeiro zero "s está representando os bytes maiores. Com little endian, a ordem de byte seria invertida.

Claro, você está certo, que por muito grande N, o inteiro de 32 bits não é suficiente. Portanto, considerando estritamente este fato, os bits O (log (N)) são necessários para armazenar números de até N. Por exemplo. um número 2 ^ 186 precisa de 187 bits para serem armazenados (um 1 e 186 zeros).

Mas, na realidade, quando se trabalha com dados "usuais", você não espera uma quantia tão grande. Como só deve exceder o registro de 32 bits (um int número), você precisaria ter 2 ^ 32 entradas de dados (1 entrada = 4 bytes para uma próxima referência, pelo menos 4 bytes para o valor Object referência, e o tamanho do objeto em si = pelo menos8 bytes), ou seja, 2 ^ 35 bytes = 32 gigabyes. Portanto, quando um número é usado, geralmente é considerado uma complexidade espacial constante. Depende da tarefa e das circunstâncias.


1 para resposta № 2

Dependendo se você considera pré-existenteestrutura parte de sua complexidade de espaço, a complexidade de espaço é O (1) ou O (N), onde N é o comprimento da lista que está sendo operada, uma vez que você não adiciona novos nós e apenas faz referência a nós existentes.

k só importa para a complexidade do tempo.


0 para resposta № 3

O único espaço que este algoritmo usa é o espaço para int p, que é constante, independentemente da entrada, então a complexidade do espaço é O (1). A complexidade do tempo é de fato O (N).