Все потоки
Поиск
Написать публикацию
Обновить
169.89

Алгоритмы *

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

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

Сети и графы

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

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

Читать далее

Удивительные клеточные автоматы: вариативные окрестности (взвешенные, Гаусса, «далёкие углы/стороны»)

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


?, Хабр!

Вернёмся к классической модели. Две недели назад мы рассмотрели альтернативные окрестности для КА, из числа «признанных сообществом». Сегодня дополним эту тему интересными вариативными частностями, такими как «взвешенные окрестности» и «far corners»/«far edges».

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

:h Что здесь происходит (для новых читателей серии)
В этой серии мы разбираем клеточные автоматы – дискретную модель, основой которой является сетка из ячеек-клеток, которые изменяют (или не изменяют) своё состояние в зависимости от количества соседей.

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

Самая популярная конфигурация – «B/S», или «life-like», по названию крайне широко известного клеточного автомата «Game of Life», где B/S обозначает, что в нашем правиле мы описываем всего два параметра – количество соседей необходимых для рождения новой клетки в пустой ячейке, и количество соседей для выживания существующей клетки.

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

Для понимания сегодняшней статьи достаточно знать, что (продолжение под катом):
Читать дальше →

Алгоритм рекомендаций Twitter: как он работает

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

Почти год назад Илон Маск предложил сделать алгоритм рекомендаций Twitter общедоступным. Недавно компания выложила исходный код своего алгоритма на GitHub.

В статье - перевод их блог-поста с описанием работы алгоритма рекомендаций.

Он подойдет:

любым желающим узнать, как алгоритмы выбирают, что вам показать в ленте,

Data Scientist-ам и ML-инженерам, как уникальный источник инсайтов о работе большой рекомендательной системы.

Читать далее

AI, остановись! Может ли искусственный интеллект остановить сам себя?

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

Привет хабр! Как вы знаете, мы в Smart Engines много занимаемся распознаванием на мобильных устройствах, где обрабатываем кадры видеопотока в реальном времени. Почти три года назад мы писали о том, что в подобных системах возникает крайне интересная задача - принятие решение о том, что захват кадров можно прекратить и текущий результат распознавания принять за окончательный. В той статье мы рассказали о достаточно простом, но эффективном, подходе для решения этой задачи, который смотрит на нее как на монотонную задачу остановки. Сегодня мы расскажем вам о другом подходе к этой задаче, рассматривающем ее как задачу классификации.

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

Читать далее

Автоматическое построение плоской панорамы

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

В статье представлен простой алгоритм автоматического сшивания нескольких фотографий в плоское (иногда называют перспективное) панорамное изображение (planar/perspective panoramic image). Статья содержит код на языкеPythonс использованием библиотекиOpenCV.

Читать далее

F# на примере решения олимпиадной математической задачи

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

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

Читать далее

За кулисами интеллекта ChatGPT: рассказ о том, как определяют тексты, созданные ИИ

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



Изображение сгенерировано ИИ с помощью сервиса rudalle.ru


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


Кто-то предрекает, что «обычные» поисковики и соцсети уйдут в прошлое, а им на смену придёт ChatGPT. Предрекают большое количество новых возможностей — и настолько же большие потрясения на рынке труда: целые профессии станут не нужны. Есть и те, кто считает, что сильный искусственный интеллект совсем рядом и серьёзное внимание нужно уделять вопросам безопасности человечества перед лицом открывающихся угроз со стороны искусственного разума.

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

Выступай! Или секреты захватывающей презентации

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

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

Ну а если надо?

Savant: новый высокопроизводительный фреймворк Python для видеоаналитики на оборудовании Nvidia

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

В статье рассматривается новый открытый фреймворк для потоковой видеоаналитики и демонстрируются его возможности на примере демонстрационного приложения, которое использует модель DeepStream’s PeopleNet для обнаружения людей и их лиц, размывает лица и отображает панель управления с помощью OpenCV CUDA.

