Обновить
275.79

Алгоритмы *

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

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

Записываем PNG без мам, пап и внешних библиотек

Время на прочтение9 мин
Охват и читатели10K

Я решал очередную техническую задачу и столкнулся с проблемой: нужно сохранять изображения, а у меня нет сериализаторов и я не могу использовать готовые библиотеки. Ситуацию ухудшает, что из доступных форматов только PNG, JPEG и WebP. Выбор пал на PNG.

Формат изображения PNG известен с 1996 года, а на Хабре опубликовано несколько статей о декодировании этого формата. И ни одной — о кодировании. Я расскажу, как сохранить PNG своими руками на случай, если вам тоже придется это делать. Например, в академических целях.

Под катом вас ждет подробный разбор каждого байта на множестве иллюстраций.
Читать дальше →

Как я писал суперкастомизированное Android-приложение в 2024 году

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели4K
Как я писал супер кастомизированное Android приложение в 2024 году

В начале года у меня появилась прикольная идея: сделать Android-приложение, которое будет показывать анимации для алгоритмов сортировки. Чтобы вы сразу поняли, что представляет из себя приложение, на GitHub есть скрины и короткие видео. Давайте по кусочкам разберём мой проект.
Читать дальше

JavaScript: структуры данных и алгоритмы. Часть 6

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели4.3K


Привет, друзья!


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


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


Код, представленный в этой и других статьях серии, можно найти в этом репозитории.


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


Интересно? Тогда прошу под кат.

Читать дальше →

Комбинационная логика на SystemVerilog

Уровень сложностиПростой
Время на прочтение24 мин
Охват и читатели2.8K

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

Читать далее

Полиномиальный алгоритм проверки чисел на простоту: тест Агравала-Каяла-Саксены

Уровень сложностиСложный
Время на прочтение4 мин
Охват и читатели4.2K

Хотя алгоритмы определения простоты числа известны с древних времён, полиномиального алгоритма долгое время известно не было. То есть было неизвестно, принадлежит ли эта задача классу сложности P. В 2002 году индийскими математиками Агравалом, Кайялом и Саксеной был впервые предложен полиномиальный алгоритм проверки простоты чисел, поставивший точку в этом вопросе.

Читать далее

Prompt Me One More Time. Учим LLM строить графы знаний из текстов

Уровень сложностиСложный
Время на прочтение10 мин
Охват и читатели6.4K

Привет, Хабр! Меня зовут Алла, я работаю младшим исследователем в команде Memory‑Augmented models в AIRI и занимаюсь ресерчем на пересечений графов знаний и языковых моделей. Потребность в таких изысканиях понятна любому, кто пытался добиться от ChatGPT точного ответа на конкретный вопрос: подобрать литературу для курсовой, вспомнить название фильма по описанию и тому подобное. Очень часто модель начинает галлюцинировать и выдумывать факты, которых не существует.

Один из способов решения этой проблемы — связать LLM с графом знаний, но сами графы тоже должен кто‑то наполнять. Мы с коллегами доказали, что эту задачу можно автоматизировать с помощью LLM и предложили своё решение, названное Prompt Me One More Time (фанаты Бритни тут?), о котором мне бы и хотелось сегодня здесь рассказать. За подробностями же можно обратиться к статье, представлена нами на воркшопе TextGraphs-17 конференции ACL-2024, недавно прошедшей в Тайланде.

Читать далее

Анализ задачи с собеседования в Google: конь и телефонные кнопки

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

Для начала я должен заявить: хотя собеседование кандидатов — это одна из моих профессиональных обязанностей, в этой статье представлены лишь личные наблюдения, истории и мнения. Они ни в коем случае не являются официальными заявлениями Google, Alphabet или любых других лиц или организаций.

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

  • Её легко сформулировать и понять.
  • У неё есть множество решений, каждое из которых требует разной степени знаний алгоритмов и структур данных. Кроме того, здесь важны логические рассуждения.
  • Каждое решение можно реализовать в относительно малом объёме кода, поэтому она идеальна для ограниченных по времени собеседований.

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

