Pergunta

Comparando Linked e matrizes ao mesmo tempo, comparando as suas diferenças com dados ordenados e não ordenados

  • Adicionar
  • Remover
  • Recuperação
  • Sorting
  • A velocidade geral
  • uso geral da memória

perguntas reais

Discutir a viabilidade da implementação de um conjunto de dados não ordenada como uma lista ligada em vez de uma matriz. Quais seriam as vantagens e desvantagens ser em termos de inserção, remoção, recuperação, memória do computador, ea velocidade da aplicação?

Discutir a possibilidade de implementar um conjunto de dados classificados como uma lista ligada em vez de uma matriz. Quais seriam as vantagens e desvantagens ser em termos de inserção, remoção, recuperação, memória do computador, ea velocidade da aplicação?

Com base em suas respostas às perguntas anteriores, resumem os custos e benefícios do uso de listas ligadas em um aplicativo.

As minhas respostas / entrada:

Linked tem que alocar toda a memória de um novo nó é adicionado, útil ao adicionar muitos nós e tamanho continua a mudar, mas geralmente mais lento ao adicionar alguns elementos

Arrays memória alocada no início da execução do programa, lista de redimensionamento lenta (adicionando muitos elementos lento se tem que redimensionar)

A recuperação é mais rápida em ordem devido à indexação

Adicionar / remover mais rapidamente no LinkedList devido a ponteiros

Foi útil?

Solução

Em vs. indiferenciados ordenados. Eu vou fazer um, então você realmente precisa fazer sua lição de casa

Stackoverflow marcação realmente precisa de tabelas para fazer este. Você quer dizer como "caro" a operação é para a matriz / indiferenciados, classificado / matriz, /-lista ligada indiferenciados, classificado / ligada-list

Um último ponto: "velocidade da aplicação" é uma dica para considerar mais do que apenas a velocidade das operações individuais.

* Adding

Unsorted: Array adicionando é O (1), a menos redimensionamento necessário - basta adicioná-la até o fim. Você pode querer discutir uma estratégia de redimensionamento que minimiza a sobrecarga (dica: não basta aumentar o tamanho por um)

Ordenado: Array adicionando é O (n) - encontrar o lugar para adicionar é O (log (n)), mas você precisa mover metade dos elementos up (em média) para fazer romm para o novo

Unsorted:. Lista ligada é O (1) - adicioná-lo para o início ou fim da lista

Ordenado:. Lista ligada é O (n) - embora você pode adicionar novamente o elemento em O (1), você precisa fazer a varredura através de metade da lista, em média, para encontrar o lugar para colocá-lo

Assim, ao longo de você para o resto. Postar uma resposta, e vamos criticá-lo, mas para obter o máximo de seu (presumivelmente) educatiom caro, você realmente precisa fazer algum trabalho sobre isso:)

* Removing
* Retrieving
* Sorting
* Overall speed
* Overall memory usage

Outras dicas

Não sei o que classe isto é para, mas para um programa de CS, você terá que fazer melhor do que "é lento" e "é rápido". Tentar quantificar que, em termos de número-de-operações necessário. Você deve estar familiarizado com a máquina normalmente utilizada para tal quantificação -uso que as máquinas.

Here is a C++ code that illustrates that sorting the data miraculously makes the code faster than the unsorted version. Let’s try out a sample C++ program to understand the problem statement better.

Programa // CPP para demonstrar o processamento // tempo de matriz classificada e não ordenada

#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;

const int N = 100001;

int main()
{
    int arr[N];

    // Assign random values to array
    for (int i=0; i<N; i++)
        arr[i] = rand()%N;

    // for loop for unsorted array
    int count = 0;
    double start = clock();
    for (int i=0; i<N; i++)
        if (arr[i] < N/2)
            count++;

    double end = clock();
    cout << "Time for unsorted array :: "
         << ((end - start)/CLOCKS_PER_SEC)
         << endl;
    sort(arr, arr+N);

    // for loop for sorted array
    count = 0;
    start = clock();

    for (int i=0; i<N; i++)
        if (arr[i] < N/2)
            count++;

    end = clock();
    cout << "Time for sorted array :: "
         << ((end - start)/CLOCKS_PER_SEC)
         << endl;

    return 0;
}

// saída do código

Output :

Execution 1:
Time for an unsorted array: 0.00108
Time for a sorted array: 0.00053

Execution 2:
Time for an unsorted array: 0.001101
Time for a sorted array: 0.000593

Execution 3:
Time for an unsorted array: 0.0011
Time for a sorted array: 0.000418
Observe that time taken for processing a sorted array is less as compared to an unsorted array. The reason for this optimization for a sorted array is branch prediction.

@ Paul: Obrigado

  • Remover

Unsorted & classificadas: Array remoção é O (n) - tem que mover todos os elementos sobre a preencher 'buraco'

Unsorted & classificadas: lista ligada é O (1) - Alterar ponteiros conforme necessário

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top