Мы будем использовать Savant для обработки видео в реальном времени с протоколом RTSP и для обработки видеофайлов в пакетном режиме, чтобы продемонстрировать, как конвейер может достигать скорости 400 кадров в секунду на Nvidia Tesla T4.

Для тех, кто хочет сначала попробовать без подробностей, мы подготовили скрипты для быстрого старта на основе Docker Compose (раздел "Быстрый старт").

Savant на GitHub: https://github.com/insight-platform/Savant

Читать далее

Визуализация 5 алгоритмов сортировки на Python

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

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

В статье вы посмотрите на реализацию и визуализацию пяти популярных алгоритмов сортировки: выбором, пузырьком, вставками, слиянием и быстрой сортировкой.

Код написан на Python, а графический интерфейс построен на Tkinter.

Читать далее

Удивительные клеточные автоматы: блочные КА, окрестность Марголуса

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


?, Хабр!

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

Самой популярной моделью построения блочных КА является разбиение на блоки 2×2, со смещением на 1 клетку по диагонали за итерацию. Данная модель носит имя своего первого и основного исследователя, пионера изучения КА – Нормана Марголуса. Хоть сам вид и называют окрестностью Марголуса, он несколько отличается логически от тех окрестностей, что мы с вами обозревали ранее. А именно: данная окрестность отображает сразу оба возможных состояния, и она не привязана ни к какой конкретной клетке.
Читать дальше →

Шаблон проектирования: Chain of Responsibility

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

Всем привет.

Данная статья будет полезна начинающим Java разработчиком понять зачем нужен шаблон проектирования «Цепочка ответственности» и как его можно использовать на примерах.

Итак начнем с самого начала. Основная суть данного шаблона: связывание объектов‑получателей в цепочку и передача запроса по ней.

Читать далее

Как я решила попробовать себя в ML: анализ эмоциональной окраски отзывов с Кинопоиска 2.0

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

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

Итак, в самом начале у меня был только датасет и опорный план для дальнейшей реализации всего этого дела, приступим :)

Шаг 1: получение данных | main.py + reviews_data.zip

Скачиваем json-файлы с отзывами и затем читаем данные из файла. Добавляем полученные отзывы в общий список.

Читать далее

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

Алгоритм «Longest common subsequence» на Go. Как прийти к решению?

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

Среди программистов не утихают споры о том, надо ли знать "алгосики" для реальной работы, или же это просто некий странный ритуал для прохождения воронки собеседований в компании а-ля FAANG (MANGA). У нас в Каруне в разных командах есть разные мнения на этот счёт. Я, например, как тимлид Go-команды считаю, что некую элементарную базу знать точно бы не помешало, но всё же главное, чтоб человек был хороший.


Мнения могут различаться, но одно я знаю точно: разгадывать загадки бывает очень интересно. Я как-то из любопытства прорешивал задачки на hackerrank, и, если для решения простых задач тупо достаточно догадаться отсортировать данные или построить map (даже не надо ничего особо знать), то для некоторых придумать решение довольно проблематично.


Одна из таких задач — нахождение самой длинной общей подпоследовательности (longest common subsequence). Подобный алгоритм используется в реальной жизни, в таких программах как diff. Скажу сразу: я не смог решить задачу самостоятельно за разумное время (т.е. пока не надоело решать) и посмотрел алгоритм в Википедии.


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


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

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

Ленивое программирование с помощью ChatGPT: время пришло?

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

Некоторое время назад я опубликовал статью в которой я показывал легкость программирования с помощью ChatGPT. Для получения кода достаточно всего лишь сформулировать запрос на человеческом языке, то есть то, что ты хочешь получить. В качестве прикладной области я выбрал машинное обучение. Мне это направление показалось достаточно сложным, и поэтому я захотел проверить как этот бот в нем ориентируется. Проверка показала что бот в машинном обучении ориентируется в общем-то неплохо. Хоть и не с первого раза, но он смог выдать работоспособный код. Очень даже неплохо. Но после этого возник другой вопрос: а насколько ChatGPT полезен при разработке больших проектов?

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

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

