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

Алгоритмы *

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

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

PQ3, Apple’s New iMessage Security Protocol: что нового?

Уровень сложности Простой
Время на прочтение 3 мин
Количество просмотров 713

Хоть убейте, не нашёл отличий. Впервые увидел на Коде Дурова, там, как обычно, не дали подробностей. Ключи используются от устройств, ну и что? Сейчас не также? Также. Приватный ключ здесь, публичный остальным, приватный никому не показываем. Всё, пошло поехало.

Но это же Apple! Не может всё так быть просто. Окей, ищу дальше, натыкаюсь на securitylab, там уже побольше подробностей.

Читать далее
Всего голосов 4: ↑4.5 и ↓-0.5 +5
Комментарии 1

Новости

Когда в первый рабочий день джуном смотришь на свои задачи…

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 17K

Привет, Хабр!

Собственно, а все ли поняли мем?

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

Читать далее
Всего голосов 16: ↑2 и ↓14 -12
Комментарии 59

Переворачивающиеся при умножении числа

Уровень сложности Средний
Время на прочтение 7 мин
Количество просмотров 12K

Здравствуйте!

Расскажу о серии задач, которая случайно возникла в процессе решения другой задачи. Мне на глаза попалось равенство:

81 * 27 = 2187

– Интересно, – подумал я. – А бывают ли ещё такие числа, чтобы цифры слева и справа повторялись?

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

Интерактивная диаграмма Ганта для тысяч работ

Уровень сложности Средний
Время на прочтение 5 мин
Количество просмотров 10K

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

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

Истории

Как хранить токены и пароли в программах на Python

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 14K

Уже на первом этапе изучения языка python я думаю все, как и я, озадачиваются вопросом – как быть с секретными данными – логины, пароли, токены и т.п. Как и где их хранить? Ну не прописывать же их явно в тексте программы, а потом еще и на Гитхабе размещать. Особенно эта тема актуальна в сфере алготрейдинга, здесь думать о доступах и секретности паролей надо в первую очередь.

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

Читать далее
Всего голосов 17: ↑5 и ↓12 -7
Комментарии 12

Подготовка к собеседованию на позицию Data Scientist. Часть 1: Live Coding

Уровень сложности Средний
Время на прочтение 14 мин
Количество просмотров 8K

В данной статье разберемся что такое live coding интервью и как к нему готовиться.

Материал в первую очередь будет полезен Data Scientist'ам и ML инженерам, при этом некоторые разделы, например, Алгоритмы и структуры данных подойдут всем IT специалистам, которым предстоит пройти секцию live coding.

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

Как устроен языковой сервер

Время на прочтение 7 мин
Количество просмотров 2.9K
В этом посте я хочу прокомментировать один любопытный комментарий из базы кода rust-analyzer. Вот этот комментарий.

Здесь описан интересный рекурсивный алгоритм, неоднократно встречающийся в разных аспектах программирования языковых серверов. Я видел реализации такого алгоритма на Kotlin и C#, а затем сам реализовал его на Rust.

Вот, казалось бы, рандомная подборка возможностей IDE:

  • Переход к определению
  • Завершение кода
  • Прогон теста на курсоре
  • Извлечение переменной

Что общего между ними? Все эти возможности относятся к актуальному положению курсора! В данном случае вводом служит не только состояние кода в конкретный момент времени, но и конкретное расположение исходников проекта, например src/main.rs:90:2.
Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 2

Новый рекорд производительности FizzBuzz

Уровень сложности Средний
Время на прочтение 18 мин
Количество просмотров 5.5K

283 ГБ/с на AMD Ryzen 9 7700X.

Сборка (протестирована с GCC 13):

g++ fizzbuzz.cc -march=native -o fizzbuzz -O3 -Wall -std=c++20 -fno-tree-vectorize -fno-exceptions

На сборку уходит несколько минут. В зависимости от CPU можно добиться повышенной производительности с -fno-tree-vectorize или без этого ключа.

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

О чем говорят руки. 2 место на соревновании Kaggle + код решения

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 3.9K

Приветствую всех читателей! Меня зовут Артем Топоров, и сегодня я хочу поделиться с вами своим опытом участия в соревновании по распознаванию жестового языка, организованном компанией Google. На этом соревновании, собравшем 1139 команд со всего мира, нам удалось занять 2 место. Расскажу как мы вместе с Николаем Форратом и Xun Zhao разработали ML алгоритм для мобильных устройств, едва не заняли первое место и при чем тут спектрограммы. Вы можете использовать наш код, так как он распространяется под лицензией Apache 2.0.

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

Полиномиальные корневые методы синтеза САУ ч.2

Уровень сложности Средний
Время на прочтение 16 мин
Количество просмотров 1.6K

Леонид Маркович Скворцов. Широко известный в узких кругах математик, профессионально занимающийся математическими проблемами автоматического управления. Например, его авторские методы использованы в SimInTech. Данный текст, еще готовится к публикации. Но с разрешения автора, читатели Хабр будут первыми кто сможет оценить. Первая часть здесь...

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

Обзор библиотеки Stan в R

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 886

Приветствую!

Stan - это библиотека на C++, предназначенная для байесовского моделирования и вывода. Она использует сэмплер NUTS, чтобы создавать апостериорные симуляции модели, основываясь на заданных пользователем моделях и данных. Так же Stan может использовать алгоритм оптимизации LBFGS для максимизации целевой функции, к примеру как логарифмическое правдоподобие.

Для облегчения работы с Stan из языка программирования R доступен пакет rstan, который предоставляет интерфейс R для Stan.

Сегодня мы и рассмотрим этот пакет.

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

Вороной, Манхэттен, рандом

Уровень сложности Простой
Время на прочтение 34 мин
Количество просмотров 12K

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

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

Осторожно, очень много картинок!

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

Шпаргалка для алгособеса — алгоритмическая сложность, структуры данных, методы сортировки и Дейкстра

Уровень сложности Средний
Время на прочтение 33 мин
Количество просмотров 55K

Привет, Хабр!

Так уж повелось, что любой уважающий себя работодатель перенимает передовые^✻ методики FAANG — по этой причине практически во всех IT-собесах есть она: секция алгоритмов. Кто-то ей рад, кто-то не очень, но секция есть и уходить пока не планирует. Поэтому нужно закатать рукава и достойно встретить суровую реальность.

Читать далее
Всего голосов 183: ↑181 и ↓2 +179
Комментарии 76

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Работа процессора (физический препроцессор) без счётчика команд

Уровень сложности Сложный
Время на прочтение 6 мин
Количество просмотров 1.6K

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

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

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

Читать далее
Всего голосов 10: ↑3 и ↓7 -4
Комментарии 16

Компилятор за выходные: избавляемся от переменных

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 10K

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

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

ssloy@khronos:~/tinycompiler$ cat *.py|wc -l

611

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

Итак, тема сегодняшнего разговора: генерация кода на питоне без использования переменных.

Читать далее
Всего голосов 39: ↑38 и ↓1 +37
Комментарии 33

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

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 15K

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

Читать далее
Всего голосов 16: ↑11 и ↓5 +6
Комментарии 15

Реализация слоев в NN (часть 1)

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 2.9K

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

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

Закон парадокса в логике и математике

Уровень сложности Средний
Время на прочтение 10 мин
Количество просмотров 5.6K

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

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

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

Минималистическая модель живой клетки в браузере

Время на прочтение 8 мин
Количество просмотров 3.1K

Вы когда-нибудь задумывались, как действуют клетки — элементарные единицы живой материи? Я программист, но одновременно увлекаюсь клеточной биологией. Поэтому я решил смоделировать работу простейшей клетки на TypeScript. Вообще, клетки невероятно сложны; по оценкам учёных, человеческая клетка в среднем содержит 100 триллионов атомов. По-прежнему очень мало известно о том, как все эти биомолекулы взаимодействуют в клетке, поэтому в точности смоделировать работу клетки невозможно.

Размышляя на эту тему, я нашёл статью Fundamental behaviors emerge from simulations of a living minimal cell (Фундаментальные виды поведения возникают на основе моделирования простейшей живой клетки). Опираясь на кинетические параметры, авторы статьи создали модель взаимодействия молекул и химических реакций между ними в простейшей известной клетке. Затем эта симуляция запускается, и на её  основе можно наблюдать такие процессы как репликация ДНК, метаболизм и синтез белков.

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

Как языковая модель предсказывает следующий токен (часть 1)

Время на прочтение 27 мин
Количество просмотров 5.4K

Я обучил небольшой (порядка 10 миллионов параметров) трансформер по превосходному туториалу Let’s build GPT: from scratch, in code, spelled out Андрея Карпати. После того, как он заработал, я захотел максимально глубоко понять, как он устроен внутри и как создаёт свои результаты.

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

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

Если вы знакомы с трансформерами и хотите сразу узнать вывод, то он таков: каждый блок трансформера (содержащий слой многоголового внимания и сеть с прямой связью) изучает веса, связывающие конкретный промт с классом строк, найденных в обучающем корпусе. Распределение токенов, соответствующее этим строкам в обучающем корпусе, и есть приблизительно то, что блок выводит как прогноз для следующего токена. Каждый блок может ассоциировать один и тот же промт со своим классом строк обучающего корпуса, что приводит к другому распределению следующих токенов, а значит, и к другим прогнозам. Окончательный результат работы трансформера — это линейное сочетание прогнозов каждого блока.

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

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