Содержимое
#вашивопросы Так ли необходимо учить начинающему программисту алгоритмы и структуры данных? А также уметь их реализовывать. Дело в том, что я изучаю алгоритмы сортировки, и вроде бы понимаю принцип работы того или иного алгоритма. Но вот когда дело доходит до кода, то не то что написать, но и прочитать и понять чей-то код, где реализован алгоритм, выходит с трудом. Программист - это человек, который решает поставленную задачу с помощью кода. Простейшие алгоритмы (например, сортировки) - это как раз способы решить поставленную задачу. Элементарные алгоритмы изучить надо. Начните с простой задачи. У вас есть массив (если на Python пишете, то список) с числами - например, [5, 6, 1, 4, 8, 10]. И ваша задача написать код, который отсортирует этот массив/список. То есть на выходе вам надо получить список вида [1,4, 5, 6, 8, 10]. Как действовать, в каком порядке двигать элементы, как их менять друг с другом, чтобы получить то, что нужно? Подумайте над этой задачей, попробуйте написать код, который ее решит. Когда подумаете, можно прибегнуть к простейшим алгоритмам - например, сортировка пузырьком или сортировка вставками - почитайте про алгоритм, и поймите принцип, с помощью которого из не сортированного массива/списка можно получить сортированный с использованием данного алгоритма. И теперь попробуйте его в коде написать. Можно еще посмотреть видео с наглядной демонстрацией алгоритмов сортировки - например, по запросу algorithmics на ютубе - там люди с помощью танцев показывают, как работают эти алгоритмы. Более сложные алгоритмы сортировки пока не пробуйте реализовывать (quicksort или merge sort), начните с самых элементарных. Когда с ними разберетесь, тогда можно переходить к более сложным. Если читать примеры из чужого кода сложно, значит надо начинать с более коротких и простых примеров. Возможно, вы забегаете вперед. Что касается структур данных - да, их тоже нужно изучать, по крайней мере основные структуры данных, которые используются практически в любом языке - массив, хэш-таблица (она же map, она же словарь или dict). Связные списки, очередь, стэк тоже изучите. Более сложные типы данных - двоичные кучи, графы, деревья итд можно отложить до момента, когда будете себя чувствовать увереннее. Это же касается и более сложных алгоритмов - что-то уровня инвертировать бинарное дерево, динамическое программирование - это всё можно отложить на потом. Но самые азы осваивайте уже сейчас. Вообще прямо сложные структуры данных и нетривиальные алгоритмы требуются далеко не каждому разработчику, тут зависит от места работы, предметной области и требований конкретного работодателя. Но, например, на собеседованиях в Яндекс или Тинькофф по ним дают задания на собеседованиях, это у них обязательное условие найма. Бот для ваших вопросов: @hum_it_bot