fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Давайте изучать алгоритмы

Давайте изучать алгоритмы

Добро пожаловать в раздел “Изучаем алгоритмы”! В этой статье я собираюсь дать вам общий обзор того, чего ожидать от этой серии в дальнейшем. Если вы хотите сразу перейти к урокам, вы можете перейти в раздел “Уроки доступны сейчас”. Я не буду держать на вас зла, обещаю.

Эта серия вдохновлена отзывами на reddit и основана на моем личном опыте с учителями и тренерами команды по программированию, с которыми я имел удовольствие работать в UCF. Если у вас есть какие-либо отзывы, не стесняйтесь обращаться – jon@calhoun.io.

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

Как будут структурированы уроки?

Новые статьи могут выходить с задержкой.

Эта серия больше активно не пополняется. Я надеюсь, что скоро начну выпускать новые статьи или превращу его в отдельный (скорее всего, бесплатный) курс, а пока я оставляю эту страницу нетронутой, чтобы вы могли учиться по уже существующим статьям.

Для этого цикл будет разбит на “уроки”. Каждый урок будет посвящен одному алгоритму и будет состоять из нескольких постов (обычно 3 или более). Если это будет иметь смысл, несколько алгоритмов могут оказаться в одном уроке, но это произойдет только в том случае, если для этого есть очень веская причина.

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

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

Например, представьте, что у вас есть следующая отсортированная рука карт – туз, тройка, восьмерка, девятка, валет, король – и я протягиваю вам четверку и прошу вставить ее в отсортированную руку карт. Концептуально это довольно просто: вы помещаете ее после тройки и сдвигаете карты 8, 9, валет, король на одну позицию вправо, но когда вы перейдете к реальному коду, вы можете понять, что есть некоторые детали, которые не были рассмотрены при обсуждении алгоритма.

Как нам найти

Чтобы решить эту проблему, мы будем кодировать каждый алгоритм, который мы обсуждаем. Мы будем не только кодировать алгоритм после его изучения, но и выполнять “домашние задания” для отработки алгоритма. Я включу в каждый урок несколько примеров задач для тренировки, а затем в заключительных статьях к каждому уроку мы сосредоточимся на решении этих задач.

Какой язык мы будем использовать?

Это один из самых популярных вопросов, которые я ожидаю получить, поэтому я просто скажу, что на первых порах я буду реализовывать каждый алгоритм на Go (он же Golang), языке программирования, созданном компанией Google.

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

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

1. Я могу ссылаться на запускаемые примеры кода

В Go есть прекрасный Go Playground, который позволяет мне ссылаться на примеры кода, которые можно запускать из браузера. Это означает, что вам не нужно ничего устанавливать, чтобы посмотреть и подправить мой код, что может быть очень полезно при обучении.

2. Код на Go легко читается

Многие языки требуют написания кода, за которым не всегда легко следить. Java требует, чтобы вы создавали класс для каждого отдельного файла, который вы пишете. Python и Ruby абстрагируются от некоторых деталей, которые я люблю обсуждать, потому что они могут повлиять на время выполнения вашего кода. C/C++ гораздо сложнее читать, чем Go.

Хотя у Go есть свои причуды, которые поначалу могут показаться странными, в целом его очень легко читать и понимать, не будучи экспертом в этом языке. И если мне когда-нибудь понадобится сделать что-то, что не очевидно независимо от вашего понимания языка, я постараюсь прокомментировать свой код, чтобы объяснить, что происходит.

3. Мне это нравится, и именно я пишу эти уроки.

Довольно самообъяснимо. Как автор я могу навязывать всем свои личные предпочтения :).

4. У меня есть личные планы

Хотя я искренне люблю преподавать и помогать другим, бесплатные ресурсы, подобные этому, не окупают расходы. Для этого мне нужно консультировать и продавать платные курсы. С этой целью я потратил много времени на создание курса “Веб-разработка с помощью Go”, и я надеюсь, что если вы почувствуете вкус Go, вам будет интересно узнать больше о создании веб-приложений с помощью Go, а кто может научить вас лучше, чем человек, который научил вас алгоритмам с помощью Go .

Pssst, если вы заинтересованы в курсе, вы можете подписаться на мою рассылку, чтобы получить пробный 2,5-часовой курс.

Всегда ли будут видео + текстовые версии?

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

В перспективе я надеюсь превратить эту серию в полноценный курс, подобный Gophercises, но пока что некоторые статьи могут ха

А теперь раздел, который большинство из вас ищет. Полный список существующих уроков… который в настоящее время состоит из одной статьи (извините!).

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

Сортировка пузырьков

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

Бинарный поиск

Второй урок посвящен двоичному поиску, универсальному и полезному алгоритму, используемому для поиска значений в отсортированном множестве.

Основные структуры данных

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

Связанные списки (пока не опубликованы)

Динамические списки (они же списки массивов или срезы) и множества (пока не опубликовано)

Древовидные карты и хэши (пока не опубликованы)

Очереди приоритетов и кучи (пока не опубликованы)

Теория графов

  • В этом разделе мы поговорим о графах, двоичных деревьях, о том, как хранить их в коде, и о некоторых полезных алгоритмах для обхода и поиска графа. Со временем мы рассмотрим более сложные темы, такие как алгоритм min cost max flow, но пока здесь рассматриваются в основном более простые алгоритмы для начинающих.
  • Получайте уведомления о новых публикациях!
  • Хотите узнать, когда я опубликую новую статью? Подпишитесь на мой список рассылки, и я буду присылать вам примерно одно письмо каждую неделю, информируя вас о том, какие новые статьи я опубликовал и над чем работаю.
  • Я также буду присылать бесплатный образец из моего курса “Веб-разработка с помощью Go”, а иногда буду сообщать о выходе нового курса, книги или продукта, который, по моему мнению, может вас заинтересовать. Обычно в эти письма я включаю бесплатные образцы и коды скидок, а содержание очень похоже на то, что вы читаете здесь, поэтому я думаю, что вам это очень понравится 🙂

Изучайте веб-разработку с помощью Go!

Подпишитесь на мою рассылку, и я вышлю вам БЕСПЛАТНЫЙ образец из моего курса “Веб-разработка с помощью Go”. Образец включает в себя 19 демонстрационных роликов и несколько первых глав из книги.

Вы также будете получать от меня электронные письма о методах кодирования на Go, предстоящих курсах (в том числе БЕСПЛАТНЫХ) и скидках на курсы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *