Алгоритмика: веб-книга алгоритмов

 Публичный пост
ОХУЕННО

Большой справочник по алгоритмам в одном месте.

🔗 Algorithms for Modern Hardware

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

Даже краткая справка по ассемблеру есть

🔗 Алгоритмика

Справочник по алгоритмам на русском. Про сам код: динамическое программирование, структуры данных, сортировочки, графы и прочая математика.

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

Где-то объяснение более подробное. Объясняются сложность алгоритмов, описывается их применение и краевые случаи.

А ещё даются полезные ссылки на соседние темы

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

Всё это живёт на гитхабе, красиво генерируется в Hugo, а контент со временем дополняется и улучшается

23 комментария 👇

Добавлю материала, если хотите поизучать алгоритмы на русском.

Рекомендую вики-конспекты (их в основном ведут КТшники из ИТМО): http://neerc.ifmo.ru/wiki/index.php?title=Алгоритмы_и_структуры_данных.

Рекомендую лекции Маврина (с этого года на КТ больше не ведет): https://youtube.com/c/pavelmavrin.

Николай Коршунов Пишу код на плюсцах, объясняю людям, почему так делать нельзя 18 октября 2022

https://www.bigocheatsheet.com/ Простая хорошая шпаргалка

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

  Развернуть 1 комментарий

@shultais, есть отзывы тех кто занимается? Может кто в клубе есть из учащихся?

  Развернуть 1 комментарий

@Gorodecki, есть один отзыв, так как отзыв можно оставить только после прохождения курса на 80%, но сам курс еще не готов :)

Ссылка на скрин.

Ну и собственно один из уроков курса про луковую маршрутизацию на YouTube:

  Развернуть 1 комментарий

Я как контрибьютор скажу, что русскоязычная часть алгоритмики вертится во многом вокруг школьных олимпиад, а заметная часть контрибьюторов (в т.ч. и автор алгоритмики) преподают/преподавали/проходили в Тинькофф Поколении курс по алгоритмам для школьников, прямо сейчас туда идет отбор.

  Развернуть 1 комментарий

Не могу не порекомендовать https://www.coursera.org/specializations/algorithms

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

  Развернуть 1 комментарий

Кстати, если у вас есть дети, то для них ЛКШ, конечно.
Место, которое привило любовь к программированию по принципу "о какие прикольные преподы, наверно у программистов всегда так задорно и такой классный досуг. Хочу с ними тусоваться" ну и алгоритмы :)

  Развернуть 1 комментарий

@alexandret, или в ЛКЛ!

https://sicamp.ru.

  Развернуть 1 комментарий

Ну и я расскажу о нашем курсе по алгоритмам :)
Он тоже платный, но с поддержкой наставников, для тех кому не хватает мотивации самому погружаться в сложности

  Развернуть 1 комментарий

@alexandret, давно вы его анонсировали? Какая сложность заданий ОТ и ДО?

  Развернуть 1 комментарий

@Gorodecki, у этого курса непростая судьба :)
Версия 2.0 вышла в декабре 2020. Сейчас вернулась в команду, чтоб сделать версию 2.2

Курс нацелен на разработчиков без особых знаний в математике, ориентирован на самые популярные задачи. В сложные темы не особо углублемся. Условного Ахо-Корасика нет. Зато, вроде, удачно разбираем рекурсию, хеширование, коллизии, дейкстру и тд.

  Развернуть 1 комментарий

@alexandret, 😂а когда версия 2.2
Курс со сложной судьбой - самый полезный.

  Развернуть 1 комментарий

@alexandret, расскажи мне как визуализировать граф на 5M нод. Мне очень надо, но чниего не могу найти

  Развернуть 1 комментарий

@bitomaxsp, Начать надо с того что определить что за граф и какие у твоих графов в целом характеристики

И что в конкретном случае значит визуализировать? Одна жирная точка это тоже визуализация графа но не в той проекции. Визуализировать чтобы что? Граф на 5м вершин обычно довольно бесполезен для просмотра.
Если сможешь ответить, скажу в какую сторону смотреть

  Развернуть 1 комментарий

@alexandret, Чаще всего много детей, от 10 до 1000. до 5 родителей. на 1-3 уровне мало детей. Больше всего детей на 4 и 5 уровнях. Высота ограничена 10ю.
Давай ограничем его 500к нодами.

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

  Развернуть 1 комментарий

@bitomaxsp, попробуйте graphviz. На Python есть удобная библиотека для интеграции.

  Развернуть 1 комментарий

@shultais, оно не может нарисовать большие графы

  Развернуть 1 комментарий

@bitomaxsp, да, глянул их теоретическое обоснование алгоритмов построения графов, там есть такая строка:

With a running time of O(n^3) for the visibility graph computation, where n is the number of polygon vertices, this is only practical on modest-sized graphs.

Сложность O(N^3) вам точно не подойдет.

  Развернуть 1 комментарий

@bitomaxsp, мне кажется, какая-то творческая задача. Я бы предложил сначала как-нибудь сжать граф до сотни-тысячи вершин, которые реально будут отрисованы. Неинтерактивно, но зато можно будет самостоятельно выбрать, как именно сжимать (это и хорошо, и плохо). Скажем, оставить только вершины с первых десяти уровней, причём только топ-1000 по какому-нибудь "весу" плюс вершины с первых трёх уровней.

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

Например, вот тут @olga24912 рисовала здоровенные биоинформатические графы: https://github.com/olga24912/SGTK#4-visualization , но там инструмент под конкретные задачи, а не в целом "отрисовка больших графов".

  Развернуть 1 комментарий
Роман Воронов Преподаватель программирования и табличных редакторов. 21 октября 2022

Код с фото по нахождению циклов в графе бросился в глаза. Наверно, щас уже редко какой язык требует экономии букв. Обфускация для тех же потомков JavaScript делается автоматически и нужна для экономии траффика в том числе. Лично я топлю за длинный развёрнутый нейминг. Разработчик больше читает код, чем пишет, всё такое. Но может не знаю какой-то специфики здесь?

  Развернуть 1 комментарий

@rioran, обычно все эти алгоритмы сначала рассказываются с точки зрения математики, на доске/в тетрадке. И там нужны короткие обозначения, потому что для доказательств надо на них постоянно ссылаться. А потом один-в-один переносится в код.

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

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб