Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Stos a tablica

Ostatnio zmodyfikowano 2017-04-23 20:40
Autor Wiadomość
michal11
» 2017-04-23 19:25:15
skąd masz w ogóle takie informacje, że stos jest szybszy?
P-160436
latajacaryba
Temat założony przez niniejszego użytkownika
» 2017-04-23 19:49:01
Nie pamiętam, gdzieś tak czytałem. Takie porównanie było też u Zelenta; mówił on, że tablica to biblioteczka do której trzeba wstawać i podchodzić, co zajmuje czas, a stos leży na biurku i szybciej sie z niego korzysta.:https://youtu.be/_V7a1Gwuj5k?t=6m25s

 No cóż, skoro nie jest szybszy to w czym jest lepszy od tablicy, skoro możemy odczytywać tylko ostatni element z góry?
P-160437
michal11
» 2017-04-23 20:17:13
Stos i tak zwykle jest implementowany jako tablica więc nie wiem dlaczego (i w jaki sposób) miałby być szybszy.

I było to już mówione stos nie jest ani lepszy ani gorszy od tablicy, służy po prostu do rozwiązywania innych problemów.
P-160441
pekfos
» 2017-04-23 20:40:05
Takie porównanie było też u Zelenta; mówił on, że tablica to biblioteczka do której trzeba wstawać i podchodzić, co zajmuje czas, a stos leży na biurku i szybciej sie z niego korzysta.
Fragment filmu mówił (chyba) o stosie w sensie stosu wywołań (esp), a chodzenie do książek miało chyba symbolizować cache miss. Może to gdzieś jeszcze dodatkowo wyjaśnił, ale gdyby widz się tego nie domyślił i zasugerował tytułem filmu, to w zasadzie zostają bzdury.

No cóż, skoro nie jest szybszy to w czym jest lepszy od tablicy, skoro możemy odczytywać tylko ostatni element z góry?
Stos to koncept, nie zamiennik tablicy. Jak sobie zobaczysz adapter std::stack<>, to zobaczysz że można do niego wstawić dowolny kontener zgodny z STL, ale będziesz mieć do dyspozycji tylko metody typu push(), pop(), empty(). To takie wymuszanie, że trzymasz się konceptu. W praktyce to jak ze wzorcami projektowymi, dostosowujesz do potrzeb i często narusza się wymaganie używania tylko elementu z wierzchu stosu. Stos wywołań to taki przykład, który zawsze nazywa się 'stosem', nikt tego inaczej nie nazywa, ale poza rozkazami realizującymi typowe operacje stosowe, możesz ze stosu korzystać jak normalnego obszaru pamięci i nie znajdziesz kodu, który by tego nie robił.
Jeśli jednak koniecznie chcesz porównywać tablicę ze stosem, to chociaż zdefiniuj dokładnie, co masz na myśli pod tymi terminami. Tablica int tab[123]; napisana w funkcji znajduje się na stosie (wywołań), więc to stos, czy tablica? Stos jest często realizowany jako ciągły obszar pamięci, czyli jako tablica, ale to jednak stos..
Struktura danych, to nie coś co występuje w próżni. Zawsze musisz to połączyć z jakimś algorytmem, choćby to była tylko dereferencja adresu z offsetem, jak w przypadku tablicy. Na tablicy możesz zrobić stos, dodając jedną zmienną kontrolną, kolejkę (2 zmienne opisujące bufor cykliczny), drzewo (tablica węzłów wiązanych między sobą, albo coś w stylu stogu, gdzie powiązania węzłów to arytmetyka na indeksach). Tą tablicę teraz sobie 'rzuć na biurko' i bądź teraz mądry i porównuj.
P-160443
1 « 2 »
Poprzednia strona Strona 2 z 2