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

Алгоритмы *

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

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

Эффективное хранение графов: матрицы смежности

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

Так случается, что ограничения не позволяют нам хранить матрицу смежности графа размером n^2. В данной статье я описал, как уменьшить этот размер в 8 раз для ориентированного графа и в 2 раза для неориентированного. Битовая и треугольная матрицы смежности - вот что такое эффективное хранение.

Читать полностью

Фильтрация JSON: как мы проводили конкурс на самый быстрый алгоритм

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

Привет, меня зовут Костя Плешаков, я Архитектор в Quadcode. В статье расскажу, как мы организовали конкурс, который помог решить проблему исключения некоторых данных (в нашем API) в процессе отправки на фронт. В результате мы получили высокопроизводительный алгоритм фильтрации JSON с использованием векторных инструкций Intel® AVX2.

Читать далее

OCR за час? — Не думаю

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

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

Читать далее

Обратная сторона Луны: как мы создали чат-бота с «человеческим лицом»

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

Меня зовут Александр Терехов, я работаю инженером группы классификации и диагностики (КиД) в самарском филиале «Инфосистемы Джет». Несколько лет назад я помогал девушке с дипломной работой, и мы создали чат-бота с психологическим уклоном — он тестировал типы личности и темпераменты. Тогда я настолько проникся этим опытом, что, когда начал создавать чат-бота для нужд технической поддержки, решил добавить в него немного психологии. Так появилась Луна — чат-бот, который помогает в работе инженерам «Инфосистемы Джет» и реагирует на эмоции.

Читать далее

«Эволюция против муравьёв» сравниваем алгоритмы оптимизации

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

Решаем задачу о ранце. Муравьиный алгоритм или генетический лучше? Давайте разбираться.

Читать далее

На графах: операция раскрытия переменной, конечные состояния

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

Возможны ли иные операции на графах кроме тех, что уже используются? Возможны.

Читать далее

8 ошибок, из-за которых ты проиграешь в соревновательном Data Science

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

Привет, чемпион!

Если ты читаешь этот пост, значит, тебе стало интересно, не допускаешь ли этих ошибок ты?! Почти уверен, что ты допускал эти ошибки хотя бы раз в жизни. Мы не застрахованы от совершения ошибок, такова наша человеческая натура — ошибаться для нас естественно. Однако, я постараюсь уберечь тебя от тех ошибок, которые совершал сам или замечал у других.

Так вышло, что за время участия в чемпионатах по соревновательному анализу данных я достаточно часто бывал в призовых местах. Однако, бывали случаи, когда я лишался призовых по глупости или неосторожности. Рассказываю по порядку.
Читать дальше →

STM32. Про синус

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

В статье алгоритмическая оптимизация функции sin() для бюджетных микроконтроллеров stm32, повышающая производительность в 10 и более раз.

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

Читать далее

Строковые алгоритмы на практике. Часть 1 — Алгоритм Кнута — Морриса — Пратта

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

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


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

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

Первые 255 задач на «‎литкоде»‎

Время на прочтение3 мин
Количество просмотров30K
Были годные статьи об аргументированной пользе алгоритмов (например, habr.com/ru/company/geekfactor/blog/597035), тут хочется поделиться личным опытом.

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

Что дано: фронтэнд с элементами nodejs разработки. Знаю javascript, взял java из-за общего префикса и Брюса Эккеля. Язык годный, легко читать, осознал что надо оч много писать после 175 задачек на ресурсе под именем leetcode. Попробовал язык мобилок, язык прекрасный, но не для мобилок. Swift прекрасен и будет еще прекраснее в будущем. До наступления прекрасного будущего решил юзать питон: легко и мало писать, но трудно читать — да и пофиг, так как каждый день новая задачка.
Читать дальше →

Как улучшить любой патент на изобретение в IT, на примере Яндекса

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

«За всю историю человечества было выдано 50 млн. патентов.
Задача — сделать 1 млрд. новых изобретений».
@MagisterLudi

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

Читать далее

Нарративная математика

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

Приложения для игрового вычисления сюжетов и историй.

Активировать

Алгоритмы и рыбалка: как работает мозг программиста в естественной среде обитания

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

