2015-06-13 9 views
5

Ho un problema in elenco collegato ordinato. Non riesco a inserire un oggetto in tempo costante. Se possibile, come posso risolverlo?Come inserire un elemento in una lista concatenata ordinata con una complessità a tempo costante?

E questa volta funzione di complessità è Big-O (N)

template <class ItemType> 
void SortedType<ItemType>::InsertItem(ItemType item) 
{ 
    NodeType<ItemType>* newNode; 
    NodeType<ItemType>* predLoc; 
    NodeType<ItemType>* location; 
    bool moreToSearch; 

    location = listData; 
    predLoc = NULL; 
    moreToSearch = (location != NULL); 
    while (moreToSearch) 
    { 
    if (location->info < item) 
    { 
     predLoc = location; 
     location = location->next; 
     moreToSearch = (location != NULL); 
    } 
    else moreToSearch = false; 
    } 
    newNode = new NodeType<ItemType>; 
    newNode->info = item; 

    if (predLoc == NULL) 
    { 
    newNode->next = listData; 
    listData = newNode; 
    } 
    else 
    { 
    newNode->next = location; 
    predLoc->next = newNode; 
    } 
    length++; 
} 
+2

Non puoi. Se potessi farlo, avresti rivoluzionato l'ordinamento, potresti iniziare con una lista concatenata vuota, che per definizione dovrebbe essere ordinata, aggiungere il primo elemento, ancora ordinata, e poi continuare, il che significherebbe che gli elementi di ordinamento sarebbero O (n), questo è impossibile. –

risposta

4

Non è possibile inserto un elemento nella lista collegata ordinato entro complessità costante di tempo. Ma puoi inserire l'elemento in O (log n) complessità temporale.

how to apply binary search O(log n) on a sorted linked list?

+1

Se si desidera inserire dati in tempo costante, è necessario utilizzare l'elenco non ordinato, altrimenti è necessario effettuare una nuova modifica per inserire i dati nell'elenco ordinato in tempo costante. –

+0

Perché hai risposto in una risposta ??? – Yeahia2508

+0

Dato che è già stato dato, voglio solo aggiungere qualche riga in più. –

0

In realtà non è possibile nella lista collegata ordinato, ma si può inserire un elemento in lista collegata non differenziati con il tempo costante che è Big-O (1).

e anche vedere questo ...
https://www.youtube.com/watch?v=tta6BIiIIFI

2

Non è possibile inserto un elemento nella lista collegata ordinato con O (1) tempo di complessità. È possibile inserire un elemento solo in un elenco collegato non ordinato con complessità temporale O (1). Puoi saperne di più sulla compresenza temporale da questo link http://bigocheatsheet.com/

+2

Se qualcuno vuole dare un downvote, per favore commentami dove è colpa mia. –

Problemi correlati