Как стать автором
Обновить
215.69

Алгоритмы *

Все об алгоритмах

Сначала показывать
Порог рейтинга
Уровень сложности

О вреде GOTO-фобии (с примерами на C)

Время на прочтение 17 мин
Количество просмотров 10K
Программирование *Совершенный код *Алгоритмы *C *
Перевод

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

Читать далее
Всего голосов 86: ↑81 и ↓5 +76
Комментарии 91

Новости

Истинная сложность алгоритма Bubble Sort

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 3.7K
Алгоритмы *
Из песочницы

При изучении алгоритмов сортировок, возник вопрос об общепринятой оценке сложности, а так же к примерам реализации. И эти вопросы возникли сразу на первой сортировке Пузырьком. Заговор? Невнимательность? Небрежность? Шутка?

Узнать
Всего голосов 38: ↑8 и ↓30 -22
Комментарии 27

Алгоритмы быстрого умножения чисел: от столбика до Шенхаге-Штрассена

Уровень сложности Средний
Время на прочтение 26 мин
Количество просмотров 8.7K
Python *Алгоритмы *Математика *

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

И уж конечно, никогда при написании a * b мы не задумываемся о том, как реализовано умножение чисел a и b в нашем языке. Какие вообще есть алгоритмы умножения? Это какая-то нетривиальная задача?

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

Скорее к формулам!
Всего голосов 121: ↑121 и ↓0 +121
Комментарии 20

Как «яжепрограммист» построил всю свою родню

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 9.7K
Блог компании RUVDS.com Алгоритмы *Графический дизайн *Научно-популярное Социальные сети и сообщества

Всем привет. Разумеется, это шутка — я своих родственников очень люблю, уважаю и никоим образом их не притеснял и не планирую. Более точная формулировка — отсортировал в целях построения генеалогического древа. Об алгоритме построения, сортировки, визуализации фамильного древа и будет эта статья.
Читать дальше →
Всего голосов 49: ↑49 и ↓0 +49
Комментарии 49

Истории

И самые лучшие книги они в рюкзаках хранят…

Время на прочтение 5 мин
Количество просмотров 2.1K
Блог компании FirstVDS Криптография *Занимательные задачки Алгоритмы *

В этом топике продолжим тему решения криптографических загадок с MysteryTwister. Ранее уже были опубликованы статьи навеянные задачами с этого ресурса («Угнать SIGABA за 24 часа», часть 1, часть 2). На этот раз возьмём задачу, основанную на классической «задаче о рюкзаке». Автор задачи Peter Uelkes. По этому вопросу на Хабре много статей (уместные я размещу внизу топика), но сегодня мы разберём конкретную задачу дешифровки.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 2

10 зрелищных клеточных автоматов с поколениями

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 3.1K
Программирование *Алгоритмы *Читальный зал Дизайн Научно-популярное
Обзор

На прошлой неделе мы посмотрели на 10 правил простейших клеточных автоматов, где меняли только количество соседей необходимых для рождения и выживания клетки.

Сегодня мы немного дополним характеристики «life‑like» модели и добавим ещё одну часть к правилам — поколения.

👾
Всего голосов 49: ↑49 и ↓0 +49
Комментарии 1

Книга «Алгоритмы на практике»

Время на прочтение 16 мин
Количество просмотров 8.2K
Блог компании Издательский дом «Питер» Алгоритмы *Профессиональная литература *
image Привет, Хаброжители!

«Алгоритмы на практике» научат решать самые трудные и интересные программистские задачи, а также разрабатывать собственные алгоритмы. В качестве примеров для обучения взяты реальные задания с международных соревнований по программированию. Вы узнаете, как классифицировать задачи, правильно подбирать структуру данных и выбирать алгоритм для решения. Поймете, что выбор структуры данных — будь то хеш-таблица, куча или дерево — влияет на скорость выполнения программы и на эффективность алгоритма. Разберетесь, как применять рекурсию, динамическое программирование, двоичный поиск.

Никакого условного псевдокода, все примеры сопровождаются исходным кодом на языке Си подробными объяснениями.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 4

Навеяно проблемой четырёх красок

Уровень сложности Простой
Время на прочтение 4 мин
Количество просмотров 3.8K
Программирование *Delphi *Алгоритмы *Математика *
Из песочницы

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

Для непосвящённых… Проблема четырёх красок формулируется очень просто: «Для раскраски любой карты на плоскости достаточно четырёх красок».

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

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

* * *

Создал очень НЕинтересную игру, навеянную этой Проблемой.

Читать далее
Всего голосов 23: ↑23 и ↓0 +23
Комментарии 5

Книга «40 алгоритмов, которые должен знать каждый программист на Python»

Время на прочтение 6 мин
Количество просмотров 22K
Блог компании Издательский дом «Питер» Python *Алгоритмы *Профессиональная литература *
image Привет, Хаброжители!

Понимание работы алгоритмов и умение применять их для решения прикладных задач – must-have для любого программиста или разработчика. Эта книга поможет вам не только развить навыки использования алгоритмов, но и разобраться в принципах их функционирования, в их логике и математике.

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

Дойдя до конца, вы превратитесь в эксперта по решению реальных вычислительных задач с применением широкого спектра разнообразных алгоритмов.
Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 2

Особенности автоматического дифференцирования в PyTorch. Часть 1

Время на прочтение 6 мин
Количество просмотров 1.1K
Блог компании БАРС Груп Python *Алгоритмы *Big Data *Искусственный интеллект
Перевод

Привет! На связи команда «БАРС Груп». Мы разработали и совершенствуем российскую BI‑платформу Alpha BI. Это возможно благодаря таким фреймворкам, как PyTorch.

PyTorch активно развивается более пяти лет и представляет собой целую экосистему для создания моделей машинного обучения на основе глубоких нейронных сетей. У подобных ИТ‑продуктов широкий спектр применения. В частности, они помогают научному и бизнес‑сообществу проводить исследования, вести разведку данных и проверять гипотезы. Несмотря на то, что на сегодняшний день это один из самых популярных фреймворков машинного обучения в мире, в рунете пока довольно мало статей о его технических особенностях. Попытаемся это исправить.

Читать далее
Всего голосов 10: ↑9 и ↓1 +8
Комментарии 1

Пути и графы

Уровень сложности Средний
Время на прочтение 14 мин
Количество просмотров 2.4K
Информационная безопасность *Алгоритмы *Математика *Инженерные системы *
Recovery mode
Из песочницы

На практике часто необходимо при заданных условиях и ограниченных ресурсах для построения сети выбирать из потенциально возможных структур лучшую в некотором смысле, например, устойчивую к неисправностям (отказам) связей между узлами (каналов) транспортной сети, сети связи, сетей нефте- и газопроводных и многих других. Предлагается рассматривать ряд задач поиска оптимального решения в рамках числовых примеров. Актуальность проблемы несомненна, даже наше городское жилье охвачено большим числом обеспечивающих жизненные удобства и комфорт сетями различного назначения: электрическими, снабжения холодной и горячей водой, газопроводной, теплоснабжения, телевизионной, радиотрансляционной, интернетом, канализацией, мусоропроводом, охранного видеонаблюдения и др.

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

Читать далее
Всего голосов 3: ↑2 и ↓1 +1
Комментарии 6

10 удивительно зрелищных простейших клеточных автоматов

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 18K
Программирование *Алгоритмы *Читальный зал Дизайн Научно-популярное
Обзор

Самое простое представление двумерного клеточного автомата основано на двух характеристиках: клетки имеют всего 2 состояния; правила изменения состояния зависят только от количества живых соседей из окрестности Мура первого порядка (8 окружающих).

Такая категория КА называется «Life-like», по названию самого известного автомата с такими характеристиками – «Conway's Game of Life». Игра «Жизнь» Конвея работает на правиле B3/S23, т.е. для рождения клетки требуется ровно 3 живых соседа, для выживания – 2 или 3. Во всех других случаях клетка умирает (или же остаётся пустой).

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

