@Heinemann

Как использовать структуры данных на практике?

Изучаю структуры данных и алгоритмы(далее - сд и а). Поймал себя не мысли, что не понимаю их применения. Веб приложение использует в основном базу данных, например, mysql, где мы можем почти бесплатно получить любого пользователя по почте, вставить нового или удалить старого, отсортировать запрос как нам вздумается и много чего еще. Т.е потребность в (сд и а) отпадает. У баз данных есть свои недостатки, которые решаются частично или полностью способами хранения в них данных, например, деревья, но.. можно ли это назвать структурой данных? Даже если ответ будет положительный, то как здесь можно применять алгоритмы для поиска и сортировки, ведь бд не дает такой возможности, насколько я знаю.

Единственной применение структур данных и алгоритмов, которое мне приходит в голову - рил тайм, где мы работаем с оперативной памятью
  • Вопрос задан
  • 251 просмотр
Пригласить эксперта
Ответы на вопрос 7
mayton2019
@mayton2019
Bigdata Engineer
Программисты, будучи студентами на 1-2 курсе изучают алгоритмы и структуры данных (АСД) чтобы
писать более эффективные программы. При этом задача использования DBMS им еще не ставиться.
На этом этапе они учатся оптимизировать и понимать разницу между o(1), o(n^2), o(lon(n)) и т.п.
алгоритмической сложностью. Сложность определяет, как будет работать выбранный алгоритм
при очень резком (шквальном) росте исходных данных. И если ты это не учил, то ты сто процентов
напишешь фигню и твой алгоритм никогда не завершиться, какой-бы мощностьи процессор у тебя
ни стоял. И вот чтобы дать анализ такой ситуации, как раз и нужны знания АСД. А работа на пределе
мощностей сегодня везде. Игры. Рендеринг 3д. Майнинг. Обучение языковых моделей.

Работая с MySQL ты этого не видишь т.к. часть алгоритмов скрыта от тебя под фасадом SQL API.
Но тебе и недоступны вышеперечисленные задачи. Их стек - шире чем тот что ты используешь.
И если ты собираешся всю жизнь работать на PHP/MySQL то скорее всего АСД тебе действительно не
нужны.
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Мысль совершенно правильная.

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

Поэтому большая часть классических алгоритмов, все эти пузырьки со вставками, имеют скорее академическую ценность. И с психологической точки зрения только затрудняют обучение. Всегда сложнее учить сферического коня в вакууме, не подкрепленного практическими задачами.
Но с другой стороны, все эти вещи развивают мозги, дают базу, которая потом, в дальнейшем, при переходе к более сложным задачам, сможет пригодиться.

Поэтому я бы рекомендовал их все равно изучать, но в качестве не основного, а факультативного материала.
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Юзер с логином, хэшем пароля и мылом - это уже структура данных.
Подмножество юзеров - тоже структура (массив, список и т.п.) структуры из строчки 1
Ответ написан
Комментировать
Griboks
@Griboks
Если вы не собираетесь выходить за рамки crud, то вот вам классический пример.

Вы, должно быть, преобразуете данные между моделями (БД) и схемами (API). Эти данные не всегда одиночны (1 модель != 1 схема) и не всегда в одной БД, могут иметь сложные зацикленные вложенные структуры. Поэтому вам придётся не просто конвертировать полученную модель в json, но ещё и как-то её преобразовать. Вот как раз для нетривиального преобразования и нужны АСД, иначе это будет один большой цикл с множеством if и копированием кода.
Вы скажете, что можно просто насоздавать кучу схем/моделей/хранимых процедур для всех возможных случаев. Но это долго, а написать эффективные АСД - быстрее, т.е. более оптимальный подход.

Но учить всякие паттерны, разумеется, не требуется - только понять саму суть АСД.
Ответ написан
Комментировать
Steel_Balls
@Steel_Balls
0L3QsNGH0LjQvdCw0Lsg0YEgQkFTSUMg0L3QsCDQo9Ca0J3Qpi
У тебя какая-то каша в голове.
Попробуй всё разложить по полочкам и структурировать что есть что.
Базы данных - это квинтэссенция структур данных и алгоритмов работы с ними.
Ответ написан
@nApoBo3
Структуры данных и алгоритмы это вообще не про субд.
При разработке приложения вам постоянно нужно оперировать данными, данные при этом хранятся в памяти в виде объектов( в большинстве случаев ), это могут быть различные объекты, например map, это и есть структуры данных.
Алгоритмы, в данном контексте это стандартные способы манипуляции над этими структурами, поскольку вариантов манипуляций на самом деле не там много.
Знание структур данных и алгоритмов для разработчика обязательны, иначе его производительность будет очень низкой и по всюду будут странные велосипеды.
Ответ написан
@WitFed
Программист
Да, у автора вопроса всё нечётко, совсем начинающий.
Любые 2 и более данных рядом, обрабатываемых в совокупности по своей логической связи, -- уже структура, СД.
Алгоритмы (А) -- это всё, что с ними происходит, цели обработки, основа и цель любого программирования.
Если взять современный мессенджер или всемирный сайт с миллиардами пользователей и не хранить их данные оптимально, не обрабатывать мгновенно, то потребуются на порядки большие затраты на оборудование, поэтому программисты там требуются отборные.
Мотивация для СД и А должна быть на вводных этапах оьучения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы