Czy problemy ze strukturami danych są wspólne dla początkujących? [Zamknięte]

17

Biorę swój drugi kurs na Javie. Wchodzimy w struktury danych. Zrobiłem zadanie na połączonej liście, a teraz stosie. Trudno mi było z połączoną listą. Stos sprawił mi trochę kłopotów, ale był o wiele łatwiejszy.

Czy powinienem martwić się trudnościami z tymi algorytmami i strukturami danych? Po prostu czuję, że tak naprawdę tego nie zrozumiałem.

Śmierdziel
źródło
Przykład połączonej listy w świecie rzeczywistym - stackoverflow.com/questions/644167/…
pramodc84,

Odpowiedzi:

44

Myślę, że nie wolno wam nie rozumieć tych rzeczy, ponieważ są one naprawdę fundamentalne. To powiedziawszy, ich niezrozumienie nie jest niczym złym. Możesz wyjaśnić dziecku powiązaną listę. Jeśli więc nauczyciel nie wyjaśnił ci ich, to tyle samo ich wina. Więc nie powinieneś tracić czasu na martwienie się, ale raczej staraj się znaleźć ludzi, którzy mogą ci to wytłumaczyć. Często kolega jest o wiele lepszym nauczycielem niż nauczyciel akademicki.

Pomyśl o pociągach

Wyobraź sobie, że masz zestaw wagonów kolejowych, w których każdy wagon ma wystarczającą pojemność, aby pomieścić jedną część danych. Każdy wózek ma na swoim końcu hak, który można przymocować z przodu innego wózka.
Daje to w rzeczywistości połączoną listę:

  • pusta lista: pociąg, w którym nie ma wagonów (a zatem nie ma danych)
  • dodawanie elementu: dodaj nowy wagon zawierający element przed pociągiem i zaczep go do reszty pociągu
  • usuwanie elementu: znajdź karetkę zawierającą ten element. Wyjmij go (możesz potrzebować tutaj dźwigu :)), zaczep hak przed, a potem hak.
  • zastępując element: znajdź karetkę zawierającą stary element. Wymień stary element na nowy.
  • wstawianie elementu zaraz za drugim: znajdź karetkę zawierającą element, po którym chcesz wstawić. Włóż za nim nowy wagon, który jest odpowiednio zaczepiony (nie chcemy, aby pociąg się rozpadł) i włóż do niego nowy element.

W przeciwieństwie do tego, możesz myśleć o tablicy jako pociągu z określoną liczbą wagonów, których nie można w żaden sposób zmienić. Wszystko, co możesz zrobić, to zmienić dane w nich zawarte. Ten model wyjaśnia również wiele problemów, jakie macie tablice:

  • Jeśli chcesz wstawić jeden element przed drugim, będziesz musiał przenieść wszystkie następujące elementy do następnej karetki.
  • Jeśli chcesz usunąć jeden element, musisz przenieść wszystkie następujące elementy o jeden wózek do przodu.
  • Jeśli potrzebujesz pociągu z większą liczbą wagonów, będziesz musiał zbudować nowy, ponieważ nie możesz po prostu przygotować wagonu. Z drugiej strony znalezienie powozów w tablicy jest znacznie łatwiejsze, ponieważ można je po prostu numerować na stałe (ich kolejność nigdy się nie zmieni).

Jeśli chodzi o stos: „stos” to mniej struktura danych niż pomysł. Idea stosu polega na tym, że działa on podobnie jak stos książek. Możesz umieścić książki tylko na wierzchu stosu i zawsze możesz zdjąć wierzchnią książkę ze stosu (przynajmniej jeśli książki są wystarczająco ciężkie).
Biorąc to pod uwagę, połączoną listę można wykorzystać jako stos, jeśli myślisz o danych w wagonach jak o książkach, a książkę w pierwszej najbardziej przewożonej o górze stosu.

Mam nadzieję, że to ci pomogło. Może nie. Może jesteś bardziej wizualny. W takim przypadku proponuję znaleźć kogoś, kto jest dobry w udzielaniu wyjaśnień wizualnych i wytłumaczy ci to. To nie potrwa długo, ale absolutnie będzie tego warte.

Można teraz z tym walczyć. Ale samo zaakceptowanie tego nie jest opcją na dłuższą metę.

back2dos
źródło
2
Fajna odpowiedź! Uświadomiłem sobie, że można nauczyć dzieci podstawowych struktur danych poprzez flash / inną grę z szeregiem celów do zrealizowania. Ten sam pomysł pociągów może również pomóc dzieciom w uchwyceniu liczb binarnych, jeśli każdy wagon jest 2x większy i mniejszy niż jego sąsiad.
Job
1
Ok, teraz, kiedy już to masz, przejdźmy do struktur danych z wieloma linkami. Pociąg ma więc zaczep z boku, który może zaczepić inny zestaw samochodów. Ale poręcz dla tych samochodów przesuwa się wzdłuż pierwszego toru ...
Philip
12

