DEV Community

Cover image for O que é um problema in-place?
Felipe Cezar
Felipe Cezar

Posted on

O que é um problema in-place?

Um problema in-place é um problema que deve ser resolvido sem utilizar memória adicional significativa, ou seja, você deve modificar os dados diretamente na estrutura existente, em vez de criar cópias ou novas estruturas de dados.

Características de problemas in-place

  1. Trabalho direto nos dados originais:

    • Você manipula o array, lista, ou estrutura diretamente, alterando os valores.
    • O resultado final substitui os valores originais.
  2. Uso mínimo de memória extra:

    • É permitido usar algumas variáveis auxiliares (fixas, como ponteiros), mas não estruturas adicionais de tamanho proporcional ao input.
  3. Evita duplicação de dados:

    • Ao trabalhar in-place, você economiza memória porque não precisa duplicar os dados ao processá-los.

Exemplo prático

Imagine que você quer remover os elementos duplicados de um array, mantendo apenas os valores únicos.

Solução não in-place

Aqui criamos um novo array para armazenar apenas os elementos únicos:

nums = [1, 1, 2, 3, 3]
result = []
for num in nums:
    if num not in result:
        result.append(num)
print(result)  # Saída: [1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

Nesta solução, result é um novo array, o que significa que não é in-place.

Solução in-place

Aqui modificamos o array original diretamente:

nums = [1, 1, 2, 3, 3]
i = 0
for j in range(1, len(nums)):
    if nums[j] != nums[i]:
        i += 1
        nums[i] = nums[j]
print(nums[:i+1])  # Saída: [1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

Nesta solução, os elementos duplicados são sobrescritos diretamente no array original, e não usamos memória extra, além das variáveis i e j.


Por que resolver problemas in-place?

  1. Eficiência de memória:

    • Em cenários onde a memória é limitada (por exemplo, grandes volumes de dados), é mais eficiente trabalhar diretamente na estrutura existente.
  2. Exercício de lógica:

    • Resolver in-place requer manipular índices, ponteiros ou variáveis de controle para realizar operações. É uma ótima prática para melhorar suas habilidades em lógica e algoritmos.
  3. Problemas reais:

    • Em linguagens como C ou C++, onde a alocação de memória é mais complexa, manipular arrays in-place é comum.

Diferença entre in-place e out-of-place

Característica In-place Out-of-place
Uso de memória extra Nenhuma ou mínima Cria novas estruturas (arrays, listas, etc.)
Modifica estrutura original Sim Não, cria uma nova estrutura
Complexidade espacial O(1) (uso fixo de memória) O(n) (proporcional ao tamanho do input)

Top comments (0)