2015-06-13 15 views
5

Mam problem z posortowaną połączoną listą. Nie mogę wstawić elementu w stałym czasie. Jeśli to możliwe, niż jak mogę to rozwiązać?Jak wstawić element na posortowanej liście połączonej w ramach złożoności o stałym czasie?

I tym razem funkcja złożoności jest 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

Nie możesz. Gdybyś mógł to zrobić, zrewolucjonizowałbyś sortowanie, możesz zacząć od pustej, połączonej listy, która z definicji zostanie posortowana, dodaj pierwszy element, nadal posortowany, a następnie kontynuuj, co oznaczałoby, że sortowanie będzie miało postać O (n), to jest niemożliwe. –

Odpowiedz

4

Nie jest możliwe, aby wstawka elementu w posortowanej listy połączonej w stałej czasowej złożoności. Ale możesz wstawić element w złożoności czasu O (log n).

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

+1

Jeśli chcesz wstawić dane w stałym czasie, musisz użyć nieposortowanej listy, w przeciwnym razie musisz zrobić nowe algo, aby wstawić dane w posortowanej liście w stałym czasie. –

+0

Dlaczego odpowiedziałeś w odpowiedzi ??? – Yeahia2508

+0

Ponieważ ans już dano, chcę tylko dodać dodatkową linię. –

0

Właściwie nie jest to możliwe w połączonej listy posortowane ale można wstawić element niesegregowanych listy połączonej ze stałą czasową, która jest Big-O (1).

i patrz także ten ...
https://www.youtube.com/watch?v=tta6BIiIIFI

2

Nie jest możliwe, aby wstawka elementu w posortowanej listy połączonej z O (1) złożoności czasowej. Możesz wstawić tylko pozycję na niesortowanej liście połączonej ze złożonością czasową O (1). Możesz dowiedzieć się więcej o czasie kompilacji pod tym linkiem http://bigocheatsheet.com/

+2

Jeśli ktoś chce oddać głos, proszę, skomentuj, gdzie jest moja wina. –