Привет, меня зовут Валерий Антонов, я руковожу направлением Java в Уральском банке реконструкции и развития (УБРиР). Сегодня расскажу, как я смог переложить систему алгоритмов на, казалось бы никак с этим не связанное хобби, - рыбалку.

Читать далее

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

Загадки быстрого преобразования Фурье

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

• Метод фазово-амплитудной интерполяции (ФАИ)

• Точное определение частоты, амплитуды и фазы гармоник сигнала

• Выявление резонансов

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

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

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

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

Читать на английском

Читать на русском

Экономическая модель для ММО

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

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

Читать далее

Обработка данных криптовалютного рынка в RavenDB с использованием временных рядов

Время на прочтение10 мин
Количество просмотров4.6K
Что если можно было бы хранить данные временных рядов вместе с «обычными» данными, избавившись от затрат времени, сил и ресурсов, связанных с использованием отдельной СУБД?

RavenDB — это документо-ориентированная NoSQL-база данных, оснащённая стандартной поддержкой работы с временными рядами. То есть — получается нечто вроде MongoDB со встроенной InfluxDB. Это позволяет применять RavenDB для хранения и обработки данных, получаемых с финансовых рынков. В частности — строить графики цены Bitcoin с использованием C# и TypeScript.

Вот 5-минутное видео, в котором приведено сравнение поддержки временных рядов в RavenDB с их поддержкой в других подобных системах.

В этом видео идёт речь об интересных рыночных данных и о построении ценовых графиков по образцу популярного приложения для трейдинга, разработанного компанией Robinhood. Данный материал посвящён разбору демонстрационного приложения. Когда вы его освоите, вы должны получить представление о том, как работать с временными рядами в RavenDB.
Читать дальше →

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

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

Всем привет! Для тех, кто уже читал мои посты о блокчейне хочу сказать, что рад вас видеть снова на своей странице. Для тех, с кем мы еще не знакомы, меня зовут Валерий, я junior developer в западном стартапе, приятно познакомиться. 

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

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

Читать далее

Сага о моделировании бизнес-процессов на базе конечного автомата (fsm)

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

Про конечные автоматы (finite state machine, fsm) много кто слышал, но используют их явно в реальных проектах редко. Чаще встречаются конструкции, которые поведением напоминают КА, но ими не являются.
Почему же автоматы обходят стороной и/или изобретают велосипеды, превращая код в спагетти?
По-моему, тут дело в стереотипе: мол, автоматы — это что-то сложное из теоретической математики и к реальной жизни не относится. А применять их можно только в лексических анализаторах или еще чем-нибудь специфичном.


На самом деле, область применения КА куда шире и понятнее. Давайте разберем на примере автоматизации процессов в любимом кровавом enterprise.


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

Асинхронная обработка данных (асинхронные вычисления). Анализ поведения

Время на прочтение43 мин
Количество просмотров6K
На первый взгляд кажется, что в асинхронном дизайне обработки данных изобрести что-либо новое маловероятно. Действительно, все возможные приемы и компоненты синтеза уже давно известны: и кодирование, и многофазность, и индикация, и хэндшейк, и С-элементы, и пороговые элементы… Но, в отношении практически любого метода асинхронной обработки данных можно достаточно уверенно утверждать: все они заведомо избыточны. Причина такого положения видится в несколько поверхностном понимании различий между асинхронными и синхронными схемами. Принято считать, что асинхронной является такая схема, в которой отсутствует тактовый сигнал. Отсюда вытекает и решение: достаточно взять за основу архитектуру синхронного дизайна (комбинационную логику, регистры), а тактовый сигнал заменить какой-то управляющей схемой. Таким подходом в той или иной мере грешит практически любой метод. Блочный синтез — идея более оригинальная, но от этого не менее избыточная.

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

Как написать решатель «Пятнашек» на C#

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

Цель этой статьи — пробудить интерес читателей к удивительному миру и показать различные способы решения таких же интересных головоломок, как «Пятнашки». Создайте свою базу данных с шаблонами и начните решать головоломки менее чем за 50 миллисекунд. Материалом делимся к старту курса по разработке на C#.

Читать далее

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