Чи виникають проблеми із структурами даних, які часто трапляються для початківців? [зачинено]


17

Я беру свій другий курс на Яві. Ми потрапляємо в структури даних. Я зробив завдання за пов'язаним списком, і тепер стек. Мені було важко зі зв’язаним списком. Стек доставив мені трохи клопоту, але було набагато простіше.

Чи варто мені турбуватися, що важко працювати з цими алгоритмами та структурами даних? Я просто відчуваю, що я насправді цього не зрозумів.


Реальний приклад зв'язного списку - stackoverflow.com/questions/644167 / ...
pramodc84

Відповіді:


44

Я думаю, ви не повинні приймати не розуміння цих речей, бо вони справді принципові. Якщо говорити, то, що ти їх не розумієш, це нічого, чого погано почувати. Ви можете пояснити пов’язаний список дитині. Тож якщо ваш вчитель не зміг вам їх пояснити, це стільки їх вина. Тож не варто витрачати час на занепокоєння, а намагатися знайти людей, які можуть вам це пояснити. Часто однокурсник набагато кращий викладач, ніж штатний академік.

Подумайте про поїзди

Уявіть, у вас є набір залізничних вагонів, де кожен вагон має достатню місткість, щоб містити одну частину даних. Кожен візок має на своєму кінці гачок, який можна прикріпити до передньої частини вагона.
Це фактично дає вам пов’язаний список:

  • порожній список: поїзд, що не містить вагонів (і тому не має даних)
  • додавання елемента: додайте новий вагон, що містить елемент перед поїздом, і підключіть його до решти поїзда
  • видалення елемента: знайдіть каретку, що містить елемент. Зніміть його (можливо, тут вам знадобиться кран :)), зачепіть карету раніше, а карету після.
  • Заміна елемента: знайдіть каретку, що містить старий елемент. Обміняйте старий елемент на новий.
  • вставлення елемента відразу за іншим: знайдіть каретку, що містить елемент, після якого потрібно вставити. Вставте після нього новий вагон, який підключений відповідно (ми не хочемо, щоб поїзд розвалився) і вкладіть у нього новий елемент.

На відміну від цього, ви можете думати про масив як поїзд із заданою кількістю вагонів, який не можна переставляти жодним чином. Все, що ви можете зробити - це змінити дані в них. Ця модель також пояснює багато проблемних масивів:

  • Якщо ви хочете вставити один елемент перед іншим, вам доведеться перемістити всі наступні елементи до наступної каретки.
  • Якщо ви хочете видалити один елемент, вам потрібно буде перемістити всі наступні елементи однією кареткою на передню частину.
  • Якщо вам потрібен поїзд з більшою кількістю вагонів, вам доведеться побудувати новий, тому що ви не можете просто передбачити вагон. З іншого боку, знайти вагони в масиві набагато простіше, тому що ви можете просто їх постійно нумерувати (їх порядок ніколи не зміниться).

Що стосується стека: "стек" - це не менша структура даних, ніж ідея. Ідея стека полягає в тому, що він діє так, як стопку книг. Ви можете класти книги лише на вершину стека, і ви можете коли-небудь зняти верхню книгу зі стека (принаймні, якщо книги досить важкі).
Незважаючи на це, пов'язаний список може бути використаний як стек, якщо ви вважаєте, що дані в вагонах є книжками, а книга в першій самій вагоні як вершина стека.

Тож сподіваюся, що це вам допомогло. Можливо, цього не сталося. Можливо, ти більше візуального типу. У такому випадку я пропоную вам знайти когось, хто добре дасть наочні пояснення та пояснить це вам. Це не займе багато часу, але це абсолютно того варто.

Зараз нормально боротися з цим. Але просто його прийняття - це не варіант у довгостроковій перспективі.


2
Класна відповідь! Змусив мене зрозуміти, що можна навчити дітям основних структур даних за допомогою флеш / іншої гри з виконанням низки цілей. Ця ж ідея поїздів може також допомогти дітям зрозуміти двійкові номери, якщо кожен вагон поїзда в 2 рази більший і менший, ніж його сусід.
робота

1
Гаразд, тепер, коли ви це отримали, перейдемо до структур даних з кількома посиланнями. Тож поїзд має зачіпку на боці, яка може зачепити інший набір вагонів. Але залізниця для цих вагонів вид ковзає поруч із першою колією ...
Філіп

12

Я б не сказав, що ви "повинні турбуватися" з цього приводу, але простий факт, що ви визнаєте свої слабкі місця, свідчить про те, що ви точно знаєте, де вчитися важче. Я думаю, що ви будете добре обслуговуватися таким ставленням і будете в порядку з часом.


6

Щоб процитувати мого викладача CSCI:

"Panic, but panic early."

Структури даних звучать важко, правда? Для мене це так, це звучить абстрактно і трохи складно і, головне ... важливо!

Структури даних є життєво важливим курсом. І звичайно боротися, але продовжувати! Поки ви їсте свої пшениці та тримаєтесь на ній, ви досягнете веселки із bagзаповненою generic items під нею.


Паніка рано передбачає випадання? Після структури даних є також математичні вимоги, алгоритми, ОС, AI, компілятори, теорія обчислень ... це не стає легкішим для матері, але, можливо, той факт, що людина вже не першокурсник чи другий школяр, допомагає навіть хоча все стає складніше.
робота

3

Дуже хороші моменти в інших відповідях, лише одна примітка: додати список IMO, можливо, буде складніше, ніж, наприклад, стеки для багатьох людей, оскільки вони грунтуються на непрямості (виражається через посилання / покажчики ). І ці основні концепції можуть бути важко зрозуміти .


3

Структури даних - це перший «важкий» клас, який я взяв; ми використовували Fortran 77 замість Java, але концепції багато в чому однакові.

На тиждень пішло більше часу, ніж мої однокласники, щоб зрозуміти поняття пов'язаного списку; Я роздав завдання, але після декількох злегка засмучуючих сесій з моїм професором він нарешті натиснув (буквально; я почув «клацання» в голові, коли нарешті зрозумів).

У кожного є проблеми десь у навчальній програмі CS (якщо вони не виродки). Якщо ви розумієте, де ваші слабкі сторони, і як їх вирішити, вам насправді нема про що турбуватися.


1
Не панікуйте, продовжуйте працювати і чекайте клацання ...
NWS

2

У вас виникли проблеми з розумінням пов'язаного списку чи просто проблеми з вашою реалізацією?

Новому програмісту там не складе труднощів, тому що, можливо, ви вперше задумаєтесь про те, що це насправді означає, коли ви пишете:

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

У мене все перекручено в ALGOL / W на тій же вправі, тому що я не зовсім розумів мовну семантику. Через рік я ледве згадував, чому у мене виникли труднощі.


1

Очевидно, деякі сфери розробки програмного забезпечення вам важче, ніж інші. Будь то певні алгоритми, чи певні шаблони проектування чи певні процедури будуть залежати від людини до людини. Я вважаю, що мені доводиться щось використовувати в реальній програмі, перш ніж я повністю зрозумію це.

Я б більше хвилювався, якби хтось стверджував, що це все знає, і ніколи не відчував проблем з чимось навчанням.

Особисто я ніколи не мав проблем із пов’язаними списками, але тоді 8 років працював над програмою, яка використовувала їх всюди, тому я працювала з ними щодня. Поки ви знаєте, де знайти потрібну інформацію, щоб оновити пам’ять і знати райони, де у вас є "проблеми", ви повинні бути в порядку.


Я також думаю, що це допоможе, якби я міг взаємодіяти з програмою, яка також використовує ці структури даних. Я перебуваю на етапі, де я запитую себе, чому вони будуть корисні?
Брок

0

У мене були проблеми з обчисленням і мені довелося сприймати це вдруге. Вдруге я виявив, що я розумний, але перший вчитель математики був в основному марним :)

Ви знайдете в ІТ дуже багато людей, які не вміють добре спілкуватися, навіть викладачів. З іншого боку, деякі люди в ІТ - справді великі письменники та майстри комунікаторів.

Іноді читання поза межами справді може допомогти. Комп’ютерні книги сильно відрізняються за якістю. Заходьте на Амазонку і подивіться, що насправді сподобалось книзі людям.

Удачі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.