Como Arrays Dinâmicos Diferem de Arrays Estáticos?
Arrays são uma estrutura de dados fundamental em ciência da computação. Todos os arrays armazenam coleções ordenadas de dados, mas dependendo do seu tipo, eles podem funcionar de maneira diferente nos bastidores.
O comportamento subjacente deles pode ter um efeito importante na eficiência do programa, então vamos aprender sobre arrays dinâmicos e estáticos e suas diferenças, para que você possa escolher o mais eficiente para o seu programa.
Começaremos com arrays estáticos.
Arrays estáticos têm um tamanho fixo. Eles armazenam elementos em locais de memória adjacentes.
O tamanho de um array estático é determinado quando o array é inicializado. Uma vez que aquele bloco específico de memória é alocado, ele é fixo e não pode ser alterado enquanto o programa está em execução. Esta é uma característica chave dos arrays estáticos.
Armazenar elementos em locais de memória adjacentes torna o processo de recuperação de dados mais eficiente porque o programa pode armazenar a localização do primeiro elemento e então usar índices para fazer cálculos simples e encontrar os outros elementos na memória.
Graças a isso, acessar os valores de um array estático leva tempo constante
O(1), o que é muito eficiente.
Você pode usar um array estático quando souber o número de elementos que serão armazenados com antecedência. Também é útil quando os valores serão acessados com muita frequência, já que a operação de acesso é muito eficiente.
No entanto, essa estrutura de dados não pode crescer ou diminuir, então se o número de elementos que serão armazenados pode variar, você deve usar um array dinâmico em vez disso.
Tentar aumentar o tamanho de um array estático envolveria criar um novo array e copiar todos os elementos do array antigo para um novo, o que é ineficiente. Nesse caso, um array dinâmico seria muito melhor porque ele lida com esse processo automaticamente.
Python não inclui arrays estáticos tradicionais como estruturas de dados embutidas.
Mas outras linguagens de programação, como Java, as suportam. Este é um exemplo de um array estático em Java que pode armazenar três inteiros:
int[] numbers = new int[3];
Arrays em Python são dinâmicos, então vamos dar uma olhada neles.
Arrays dinâmicos são mais flexíveis porque podem crescer ou encolher automaticamente enquanto o programa está em execução.
Eles funcionam por meio de um mecanismo automático de redimensionamento que copia os elementos para um novo array quando o array original está cheio. O processo é feito de forma eficiente porque o tamanho do novo array é escolhido de uma maneira eficiente que torna essas operações computacionalmente caras menos frequentes.
Acessar os elementos de um array dinâmico leva tempo constante O(1), então essa operação é muito eficiente.
Inserir um elemento no meio do array leva tempo linear O(n) porque os elementos após ele precisam ser realocados.
Inserir um elemento no final do array leva tempo constante O(1) se ainda houver espaço disponível no array dinâmico, mas se o array estiver cheio e precisar ser redimensionado, essa operação tem complexidade O(n).
Você deve usar arrays dinâmicos quando você não souber antecipadamente o número de valores que precisará armazenar no array. Eles também são úteis quando você for inserir e deletar elementos com frequência.
A estrutura de dados list embutida do Python funciona como um array dinâmico. Você pode criar uma lista escrevendo os elementos dentro de colchetes, separados por vírgulas.
numbers = [3, 4, 5, 6]
Você pode acessar um elemento escrevendo o nome da variável que contém a lista, seguido por colchetes, e dentro dos colchetes, o índice correspondente.
Os índices começam em 0 para o primeiro elemento e são incrementados em 1 para cada elemento subsequente:
numbers[0] # 3
numbers[1] # 4
numbers[2] # 5
numbers[3] # 6
Para atualizar um valor, você só precisa reatribuí-lo:
numbers[2] = 16
Você pode adicionar elementos à lista com o método .append():
numbers.append(7)
Você pode inserir elementos em um índice específico com o método .insert(), passando o índice como o primeiro argumento e o próprio elemento como o segundo argumento.
numbers.insert(3, 15)
Você pode remover um elemento em um índice específico com o método .pop():
numbers.pop(2)
Se você não especificar o índice, .pop() removerá o último elemento.
Existem outros métodos de lista embutidos que você pode verificar na documentação para adicionar e remover elementos com bastante facilidade.
Esse é o poder dos arrays dinâmicos, ou listas neste caso.
Em geral, você deve usar arrays estáticos quando souber o número de elementos com antecedência e precisar acessá-los frequentemente e usar arrays dinâmicos quando o número de elementos for desconhecido ou variável ao longo do tempo.
Você deve sempre considerar a troca entre a simplicidade dos arrays estáticos e a flexibilidade dos arrays dinâmicos. Eles são úteis para casos de uso e cenários específicos. Ser capaz de escolher o melhor para um dado problema faz parte das habilidades de resolução de problemas que você desenvolverá gradualmente com a prática.Este módulo não possui perguntas. Marque como concluído.