Читать далее

Частотный vs байесовский подходы: оцениваем True Positive Rate при неполной разметке данных

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

Привет, Хабр! Меня зовут Алан Савушкин (@naive_bayes), я — дата-сайентист в команде Data Science & Big Data «Лаборатории Касперского», и мы отвечаем в том числе за фильтрацию нерелевантных алертов при телеметрии киберугроз в проекте Kaspersky Managed Detection and Response (MDR). 

В данной статье хочу с вами поделиться, как мы решали задачу построения оценки TPR (True Positive Rate) в условиях неполной разметки данных. Может возникнуть вопрос: а что там оценивать? TPR по своей сути всего лишь доля, а построить доверительный интервал на долю легче простого.

Спорить не буду, но добавлю, что из статьи вы узнаете:

— Что даже в использовании такого интервала есть свои условия.

— Как на основе серии проверки гипотез получить доверительный интервал, используя под капотом гипергеометрическое распределение. А можно ли использовать биномиальное? Спойлер: можно, но тогда важно понимать, на какой вопрос вы отвечаете, пользуясь такой оценкой. Здесь мы рассмотрим задачу с частотной точки зрения.

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

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

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

Читать далее

Дешевый как автобус, удобный как такси: перспективный вид общественного транспорта для больших и средних городов. Часть1

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

(Jean-Claude Mézières)

Ссылка на Часть1: «Предварительный анализ» (ру / eng )
Ссылка на Часть2: «Эксперименты на торе» (ру / eng )
Cсылка на «Часть3: Практически значимые решения» (ру / eng )
Cсылка на «Summary» (ру / eng )

1.1 Центральный результат


Если я только не допустил критической ошибки, то мне удалось обнаружить удивительную по своим характеристикам схему пассажирских перевозок. Представьте себе такую картину: вы находитесь в большом городе и вам нужно добраться из точки A в точку B. Все, что от вас требуется — это дойти до ближайшего перекрестка и на вашем смартфоне или установленном там специальном терминале указать точку назначения. Через несколько минут к вам подъедет небольшой, но просторный автобус. Автобус, в который можно войти, не пригибаясь, внести с собой детскую коляску, велосипед или даже виолончель, в котором всегда можно сесть и вытянуть ноги. Этот автобус довезет и высадит вас на ближайшем от точки B перекрестке. Вы доберетесь туда без каких-либо пересадок, а все путешествие, включая ожидание на остановке, займет всего на 25-50% времени больше, чем если бы совершили его на личном автомобиле. По моим оценкам в условиях современных мегаполисов такой вид транспорта будет достаточно массовым, чтобы цена одной поездки на нем была близка к стоимости билета на обычный городской автобус.
Читать дальше →

IT-Забавы. 1. Обход конем шахматной доски с получением Магического квадрата

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

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

Далее...

Ищем по-соседски: методы приближённого поиска ближайших соседей для A/B-тестирования гипотез

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

Привет, Хабр! В этой статье мы рассмотрим один из подходов к офлайновому A/B-тестированию, поговорим о сложностях, которые возникают при оценке результатов пилотного проекта (далее — пилота) и разберём реализацию в коде.

Читать далее

Модульное глубокое обучение

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

В этом материале приведён краткий обзор использования модульного подхода в задачах глубокого обучения. Более детальный разбор этой темы вы можете найти здесь. Если вас интересует модульный подход к тонкой настройке (дообучению) моделей обработки естественного языка — взгляните на наше учебное руководство 2022 года по EMNLP. Дополнительные материалы по модульному глубокому обучению вы можете найти на этом ресурсе.

Читать далее

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