«Куда, куда вы удалились», или поиск пропущенных остановок в маршрутах общественного транспорта в OpenStreetMap

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели931

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

С 2016 года в open source существует препроцессор метро, который валидирует маршруты скоростного городского транспорта в OSM на предмет полноты и логических/топологических ошибок и преобразует их в форматы, пригодные для сервисов роутинга и рендеринга, в том числе в GTFS. Кроме данных OSM он принимает на вход список сетей общественного транспорта (ОТ), содержащий контрольную информацию о числе линий, станций и прочего в некоторой транспортной сети. Препроцессор успешно себя зарекомендовал в подготовке данных об ОТ для таких приложений, как Maps.me и Organic Maps.

В этой статье я хотел бы поделиться подходом к детектированию одного из видов ошибок, которые довольно часто случаются в данных OSM и автоматический отлов которых представляет собой некоторый вызов — это случайное выпадение станции из маршрута. Все исходные коды валидатора и описываемого алгоритма находятся в открытом доступе. Но сначала определимся с понятиями, используемыми для представления данных об ОТ в OpenStreetMap.

Читать далее

Как мы переманили пользователей удобным сервисом платежей

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

Всем привет! Меня зовут Александра Пилюгина, я продакт-менеджер команды «QR и Фотоплатеж» в управлении «Платежи», банк ВТБ. К нам каждый месяц приходит около 500 тысяч новых клиентов. Специально для них наша команда разработала сервис переноса платежей в ВТБ Онлайн, попутно решив множество проблем с распознаванием платежных документов и извлечения из них полезной информации.

Заходите под кат — расскажу, как мы всё это делали.

Подробнее

Литкод изи — это просто

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

Задумывались ли вы, где можно применить навык решения задачек а-ля литкод изи? Я встречаюсь с ними частенько, главное просто присмотреться.

Например, на Linked.in недавно ввели "игры". Я как-то глянул на них на послеобеденном кофе.

Пусть оно само

Создаем алгоритм определения скорости объектов по видео

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

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

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

Читать далее

Пошаговое повышение производительности алгоритма

Время на прочтение11 мин
Охват и читатели1.4K

Недавно мне довелось работать над новым алгоритмом приближённого поиска ближайших соседей, который называется RaBitQ. Автор этого алгоритма уже предоставил достаточно скоростную реализацию на C++. Я попытался переписать этот алгоритм на Rust (ещё один случай «а почему бы не переписать на Rust»). Однако, я обнаружил, что моя реализация гораздо медленнее оригинальной. Далее я расскажу, как шаг за шагом доработал её производительность.

Читать далее

ИИ в диагностике рака кожи

Время на прочтение16 мин
Охват и читатели835


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

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

Насколько быстры B-деревья по сравнению с хэш-таблицами?

Время на прочтение12 мин
Охват и читатели8.7K

Во многих «скриптовых» языках для стандартных ассоциативных структур данных используется хэш-таблица (hashmap) (объекты Javascript, словари Python и так далее). Хэш-таблицы обладают множеством раздражающих свойств:

  • Уязвимость к hash flooding.
  • В случае защиты от hash flooding случайными seed порядок итераций становится недетерминированным, что мешает при тестировании снэпшотов, создании воспроизводимых сборок и так далее.
  • При вставке может требоваться рехэширование, что в наихудших случаях создаёт для больших хэш-таблиц ужасные задержки.
  • Многократное увеличение больших распределений памяти без фрагментации сложно реализовать в целевых платформах wasm, потому что трюки с виртуальной памятью недоступны, а для страниц невозможно выполнить unmapping.
  • Векторные команды в wasm ограничены, а команды AES отсутствуют. Это делает многие хэш-функции ещё более медленными.

Упорядоченные структуры данных наподобие B-деревьев не имеют этих недостатков. Обычно они медленнее хэш-таблиц, но меня удивило, насколько разнятся ожидания людей относительно их скорости.
Читать дальше →

