Обновить
274.32

Алгоритмы *

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

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

ChatGPT как объект манипуляций. ИИ на сегодня совсем не уверен в себе. На примере гипотезы о том, что Луна — полая

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

Полая Луна. ChatGPT не уверен в себе. Это короткая статья, в которой сначала я приведу мнение ChatGPT по поводу того, что луна это полая сфера. Он уверен что Луна НЕ полая.
И после нескольких словесных манипуляций его мнение меняется. Он уже не уверен и считает что Луна вполне может быть и полой. Манипуляции это просто наводящие вопросы и подсовывание доказательств на основе собственных ответов ChatGPT.

Вот с чего ИИ начал: "Гипотеза о пустоте внутренней части Луны противоречит данным, полученным от различных космических миссий "

А вот к чему пришел: "В настоящее время отсутствуют непреложные доказательства, подтверждающие или опровергающие полую структуру Луны."

Читать далее

И снова о генеалогических деревьях

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

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

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

Читать далее

Как утереть нос NumPy с помощью двумерного БПФ

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

Двумерное преобразование Фурье — один из важнейших алгоритмов компьютерной науки этого столетия. Он нашел широкое применение в нашей повседневной жизни — от фильтров Instagram до обработки MP3-файлов.

Наиболее частой реализацией, используемой рядовым пользователем, иногда даже неосознанно, является адаптация из NumPy. Однако, несмотря на популярность, их алгоритм не является самым эффективным. С помощью нескольких простых манипуляций и статьи 2015 года мы обошли алгоритм NumPy по производительности аж на 30-60%. Основная проблема этой реализации заключается в том, что она изначально основана на слабом с точки зрения производительности алгоритме.

По своей сути алгоритм, реализуемый NumPy, является поочередным применением обычного одномерного БПФ (FFT) к двум измерениям, что очевидно не может быть оптимальным решением.

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

Читать далее

Факир математики: Золотое сечение

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

Привет, хабр! На дворе 2023 год. Теперь более чем когда‑либо всё в нашем мире основано на числах. Некоторые из них, как вы уже знаете, имеют собственные имена. Число π (пи), число e. Математика везде. Карма и рейтинги в хабре, количество ваших денег, сегодняшняя дата (22.11.2023). Даже есть вид эзотерики, веры — нумерология, вера в том, что числа связаны с судьбой. И ведь все это появилось не на пустом месте.

Мы, будто факиры заклинают своих змей, будем познавать математический мир. Красивый, бездонный и невероятно интересный. Добро пожаловать в серию статей «Факир математики», и тема первой нашей статьи — золотое сечение!

Среди всех замечательных и не очень чисел, цифр есть одно особенно интересное число...

Узнать про золотое сечение

OmniFusion: выходим за границы текста

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

Кто-то ещё сомневается, что в мире машинного обучения происходит революция? Уверен, мы являемся свидетелями преобразования привычного взаимодействия с данными, поиска информации, да и вообще работы как таковой. Ведь умные ассистенты (ChatGPT, GigaChat, Bard) готовы взять на себя даже самые сложные задачи.

Но не всегда возможно сформулировать проблему в виде текстового запроса, иногда требуется информация из других “модальностей” — картинка, звук, 3D и тд. Ниже я разберу какие именно есть способы соединения больших языковых моделей (LLM) с дополнительными форматами данных, а также опишу как устроена наша новая модель OmniFusion.

Читать далее

Теория сложности

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

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

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

Формулы, используемые в теории сложности, часто связаны с вычислительной сложностью задач. Например, NP-полные задачи, которые являются одними из самых сложных для вычисления, описываются с помощью полиномиальных уравнений. Сложность задачи может быть выражена как O(n^k), где n — размер входных данных, а k — степень, определяющая сложность алгоритма.

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

Читать далее

ChatGPT плохо отвечает на «простые вопросы». Как это починить?

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

В этой статье я расскажу о нашей последней работе — Multilingual Triple Match — системе для поиска ответов на фактологические вопросы, которая по своей точности обходит даже ChatGPT.

Читать далее

Коммивояжёр за полином*

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

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

Нет под рукой квантового компьютера? Не беда, читайте дальше и узнаете, как можно решать данную задачу на классическом компьютере за полиномиальное время* от числа вершин.

Читать далее

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

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

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

Сразу скажу, что моя статья относится лишь к условному ФААНГу. Многие аргументы из этой статьи теряют значимость в других случаях: если у вас маленькая фирма, мало кандидатов или у вас всего 10 пользователей.

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

Читать далее

Алгоритмы не важны

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

Прошу простить заранее за несколько кликбейтный заголовок )

Не так давно писал в соцсетях хейт‑пост по поводу «алгоритмических секций» при приёме на работу в Яндекс.

Да и многие другие софтверные компании это практикуют и считают навыки написания алгоритмов — чуть ли не самым важным навыком для программистов.

И ставят данной компетенции очень высокий приоритет при приёме на работу.

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

Читать далее

Из фото в 3D, ч.2: калибровка камеры

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

Фото до (слева) и после (справа) калибровки камеры

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

Знаешь параметры — живешь в Сочи можешь восстановить 3D-сцену или ее характеристики: высоту здания, расстояние до пешехода, загруженность самосвала. Словом, сплошная польза для целого ряда отраслей. 

А вот как именно определить эти заветные параметры, так и осталось за кадром. К тому же мы рассматривали простейшую модель pinhole, но в реальной жизни все сложнее. У большинства камер есть линзы, которые искажают изображения (вспомните эффект fisheye). Все эти «рыбьи глаза»‎ и другие отклонения нужно как-то корректировать.

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

Также из нее вы узнаете:

как выглядит математическая модель калибровки и дисторсии;

как собрать датасет для калибровки;

какие есть методы калибровки;

детали одного из этих методов.

Читать далее

Черкаш-код: изобретение и внедрение

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

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

Читать далее

Квантовое программирование для диспетчеризации производства

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

Лучший способ изучить новую технологию это применить ее на практике. Но как быть, если у вас нет квантового компьютера, а на изучение физики нет времени/желания? Это не проблема, потому что сегодня мы разберем наиболее доступный и безболезненный способ погружения в квантовые алгоритмы на примере комбинаторной оптимизации. И начнем с распространенной задачи, которая возникает на производстве - диспетчеризация технологических операций. Устраивайтесь поудобнее, приготовьте чашку любимого напитка и поехали!

Читать далее

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

Обучение с блэкджеком и подкреплением. Ищем оптимальную стратегию игры

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

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

Читать далее

Безотказные очереди в RabbitMQ: Гарантированная доставка сообщений

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

RabbitMQ - это открытая реализация протокола AMQP (Advanced Message Queuing Protocol), является мощным и гибким брокером сообщений. Он обеспечивает надежное и эффективное взаимодействие между компонентами системы, предоставляя разработчикам инструменты для создания гибких и масштабируемых архитектур.

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

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

Читать далее

Обзор современных подходов персонализации диффузионных нейронных сетей

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

Задача персонализации text-to-image модели состоит в донастройке предобученной нейронной сети так, чтобы она могла генерировать изображения заданного объекта в выбранных сценах. Несмотря на то, что подходы к решению этой задачи существуют, для их применения в высоконагруженных системах необходимо решить ряд проблем: большое время дообучения, высокие требования к видеопамяти, неспособность точно захватывать детали целевого объекта и др.

Меня зовут Сергей Михайлин. Я разработчик группы машинного обучения в ОК. В данной статье дан обзор современных подходов к персонализации text-to-image моделей на базе открытой архитектуры Stable Diffision. Мы приводим технические подробности каждого подхода и анализируем его применимость в реальных высоконагруженных системах. На основании собственных экспериментов по персонализации text-to-image моделей мы выделяем список возникающих при решении этой задачи проблем и перспективных способов их решения.

Читать далее

Трюк из линейной алгебры для быстрого нахождения чисел Фибоначчи

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

Я участвовал в онлайн-группе чтения книги Thirty-three Miniatures: Mathematical and Algorithmic Applications of Linear Algebra математика Иржи Матушека. Это самая нетрадиционная книга о математике, с которой мне приходилось сталкиваться. Первые две главы посвящены способам быстрого нахождения чисел Фибоначчи. Традиционный, или итеративный метод нахождения чисел Фибоначчи (основанный на хранении промежуточных значений в памяти), который мы изучали на курсах программирования, линеен по времени. Но в книге представлена методика их вычисления приблизительно с логарифмической временной сложностью. Возможно, кто-то из вас знает эту методику, но для меня она была новой, и я решил, что ею стоит поделиться.
Читать дальше →

Что в голове у змейки? Обучение нейросети играть в «Snake» генетическим алгоритмом

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

В 2020, когда случился локдаун, и к большому сожалению, появилось очень много свободного времени, мне захотелось познакомиться с Python. Начальный опыт c Pascal был еще со школы и универа, поэтому оставалось лишь придумать задачу и пойти её самоотверженно решать на питоне. Интересной задачей показалось смастерить игру змейку, прикрутить к ней мозги в виде перцептрона с парой скрытых слоёв, и путем кнута и яблока обучить цифровое животное выживать в жестоких реалиях двумерного мира :)                               

«У самурая нет цели, есть только путь»

Первый блин на производстве не отличается красотой, но опыт был получен. Наиболее привлекательным мне пришелся генетический алгоритм: отбор успешных змеек, скрещивание, частичная мутация генов и так тысячи раз до результата. Змейки, без указания им правил выживания, в тысячном поколении «понимали», что нужно стремиться съесть яблоко и никуда не врезаться, это вызывало ощущение прикосновения к чуду "It's Alive!!!"

Спустя пару лет, закончив курс по аналитике данных, появилось желание переписать проект, попрактиковаться в более серьезных разделах python и сделать тренажёр со сбором статистики.

Читать далее

Разбор классического тестового задания на позицию Python Developer

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

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

Читать далее

Изучаем Q#. Не будь зашоренным…

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

Алгориитм Шора — квантовый алгоритм факторизации (разложения числа на простые множители), позволяющий разложить число M за время O((logM)^3) используя O(log M) логических кубитов.

Алгоритм Шора был разработан Питером Шором в 1994 году. Семь лет спустя, в 2001 году, его работоспособность была продемонстрирована группой специалистов IBM. Число 15 было разложено на множители 3 и 5 при помощи квантового компьютера с 7 кубитами.

Алгоритм Шора состоит из 2-х частей - квантовых и классических вычислений.

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

Классические вычисления решают задачу как по найденному периоду степенной функции найти разложение на сомножители.

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

А какие есть ещё варианты определить период функции используя квантовые вычисления?

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

Фурье-вычисления для сравнения изображений

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

а так же начал повторять эту технологию при квантовых вычислениях

Изучаем Q#. Алгоритм Гровера. Не будите спящего Цезаря

Так почему бы не повторить успешный успех и, заодно, обобщить теорию вопроса?

Читать далее

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