Изучаю структуры данных и алгоритмы(далее - сд и а). Поймал себя не мысли, что не понимаю их применения. Веб приложение использует в основном базу данных, например, mysql, где мы можем почти бесплатно получить любого пользователя по почте, вставить нового или удалить старого, отсортировать запрос как нам вздумается и много чего еще. Т.е потребность в (сд и а) отпадает. У баз данных есть свои недостатки, которые решаются частично или полностью способами хранения в них данных, например, деревья, но.. можно ли это назвать структурой данных? Даже если ответ будет положительный, то как здесь можно применять алгоритмы для поиска и сортировки, ведь бд не дает такой возможности, насколько я знаю.
Единственной применение структур данных и алгоритмов, которое мне приходит в голову - рил тайм, где мы работаем с оперативной памятью
Программисты, будучи студентами на 1-2 курсе изучают алгоритмы и структуры данных (АСД) чтобы
писать более эффективные программы. При этом задача использования DBMS им еще не ставиться.
На этом этапе они учатся оптимизировать и понимать разницу между o(1), o(n^2), o(lon(n)) и т.п. алгоритмической сложностью. Сложность определяет, как будет работать выбранный алгоритм
при очень резком (шквальном) росте исходных данных. И если ты это не учил, то ты сто процентов
напишешь фигню и твой алгоритм никогда не завершиться, какой-бы мощностьи процессор у тебя
ни стоял. И вот чтобы дать анализ такой ситуации, как раз и нужны знания АСД. А работа на пределе
мощностей сегодня везде. Игры. Рендеринг 3д. Майнинг. Обучение языковых моделей.
Работая с MySQL ты этого не видишь т.к. часть алгоритмов скрыта от тебя под фасадом SQL API.
Но тебе и недоступны вышеперечисленные задачи. Их стек - шире чем тот что ты используешь.
И если ты собираешся всю жизнь работать на PHP/MySQL то скорее всего АСД тебе действительно не
нужны.
И если ты это не учил, то ты сто процентов
напишешь фигню и твой алгоритм никогда не завершиться, какой-бы мощностьи процессор у тебя
ни стоял.
Попробуйте открыть отладчик в браузере и посмотреть эту самую сложность, например, у вконтакте. Получается, там работают одни бездари, которые даже 2 курс не осилили.
mayton2019, вот именно. У меня всего 10 элементов на канвасе 1920x1080, а вк уже 1 ГБ потребляет. В тех. поддержке мне прямо ответили, что не способны оценить свою собственную алгоритмическую сложность. Ну и зачем тогда изучать АСД?
Дружище грибокс. Твой пример напоминает случаи похищения людей инопланетянами. Тоесть у меня как-бы нет возражений против таких случаев. Но я и выводы из них никакие не могу сделать. Давай-же мы с тобой возьмемся за руки и заполним вот эту самую информационную пустоту. Иначе автор подумает что мы его дурачим.
Какой-то у вас бессвязный диалог. Griboks совершенно прав, что современное ПО дико тормозное. Потому что оптимальность кода приносится в жертву оптимальности разработки. Другое дело, что это не от того, что разработчики ничего не учили.
Возражать же ему про "более сложный стек" - это какая-то глупость. Начиная с того, что MySQL/PHP таки являются основным стеком вконтактика, и заканчивая тем, что человек явно рассказывает про фронт.
mayton2019 В том и дело, что не собираюсь, потому пытаюсь разобраться. Я понимаю все те вещи, о которых Вы пишете, но мне бы хотелось больше наглядных примеров, если можно.
Опять же, если мы говорим о рил тайме или очередях, то тут все достаточно просто для понимания, как мне кажется. Но как обстоят дела с длительным хранением, как там использовать АСД, если мы работаем с СУБД?
p.s А вообще, надо бы еще почитать о том, чем на физическом уровне отличается способ хранения данных на жестком диске от оперативной памяти. У жесткого диска тоже ячеистая система хранения?
mayton2019, просто хочу наглядно показать, что АСД стоят в одном ряду с математикой, правописанием, логикой и прочими подобными "маст хев" дисциплинами, без которых люди успешно получают 300 000 рублей в месяц, а бизнес успешно зарабатывает деньги. Разумеется, не знать эти базовые вещи - плохо. Но даже асы АСД не могут позволить себе преждевременно оптимизировать какой-нибудь поиск, когда есть docker service scale.
Иногда объясняешь такому senior software engineer из многоуважаемой компании, что, например, кэшировать по ссылке - это ошибка. А он сильно удивляется, потом думает пару минут и отвечает, мол, был уверен, что это автоматически обрабатывается фреймворком.
Вебмакаки, разумеется, лучше всех умеют перекладывать json максимально неэффективным, неудобным, далёким от АСД способом. Боюсь представить, что у того же вк на серверах происходит и сколько они дубликатов микросервисов содержат.
А вообще, надо бы еще почитать о том, чем на физическом уровне отличается способ хранения данных на жестком диске от оперативной памяти. У жесткого диска тоже ячеистая система хранения?
Я учился в то время когда память на ПК мерялась килобайтами и только выходила на мегабайты. Диски были медленные. И вместо флешек у нас были дискеты. Но на подобном оборудовании очень удобно было тестировать свои алгоритмы. Любой косяк тут-же замедлял выдачу ответа до невозможности. Тоесть медленное оборудование сыграло свою полезную вешь.
Про почитать. Тут сложно. Можно Эндрю Таннебаума - Архитектура Компа. но я не уверен
что он про твои кейсы будет писать. Я имею в виду архитектуру применительно к алгоритмам.
Ипатьев, давно уже нет :) kPHP запущен в работу давным-давно.
структуры данных важны для низкоуровневых языков. высокоуровневые языки уровнями абстракции от железа оторваны от реальных структур в памяти компутера и структуры в них не важны.
Современные высокоуровневые языки и системы управления данными чаще всего скрывают большую часть алгоритмов от пользователя, предоставляя готовое решение для большинства выполняемых операций.
Плюс, большинство прикладных задач практически не требуют знакомства со сложными структурами данных и алгоритмами.
Плюс мощность современных компьютеров очень часто прощает программисту ошибки и неоптимальные решения.
Поэтому большая часть классических алгоритмов, все эти пузырьки со вставками, имеют скорее академическую ценность. И с психологической точки зрения только затрудняют обучение. Всегда сложнее учить сферического коня в вакууме, не подкрепленного практическими задачами.
Но с другой стороны, все эти вещи развивают мозги, дают базу, которая потом, в дальнейшем, при переходе к более сложным задачам, сможет пригодиться.
Поэтому я бы рекомендовал их все равно изучать, но в качестве не основного, а факультативного материала.
Если вы не собираетесь выходить за рамки crud, то вот вам классический пример.
Вы, должно быть, преобразуете данные между моделями (БД) и схемами (API). Эти данные не всегда одиночны (1 модель != 1 схема) и не всегда в одной БД, могут иметь сложные зацикленные вложенные структуры. Поэтому вам придётся не просто конвертировать полученную модель в json, но ещё и как-то её преобразовать. Вот как раз для нетривиального преобразования и нужны АСД, иначе это будет один большой цикл с множеством if и копированием кода.
Вы скажете, что можно просто насоздавать кучу схем/моделей/хранимых процедур для всех возможных случаев. Но это долго, а написать эффективные АСД - быстрее, т.е. более оптимальный подход.
Но учить всякие паттерны, разумеется, не требуется - только понять саму суть АСД.
У тебя какая-то каша в голове.
Попробуй всё разложить по полочкам и структурировать что есть что.
Базы данных - это квинтэссенция структур данных и алгоритмов работы с ними.
Структуры данных и алгоритмы это вообще не про субд.
При разработке приложения вам постоянно нужно оперировать данными, данные при этом хранятся в памяти в виде объектов( в большинстве случаев ), это могут быть различные объекты, например map, это и есть структуры данных.
Алгоритмы, в данном контексте это стандартные способы манипуляции над этими структурами, поскольку вариантов манипуляций на самом деле не там много.
Знание структур данных и алгоритмов для разработчика обязательны, иначе его производительность будет очень низкой и по всюду будут странные велосипеды.
Да, у автора вопроса всё нечётко, совсем начинающий.
Любые 2 и более данных рядом, обрабатываемых в совокупности по своей логической связи, -- уже структура, СД.
Алгоритмы (А) -- это всё, что с ними происходит, цели обработки, основа и цель любого программирования.
Если взять современный мессенджер или всемирный сайт с миллиардами пользователей и не хранить их данные оптимально, не обрабатывать мгновенно, то потребуются на порядки большие затраты на оборудование, поэтому программисты там требуются отборные.
Мотивация для СД и А должна быть на вводных этапах оьучения.