Практичне використання різних структур даних [закрито]


102

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

Структура даних - Приклад / Використовується для

Таблиця хешу - швидкий пошук даних ... тоді наведіть приклад

Масив - ...

Двійкове дерево - ...

Якщо десь є такий ресурс, будь ласка, повідомте мене про це.

Дякую!

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

Відповіді:


96

Знайшли список у подібному питанні, раніше в StackOverflow:

Таблиця хешу - використовується для швидкого пошуку даних - таблиця символів для компіляторів, індексація бази даних, кеші, унікальне представлення даних.

Trie - словник, такий як знайдений на мобільному телефоні для автоматичного завершення та перевірки орфографії.

Суфіксне дерево - швидкий повнотекстовий пошук, що використовується в більшості текстових процесорів.

Стек - скасувати \ повторити операцію в текстових процесорах, оцінка виразів та синтаксичний аналіз, багато віртуальних машин, таких як JVM, орієнтовані на стек.

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

Черги з пріоритетом - планування процесу в ядрі

Дерева - парсери, файлова система

Дерево Radix - таблиця маршрутизації IP

Дерево BSP - 3D комп'ютерна графіка

Графіки - зв'язки / відносини на сайтах соціальних мереж, маршрутизація, мережі зв’язку, організація даних тощо.

Heap - Динамічний розподіл пам'яті в Lisp

Це відповідь, яку спочатку опублікував Р. В. Прадіп

Деякі інші, менш корисні посилання:

Програми перелічені лише для деяких структур даних

Не орієнтований на додаток, за допомогою хорошого резюме та релевантності


1
ваше перше посилання розірвано
Dan Beaulieu

Дякую, @DanBeaulieu. Я видалив мертве посилання.
MXMLLN

1
Дуже приємне резюме. Напевно, список звичаїв ніколи не закінчується, але справа стає зрозумілою.
Нік Л.

1
Буде скасувати / повторити справді стеком? Якщо скасування відскочить у верхній частині стека, ви не зможете повторити.
Тоні Л.

5
@TonyL. Я знаю, що це питання старіше, але я вважаю, що використовуються 2 стеки або Скасувати / Повторити. Коли ви скасовуєте дію, вона вискакує з стеку дій та розміщується на стеці Redo. Якщо ви повторно перетворюєте його, ви вискакуєте його з стека Redo і натискаєте на стек дій. У мене може бути неправильна термінологія, але там повинні бути приклади.
Рік Хендерсон

14

Я в тому ж човні, що і ти. Мені потрібно вчитися на технічні інтерв'ю, але запам'ятовування списку не дуже допомагає. Якщо у вас є запасні години 3-4, і ви хочете зробити глибше занурення, рекомендую перевірити

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

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

  • плюси і мінуси загальних структур даних
  • чому існує кожна структура даних
  • як це насправді працює в пам'яті
  • конкретні питання / вправи та вирішення, яку структуру використовувати для досягнення максимальної ефективності
  • чітке пояснення Великого 0

Я також розмістив нотатки на github, якщо вас цікавить.


7

Як я розумію, структура даних - це будь-які дані, що зберігаються в пам'яті будь-якої електронної системи, за допомогою якої можна ефективно керувати. Багато разів це гра пам'яті або швидша доступність даних. Що стосується пам’яті, знову є компроміси, здійснені з управлінням даними на основі вартості компанії для цього кінцевого продукту. Ефективно кероване повідомляє нам, як найкраще можна отримати доступ до даних на основі первинної потреби кінцевого продукту. Це пояснення дуже високого рівня, але структура даних - це величезна тема. Більшість інтерв'юерів занурюються в структури даних, які вони можуть дозволити собі обговорити в інтерв'ю, залежно від часу, який вони мають, і це пов'язані списки та супутні теми.

Тепер ці типи даних можна розділити на примітивні, абстрактні, складені, виходячи з способу їх логічного побудови та доступу.

  • примітивні структури даних є основними будівельними блоками для всіх структур даних, вони мають для них безперервну пам'ять: булева, char, int, float, double, string.
  • складові структури даних - це структури даних, які складаються з декількох примітивних типів даних.клас, структура, об'єднання, масив / запис.
  • абстрактні типи даних - це складові типи даних, які мають можливість ефективно отримати доступ до них, що називається алгоритмом. Залежно від способу доступу до даних структури даних поділяються на лінійні та нелінійні типи даних. Пов'язані списки, стеки, черги тощо - це лінійні типи даних. купи, двійкові дерева та хеш-таблиці тощо - це нелінійні типи даних.

Я сподіваюся, що це допоможе вам зануритися.


6

Прекрасна книга " Посібник з розробки алгоритмів" Скіенни містить величезний сховище алгоритмів та структури даних.

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

Книгу чудово, якщо її ви знайдете на своєму столі, якщо шукаєте найкращу структуру даних для вирішення проблеми. Це також дуже корисно для підготовки до співбесіди.

Ще одним чудовим ресурсом є Словник структур та алгоритмів даних NIST .


4

Трохи більше практичного застосування структур даних

Червоно-чорні дерева (Використовується, коли часто вставляють / видаляють і небагато пошукових запитів) - середньостатистичне кластеризація за допомогою червоного чорного дерева, баз даних, простої бази даних, пошуку слів у словниках, пошуку в Інтернеті

AVL Trees (Більше пошуку та менша кількість вставки / видалення) - аналіз даних та обмін даними та додатки, які передбачають більше пошукових запитів

Min Heap - Алгоритми кластеризації


3

Будь-який рейтинг різних структур даних буде принаймні частково прив'язаний до проблемного контексту. Це допоможе навчитися аналізувати часові та просторові характеристики алгоритмів. Як правило, використовується "велика нотація O", наприклад, двійковий пошук здійснюється в O (log n) час, що означає, що час пошуку елемента - це журнал (в базі 2, неявно) кількості елементів. Інтуїтивно зрозуміло, оскільки кожен крок відкидає половину решти даних як нерелевантних, подвоєння кількості елементів збільшить час на 1 крок. (Шкала бінарного пошуку досить добре.) Космічна ефективність стосується того, як збільшується об'єм пам'яті для великих наборів даних. Також зауважте, що нотація big-O ігнорує постійні фактори - для менших наборів даних алгоритм O (n ^ 2) все ще може бути швидшим, ніж алгоритм O (n * log n), який має більш високий постійний коефіцієнт.

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

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

Існують різні тексти аналізу алгоритмів / продуктивності структури даних, які люди рекомендують, але те, що насправді мало сенс для мене, - це вивчення OCaml. Робота зі складними структурами даних є сильною перевагою ML, і їх поведінка набагато зрозуміліше, коли ви можете уникнути покажчиків та управління пам’яттю, як у C. (Навчання OCaml просто для розуміння структур даних майже напевно довгий шлях).)

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