2010-12-31 8 views
5

Niedawno natknąłem się na niektóre struktury danych PHP-SPL i przeglądałem pierwszy, the doubly linked list. Z grubsza wiem, co to jest połączona lista, a teraz widzę, co jest podwójnie połączoną listą, ale moje pytanie brzmi: Co na świecie zrobiłbym z tym?Dlaczego miałbym kiedykolwiek używać DoublyLinkedList w PHP?

Wygląda na to, że równie łatwo będzie można użyć tablicy. Czy jakiś rodzaj informatyki może mnie oświecić?

+3

Całkowicie zgadzam się z twoim sceptycyzmem. –

Odpowiedz

9

W przeciwieństwie do pojedynczo połączonej listy, podwójnie związana lista może iść na listę w dowolnym kierunku, a do wstawiania i usuwania obiektów na środku listy w O (1) (pod warunkiem, że masz już dostęp do miejsca w lista, w której to się stanie, w odróżnieniu od pojedynczo połączonej listy, z tym, że podwójnie powiązane listy są gorsze pod innymi względami i są wyzywająco nie czymś, z czym często się spotykasz w praktyce

+2

Mają swoje zastosowania w pewnych sytuacjach i pewnych algorytmów. Są mniej ważne w PHP, gdzie tablica jest dość dynamiczna. W innych językach, w których rozmiar tablicy jest ustalony na deklaracji, wówczas połączona lista, podwójnie połączona lub nie, może być lepiej dopasowana do rozwiązania. Koszt zmiany rozmiaru tablicy w tych językach może czasami być dużo wyższy niż narzut związany z listą. – RobertB

+0

Implementacja SPL wydaje się nie pozwalać na wstawianie w środku listy - chociaż gdyby tak było, mógłbym zobaczyć wartość. – Will

2

IMHO, szanse na spotkanie coś takiego na wolności jest mało prawdopodobne, chyba że pracujesz dla firmy takiej jak Google lub Facebook, gdzie mają do czynienia z ogromnymi ilościami danych i potrzebują potrzeby, aby zoptymalizować przechodzenie list, aby umożliwić usuwanie i dodawanie węzłów. Zasadą jest, że Jeśli twoja aplikacja jest wolna, najprawdopodobniej zrobisz coś złego w innym miejscu (wiem, że to nie jest twoje pytanie, ale pomyślałem, że po prostu to wyrzucę;)).

W przypadku małych i średnich witryn z małymi i średnimi wymaganiami dotyczącymi danych powiedziałbym, że wystarczałaby tablica (nie wspominając o bardziej czytelnym i zrozumiałym dla przeciętnego twórcy stron internetowych;)).

3

Wybór odpowiedniej struktury danych nie musi koniecznie dotyczyć tego, co jest dla Ciebie łatwe, ale to, co wymaga mniej pamięci i jest szybsze dla urządzenia. W przypadku listy podwójnie połączonej przydatne byłoby, gdyby trzeba było wykonać iterację w dowolnym kierunku, wstawić w dowolnym miejscu ze stałą prędkością, ale nie potrzebować dostępu losowego.

Teraz biorąc pod uwagę, że w PHP zwykle pracujesz z małymi zestawami danych, nie musisz się zbytnio martwić o takie rzeczy. A jeśli pracujesz z dużymi zestawami danych, może lepiej byłoby napisać kod w C. Więc jest mało prawdopodobne, że kiedykolwiek skorzystasz z takich struktur w PHP, aby kiedykolwiek z nich skorzystać.

Ale może istnieć ten obszar pośredni, w którym użycie jednej ze struktur danych Spl obniża zużycie pamięci na tyle, aby było godne użycia. (Zrobiłem prosty test, a 1M liczb całkowitych w tablicy zajmuje 200MB, a podwójnie połączona lista zajmuje 150MB Czas na iteracje nad nimi był bardzo podobny.)

Powiązane problemy