Сегодня взглянем на самых интересных представителей.

👾
Всего голосов 148: ↑148 и ↓0 +148
Комментарии 21

Математика самонаводящихся ракет из аниме

Время на прочтение 4 мин
Количество просмотров 14K
Разработка игр *Алгоритмы *Математика *Unity *
Перевод

Я создал прототип ракетной атаки! Для этого понадобилась хитрая математика, о которой будет рассказано в этой статье.

Мы поговорим о кубических кривых Безье, шуме Перлина и rotation minimizing frames.
Читать дальше →
Всего голосов 74: ↑73 и ↓1 +72
Комментарии 11

Пишем GPT в 60 строк NumPy (окончание, 2/2)

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 7.1K
Python *Алгоритмы *Математика *Машинное обучение *Искусственный интеллект
Туториал
Перевод
image

В первой части поста мы начали реализацию с нуля GPT всего в 60 строках numpy.

Во завершающей части мы загрузим в нашу реализацию опубликованные OpenAI веса обученной модели GPT-2 и сгенерируем текст.
Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 5

SQL HowTo: крупицы золота в реестре

Уровень сложности Сложный
Время на прочтение 7 мин
Количество просмотров 4.3K
Блог компании Тензор Высокая производительность *PostgreSQL *SQL *Алгоритмы *
Туториал

В большинстве учетных систем, типа нашего СБИС, рано или поздно возникает проблема быстрого отображения реестра, в который по просьбам бизнес‑пользователей накручено несколько комбинируемых фильтров с очень редкой выборкой, ну никак не ложащихся в вашу красивую структуру базы данных и индексов базовой таблицы реестра — что‑нибудь типа "список продаж покупателям, чей день рождения выпадает на 29 февраля".

Универсального способа сделать «хорошо» тут нет, но я расскажу про модель запроса, которая позволит вам дать пользователю быстрый отклик, но при этом весьма эффективно с точки зрения PostgreSQL.

Читать далее
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 9

Лучшая задача по программированию для собеседования

Время на прочтение 7 мин
Количество просмотров 44K
Блог компании Southbridge Программирование *Алгоритмы *Карьера в IT-индустрии
Перевод

Готовиться к собеседованию можно по-разному: смотреть ролики на YouTube, читать документацию, положиться на судьбу и тд. В большинстве случаев кандидатам предложат решить одну или несколько задач. В этой статье вас ждет подробный разбор реальной задачки, рекомендации к ее решению и объяснение ожиданий интервьюера от кандидатов.

Читать далее
Всего голосов 66: ↑43 и ↓23 +20
Комментарии 274

История моделирования лесных пожаров

Уровень сложности Простой
Время на прочтение 14 мин
Количество просмотров 1.4K
Алгоритмы *Читальный зал История IT Научно-популярное Экология
Ретроспектива
Перевод

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

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

🔥
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 1

5 простых способов выйти из вложенных циклов в Python

Время на прочтение 3 мин
Количество просмотров 7.1K
Python *Программирование *Алгоритмы *Машинное обучение *Искусственный интеллект
Туториал
Перевод

Python - элегантный язык программирования. Но у него есть слабые стороны. Иногда Python не так элегантен, как должен быть.

Например, когда нам нужно выйти из вложенных циклов.

Читать далее
Всего голосов 23: ↑12 и ↓11 +1
Комментарии 18

Рекурсивное название небольшой статьи о рекурсии

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 2.2K
Lisp *Алгоритмы *C *Функциональное программирование *
Мнение

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

Читать далее
Всего голосов 5: ↑2 и ↓3 -1
Комментарии 46

Hashmap(map) по версии Golang. Часть 2

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 3.6K
Программирование *Алгоритмы *Go *
FAQ

Всем привет. Продолжаем реализовывать hashmap из исходников Go 1.19. Во второй части рассмотрим generic ключи и рост мапы. Узнаем что такое нерефлексивные ключи, как происходит итерация во время роста и немного про коробочное хеширование.

Читать далее
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 2

Вклад авторов