Nie powiedziałbym, że „powinieneś się tym martwić”, ale sam fakt, że zdajesz sobie sprawę ze swoich słabych punktów, pokazuje, że wiesz dokładnie, gdzie lepiej się uczyć. Myślę, że ta postawa będzie ci dobrze służyć i na dłuższą metę będzie dobrze.

Dave Nay
źródło
6

Cytując mojego ulubionego nauczyciela CSCI:

"Panic, but panic early."

Struktury danych brzmią ciężko, prawda? Dla mnie to brzmi abstrakcyjnie i trochę skomplikowane, a przede wszystkim ... ważne!

Struktury danych to niezbędny kurs. I często się zmaga, ale idź dalej! Tak długo, jak zjesz swoje Pszenice i utrzymasz je, dotrzesz do tęczy z bagwypełnionym generic items pod spodem.

Adel
źródło
Wczesna panika oznaczałaby rezygnację? Po strukturach danych są też wymagania matematyczne, algorytmy, system operacyjny, sztuczna inteligencja, kompilatory, teoria obliczeń ... to nie robi nic dziwnego, ale może fakt, że nie jest się studentem pierwszego roku lub studentem drugiego roku, pomaga nawet choć sprawy stają się coraz trudniejsze.
Job
3

Bardzo dobre punkty w innych odpowiedziach, tylko jedna uwaga do dodania: Listy połączone IMO mogą być trudniejsze niż np. Stosy dla wielu osób, ponieważ opierają się na pośredniości (wyrażone za pomocą referencji / wskaźników ). I te koncepcje bazowe mogą być trudne do uchwycenia .

Péter Török
źródło
3

Struktury danych były pierwszą „twardą” klasą, jaką wziąłem; użyliśmy Fortran 77 zamiast Java, ale koncepcje są w dużej mierze takie same.

Zajęło mi tydzień dłużej niż moi koledzy z klasy, aby przejrzeć koncepcję połączonej listy; Przerwałem zadanie, ale po kilku nieco frustrujących sesjach z moim profesorem w końcu kliknęło (dosłownie; usłyszałem „kliknięcie” w mojej głowie, kiedy w końcu zrozumiałem).

Każdy ma problemy gdzieś w swoim programie CS (chyba że są dziwakami). Jeśli rozumiesz, gdzie są twoje słabości i jak je rozwiązać, naprawdę nie masz się czym martwić.

John Bode
źródło
1
Nie panikuj, kontynuuj pracę i poczekaj na kliknięcie ...
NWS
2

Czy miałeś problem ze zrozumieniem połączonej listy lub po prostu z implementacją?

Nie jest niczym niezwykłym, że nowy programista ma tam trudności, ponieważ może to być pierwszy raz, gdy musisz pomyśleć o tym, co to naprawdę znaczy, gdy piszesz:

list.head = null;
Element e = new Element(...);
e.next = list.head;
list.head = e;

W tym samym ćwiczeniu wszystko mnie rozwaliło w ALGOL / W, ponieważ nie do końca rozumiałem semantykę języka. Rok później ledwo pamiętam, dlaczego miałem trudności.

Kevin Cline
źródło
1

Pewne obszary rozwoju oprogramowania będą trudniejsze niż inne. Niezależnie od tego, czy są to określone algorytmy, pewne wzorce projektowe lub określone procedury będą się różnić w zależności od osoby. Uważam, że muszę użyć czegoś w prawdziwym programie, zanim w pełni to zrozumiem.

Bardziej martwiłbym się, gdyby ktoś twierdził, że wie wszystko i nigdy nie miał problemów z nauką czegoś.

Osobiście nigdy nie wydawało mi się, że mam problemy z połączonymi listami, ale potem przez 8 lat pracowałem nad programem, który wykorzystywał je wszędzie, więc codziennie z nimi pracowałem. Tak długo, jak wiesz, gdzie znaleźć informacje potrzebne do odświeżenia pamięci i znasz obszary, w których masz „kłopoty”, powinieneś być w porządku.

ChrisF
źródło
Myślę też, że pomogłoby mi, gdybym mógł współdziałać z programem, który również korzysta z tych struktur danych. Jestem na etapie, w którym zadaję sobie pytanie, dlaczego byłyby one przydatne?
Brock
0

Miałem problem z rachunkiem różniczkowym i musiałem wziąć to drugi raz. Za drugim razem odkryłem, że jestem mądry, ale pierwszy nauczyciel matematyki był w zasadzie bezużyteczny :)

Znajdziesz w IT wielu ludzi, którzy nie potrafią dobrze się komunikować, nawet nauczycieli. Z drugiej strony, niektórzy ludzie z branży IT są naprawdę świetnymi pisarzami i mistrzami komunikacji.

Czasami czytanie poza domem może naprawdę pomóc. Książki komputerowe różnią się znacznie jakością. Wejdź na Amazon i przekonaj się, jaką książkę lubią ludzie.

Powodzenia.

Glen P.
źródło