От нуля до любого уровня опыта работы с DSA
Структуры данных и алгоритмы. Для некоторых это просто предмет в семестре. Для некоторых это способ пройти собеседование. Для некоторых это обязательный навык для разработчиков. А для некоторых это отфильтровывает интеллектуалов. Несмотря ни на что, человек обязательно останется в стороне, если пойдет по неправильному пути. Эта статья поможет вам разобраться и попытаться развеять популярные заблуждения.

Стоит ли мне читать эту статью?

Я хотел бы прочитать это, если я

  • иметь нулевой или любой уровень опыта работы в DSA
  • предыдущие попытки изучения DSA потерпели неудачу
  • хочу подтвердить, что я на правильном пути

Почему меня должно волновать DSA?

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

Почему структура данных?

Из названия понятно, что речь идет о структурном представлении некоторых данных. Данные в программе подобны крови в теле. Он продолжает течь, и программа остается активной. Структурированные данные позволят ускорить обработку и упростить обслуживание.

Почему алгоритмы?

Если данные подобны существительному, то алгоритм для них является глаголом. Чтобы сформировать идеальное предложение (прочитать его как программу), нам нужно использовать соответствующие глаголы и существительные. Подобно тому, как предложение может быть сформировано несколькими способами, программа также может быть написана с использованием различных структур данных и алгоритмов. Поэтому очень важно знать эффективность алгоритма.

От нуля до героя: пошаговый подход

0. Выберите язык программирования

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

Какой из них лучше всего подходит для DSA?

Любой язык должен быть хорош. Если кто-то уже знаком с определенным языком программирования, он может выбрать его. Можно утверждать, что C++ и Java являются наиболее предпочтительными в сообществе. Таким образом, тот, кому еще предстоит изучить какой-либо язык программирования, может выбрать C++ или Java или любой язык, удобный для начинающих, например Python или JavaScript.

1. Изучите простые приемы программирования

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

  • Примитивные значения
  • Объявления переменных и присвоение значений
  • Операторы, выражения и инструкции
  • Арифметические операции
  • Операции сравнения
  • Логические операции
  • Условные блоки
  • Петли
  • Объявление и вызов функции
  • Указатели и ссылки

Чтобы узнать об этом подробно, посмотрите это шоу.

Есть ли какие-нибудь ярлыки для изучения всего этого?

Да. И этот ярлык — «тяжелая практика».

Итак, что нам следует практиковать?

Мы можем начать с попыток решить простые проблемы. Решите как можно больше. Ключевым моментом здесь является то, какую уверенность мы обретаем после решения каждой проблемы. Способность решать такие более простые задачи поможет нам позже проанализировать и сформулировать решения для сложных проблем.

2. Будьте удобны с примитивными типами данных

Ни одна программа не обходится без данных. Прежде чем углубляться в структуры данных, очень важно понять и ознакомиться с некоторыми базовыми (или примитивными) типами данных. Позже мы объединим эти данные для формирования сложных типов данных, полезных структур данных и т. д.

Некоторые из наиболее часто используемых примитивных типов данных:

  • Числа включают целые числа, числа с плавающей запятой (десятичные), байты и т. д.
  • Логические значения (например, true и false)
  • Символы и строки
  • Пустые значения (например, ноль)

Очень важно решить как можно больше проблем, связанных с этими примитивными типами данных.

3. Массивы: один маленький шаг для обучающегося, но гигантский скачок для разработчиков

Это естественная тенденция хранить похожие предметы вместе. Мы можем поддерживать их порядок, легко находить конкретный элемент и т. д. Массив — это одна из тех базовых структур данных, которые помогают в этом.

Массивы настолько просты и просты, но при этом являются одним из самых мощных методов упорядочивания элементов.

Почему нам следует изучать массивы прежде, чем любые другие структуры данных?

  • Простой дизайн
  • Легко определить 5 наиболее часто используемых операций: обход, вставка, удаление, поиск и сортировка.
  • Произвольный доступ к любому элементу массива.

4. Пользовательские типы данных: вкусный рецепт

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

Важнейшим знанием на этом этапе является «Объект». А точнее объектно-ориентированное программирование. Это будет иметь решающее значение, когда мы создадим более сложные структуры данных. Возможно, нам нужно всего лишь узнать кое-что об ООП, прежде чем создавать их. ООП и DSA можно изучать параллельно. Некоторые из основных тем ООП:

  • Инкапсуляция
  • Абстракция
  • Наследование
  • Полиморфизм

5. Давайте разделим структуры данных и алгоритмы

Хотя структуры данных и алгоритмы — это один предмет, это два разных потока, которые часто пересекаются. Алгоритм может быть написан на основе примитивных типов, простых структур данных или даже сложных структур данных. В то же время структура данных определяет как гибкость, так и граничные условия для написания на ней алгоритмов.

Наиболее фундаментальные операции, которые мы выполняем со структурой данных:

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

Структура данных определена так, что над ней можно выполнять большинство этих операций. Алгоритм этих операций может быть очень простым (грубая сила), немного сложным (рекурсивный или «разделяй и властвуй») или более сложным (жадный, динамический, с возвратом или рандомизированный). Алгоритм изначально может быть написан очень просто, а затем со временем оптимизирован.

6. РРР или точнее РРРРР

RRR — это метод (или, точнее, стратегия), который позволяет нам лучше решать проблемы.

1. R для чтения-реализации-записи

  • Прежде чем решить задачу, «Прочитайте» ее как следует один раз.
  • Далее «Настоящий

проблема», которую он просит решить.

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

  • Наконец, «Напишите» решение.

Проектирование. Во время проектирования мы берем задачу и пытаемся сопоставить вещи реального мира с вещами мира программирования. Результатом проекта может быть «псевдокод».

Код: Теперь пришло время дать жизнь нашему псевдокоду, написав программу на нашем любимом языке.

2. R значит бег

  • Перечислите все граничные условия.
  • Определите входные и выходные данные для каждого граничного условия.
  • Интеграция: Объедините некоторые или все граничные условия и переопределите входные и выходные данные.
  • Запустите программу для каждого входа. Сверьте фактический результат с ожидаемым.
  • Найдите, во всех ли случаях результат не соответствует ожиданиям. Мы упоминаем об этом как о «случае неудачного использования».

3. R — изменение формы

Нам необходимо изменить нашу программу в следующих ситуациях:

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

Теперь нам следует изучить проблему и изменить код после проведения анализа воздействия (влияния на успешные варианты использования).

7. Будьте в сообществе

Все, что мы сделали до сих пор, — это учимся в изоляции. Основная проблема самообучения заключается в том, что трудно мотивировать себя, когда вы застряли. Кроме того, должен быть кто-то, кто проверит вашу работу. Групповое обучение будет очень плодотворным.

  • Мы всегда можем выбрать лучшее, обсудив это с другими.
  • Мы можем попросить других оценить нашу работу и помочь найти оптимальное решение.
  • Мы можем участвовать в испытаниях.
  • Мы можем получать последние новости о встречах, мероприятиях, семинарах, ярмарках вакансий и т. д.

Discord, LinkedIn и Twitter — одни из лучших мест для общения. Многие даже получают выгоду от групп в Facebook, WhatsApp, каналов Telegram и т. д.

Showcase также помогает разработчикам общаться и расти. Его сообщество «Структура данных и алгоритмы» — лучшее место, где вы можете взаимодействовать с более чем 2500 людьми.

8. Избавьтесь от вредных привычек и держитесь подальше от мифов

Железный прут слишком прочен, но ржавчина может его ослабить. Вредные привычки и мифы являются такой ржавчиной. Когда кто-то начинает общаться, высока вероятность попасть в такие ловушки.

Некоторые из распространенных вредных привычек:

  • Решение проблемы, пытаясь найти оптимальное решение с самого начала.
  • Чрезмерная практика. Мы продолжаем решать аналогичный набор задач. Мы пробыли там больше положенного времени.
  • Участие в ненужных испытаниях. Иногда мы участвуем в челленджах только потому, что есть ажиотаж. Но мы либо переоснащены, либо недостаточно приспособлены.

Некоторые из распространенных мифов:

  • DSA – это решение сложных проблем.
  • Вы можете быть сильны в DSA, только если вы конкурентоспособный программист.
  • DSA спрашивают только на собеседованиях. В повседневной работе это не так уж и много требуется.

Если определенная деятельность не увеличивает нашу продуктивность и не снижает наши способности, давайте отметим это.

9. Научите кого-нибудь

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

Как мы можем обучать?

  • Поставьте себя в положение ученика. Угадайте, чего мы ожидали бы как ученики.
  • Рассказываю из практического опыта
  • Объясняю на примерах

Каковы различные методы обучения?

  • Интернет с использованием образовательных платформ, блогов, социальных сетей, потокового мультимедиа и т. д.
  • Оффлайн (локально)
  • Использование текста, графики, видеоконтента и т. д.

Одна важная вещь, на которую мы всегда должны обращать внимание во время обучения, — это его документирование. Мы можем сохранить учебные материалы в безопасном месте, чтобы иметь возможность использовать их при необходимости.

Заключительные слова

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

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

Эта статья поможет вам подготовить стратегию, чтобы добиться большего в DSA. Желаем вам удачи в путешествии по DSA.