Как мы в Яндексе делаем роборуку с искусственным интеллектом

Время на прочтение7 мин
Охват и читатели9.1K

Ещё 10–20 лет назад многие думали, что роботы под управлением искусственного интеллекта возьмут на себя всю тяжёлую и опасную работу на предприятиях. Однако нейросети нашли применение в офисах, колл‑центрах, службе поддержки и даже стали полезны людям из творческих профессий — копирайтерам, дизайнерам, программистам. Тем не менее создание роботов, которые могут самостоятельно выполнять сложные физические манипуляции с материальными объектами, остаётся трудной и нерешённой задачей.

В этой статье я расскажу, как команда ML R&D в отделе робототехники Маркета создаёт роборуку и обучает нейросети, благодаря которым робот взаимодействует с физическим миром.

Читать далее

ПО шагам: Защищаем сайт от парсеров и поведенческих ботов с помощью DNS-прокси

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

- контент не будет спаршен
- с ВПН работает
- выявит высокоуровневых JS ботов
- реальных не заблокирует
- фиксирование только настоящих просмотров
- рекомендательная система будет работать изумительно

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

Читать далее

PinkHash: Незабываемые розовые хеши

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели1.6K

Розовый хеш — это как розовый слон, только хеш.

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

К эндокринологам и многомерным антихристам

Два в одном: как древние морские существа спасаются от гибели, сливаясь в единое нечто

Время на прочтение3 мин
Охват и читатели4.9K

Хабр, привет! Это Дарья Фролова из команды спецпроектов МТС Диджитал. Сегодня поговорим о скилах, которые освоила живая природа. Однажды я наблюдала, как у аксолотля моей подруги отросла утраченная конечность. Выглядело впечатляюще, ведь это реальность, а не фильм о Дэдпуле. А вот гребневики ничего общего с грибами и медузами выдают штуки еще поинтереснее, чем аксолотли. Эти странные существа не только умеют восстанавливать части тела, но и в случае сильных повреждений сливаются с другими особями своего вида и таким образом выживают. Подробнее об этой суперсиле — под катом.

Читать далее

Антология матричных расширений: от популярного обзора до запуска на эмуляторе

Время на прочтение4 мин
Охват и читатели862

Матричные расширения в мире технологий появились лишь в 2020 году. Даже в сравнении с относительно «молодыми» темами ИИ и квантовых вычислений это буквально «новорожденный» материал в IT-мире. И что самое интересное, матричные расширения уравняли тот разрыв в развитии, который существует между процессорными архитектурами. Свои расширения создают и Intel, и Apple, и IBM, и рабочие группы международного альянса RISC-V. 

Как это ни парадаксально, по числу матричных расширений RISC-V уже обогнала все остальные архитектуры. Сейчас для нее разработаны два кастомных расширения, а два стандартных развиваются буквально у нас на глазах. Если хотите разобраться в многообещающей для высокопроизводительных вычислений теме, изучите тексты в нашей подборке. От объяснения, что такое матричные расширения и какие они бывают, мы плавно погрузимся в спецификации разработки и протестируем матричное расширение на эмуляторе.

Читать далее

Взлом старого ZIP-файла с криптопрограммами подпольщиков ЮАР

Время на прочтение8 мин
Охват и читатели9.6K

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

Недавно я заинтересовался защищёнными коммуникациями, которые использовались Африканским национальным конгрессом в рамках операции «Вула», проводившейся в конце 1980-х годов. Операция «Вула» заключалась в проникновении лидеров АНК (и передаче снаряжения) в ЮАР для подготовки тайной сети, реализующей различные элементы политической активности АНК внутри страны.

Для успеха операции требовались защищённые коммуникации, организованные на основе 8-битных компьютеров, DTMF-сигналов, акустических преобразователей и различного другого оборудования для обмена сообщений с одноразовым шифрованием, использующих программы, написанные на PowerBASIC.
Читать дальше →

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