Pull to refresh
-4
0
Send message

Похоже, я придумал свой алгоритм поиска кратчайшего пути (upd: меня опередили...)

Level of difficultyMedium
Reading time17 min
Views38K

Всем привет! Я реализовал, похоже, собственный алгоритм поиска кратчайшего пути с отрицательными ребрами графа.

Почему собственный? Я искал подобное решение, но не нашел, возможно, оно уже было реализовано, просто плохо поискал. Жду Нобелевскую премию =)

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

Читать далее

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

Level of difficultyMedium
Reading time13 min
Views11K

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

Ресурсы


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

  • Build Your Own Text Editor — наверно, самый фундаментальный пост о создании текстового редактора с нуля, который я видел. Это превосходный туториал на случай, если вы хотите начать писать собственный текстовый редактор. Стоит заметить, что в редакторе из этого туториала в качестве внутренней структуры для текста используется, по сути, вектор строк.
  • Text Editor: Data Structures — отличный обзор множества структур данных, которые можно использовать при реализации текстового редактора. (Спойлер: как минимум одна из них будет рассмотрена в моём посте)
  • Плейлист Ded (Text Editor) на YouTube — это потрясающая серия, в которой @tscoding фиксирует процесс создания с нуля текстового редактора. Эти видео стали для меня источником вдохновения.

Зачем?


Если в сети есть так много хороших ресурсов о создании собственного текстового редактора (не говоря уже о том, что уже существует множество феноменальных текстовых редакторов), то зачем я это пишу? На то есть несколько причин:

  1. Я хотел заняться проектом, непохожим ни на один свой прошлый.
  2. Я хотел создать инструмент, которым смогу пользоваться.
  3. Мне всегда хотелось глубже разобраться с созданием собственных структур данных.
Читать дальше →

Черная магия метапрограммирования: как работают макросы в Rust 1.15

Reading time13 min
Views18K

В прошлой статье мы познакомились с одной из самых интересных возможностей языка Rust — процедурными макросами.


Как и обещал, сегодня я расскажу о том, как писать такие макросы самостоятельно и в чем их принципиальное отличие от печально известных макросов препроцессора в C/C++.


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

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

Краткий обзор поведенческих паттернов в Rust

Level of difficultyEasy
Reading time6 min
Views4.9K

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

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

Паттерны можно реализовать на любом ЯПе и сегодня рассмотрим, как их реализовать в Rust.

Читать далее

Арифметика первого класса в системе типов Rust

Level of difficultyMedium
Reading time8 min
Views8.9K

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

Начало работы с Axum — самым популярным веб-фреймворком Rust

Level of difficultyMedium
Reading time11 min
Views18K


Когда дело доходит до выбора серверного веб-фреймворка в экосистеме Rust, можно запутаться из-за большого количества вариантов. В прошлом, лидером по популярности был Rocket, но сейчас за первенство сражаются Axum и actix-web, и Axum все больше набирает обороты. В этой статье мы немного погрузимся в Axum — веб-фреймворк для создания REST API на Rust, разрабатываемый командой Tokio. Он прост в использовании и хорошо совместим с Tower — надежной библиотекой для создания модульных компонентов сетевых приложений.


В этой статье мы подробно рассмотрим, как использовать Axum для создания веб-сервиса. Кроме того, мы рассмотрим изменения, которые произошли в версии 0.7.

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

Основы многопоточности в Rust

Reading time7 min
Views9.8K

Привет!

Думаю, уже всем известно, что многопоточность – это мастхев для большинства приложений.

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

Читать далее

На гребне гравитационной волны: космический детектор LISA

Level of difficultyMedium
Reading time12 min
Views10K

Один парень изучал физику и пытался опровергнуть выводы Теории Относительности. Он даже пытался опубликовать свои изыскания в престижном журнале Physical Review Letters. Его заслуженно отбрили рецензенты и развернул редактор журнала - статья была ошибочной. И хорошо, потому что было бы, мягко говоря, неловко. Этим парнем был Альберт Эйнштейн, а ошибался он в своих выводах о гравитационных волнах.

Через 10 лет будет запущен новый детектор гравитационных волн — в космосе! Самое время о нем поговорить подробнее.

Читать далее

Лист золота толщиной один атом

Reading time12 min
Views11K


Химические и физические свойства материалов могут меняться в ответ на воздействие тех или иных факторов. К ним могут относиться как внешние (температура среды, приложенное давление, направленное излучение и т. д.), так и внутренние. К таковым относится и габариты, а точнее толщина данного материала. Ученые очень долго пытались создать лист золота толщиной в один атом, так как такой лист будет обладать рядом полезных свойств, которые не присущи трехмерному «куску» золота. Однако успеха в этом начинание не было до сего дня. Ученые из Линчепингского университета (Швеция) смогли наконец то создать одноатомный лист золота. Как именно им это удалось, какими свойствами обладает новый материал, и в каких отраслях он может быть использован? Ответы на эти вопросы мы найдем в докладе ученых.
Читать дальше →

Разработка программного средства по обработке данных фонокардиограммы

Level of difficultyHard
Reading time41 min
Views2.5K

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

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

ФКГ может использоваться для оценки эффективности лечения сердечных заболеваний и для наблюдения за состоянием сердца в течение времени. Если у вас есть симптомы, такие как боль в груди, одышка, учащенный пульс, упадок сил, обратитесь к кардиологу, который посоветует, нужна ли вам ФКГ [1].

Объектом исследования выпускной квалификационной работы является список файлов формата .csv, содержащих разделенные знаком ";" смещенные целочисленные значения амплитуды шумов сердца, записанные в течение нескольких секунд, частота дискретизации – 1000 гц (числа в записи обозначают амплитуду сигнала, временной промежуток между соседними значениями - 1 миллисекунда).

Цель работы состоит в создании алгоритма автоматической интерпретации снятых данных, который пытается по форме кривых делать выводы, аналогичные тем, которые по этим же кривым умеет делать эксперт и создание собственного алгоритма. Необходимо определить и выделить точку максимальной амплитуды, начало и окончание тона 1 для каждого из сердечных циклов. Ответ необходимо вывести в виде списка списков [t1, t2, t3], где t1 – начало тона 1, t2 – точка максимальной амплитуды, t3 – окончание тона 1. Также, для проверки результата, необходимо визуализировать полученный результат на графике. Данную процедуру необходимо произвести для каждого файла.

Ссылка на github: medical_date/script.py at main · ReshetnikovDmitrii4918/medical_date (github.com)

Читать далее

Реверс-инжиниринг механизмов биологической памяти

Level of difficultyMedium
Reading time22 min
Views2.9K

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

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

Читать далее

Теория управления шаговым двигателем (или как вертеть PTZ камеру)

Reading time4 min
Views11K

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

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

Читать далее

Зачем Программисту Микроконтроллеров Линейная Алгебра (или Как Найти Угол Между Векторами?)

Level of difficultyEasy
Reading time7 min
Views14K

В программировании микроконтроллеров часто возникает задача найти угол между векторами.

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

В данном тексте я приведу простое и понятное решение задачи вычисления угла между векторами на языке программирования Си.

Читать далее

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

Level of difficultyMedium
Reading time10 min
Views2.1K

Всем привет! Сегодня рассмотрим задачу обнаружения аномалий тонов сердца, используя аудиозаписи звуков сердцебиения. Для этого будем использовать библиотеку librosa по работе с аудиофайлами, а также классические алгоритмы машинного обучения и методы глубокого обучения.

Возьмем датасет “Heartbeat Sound”, который содержит аудиофрагменты сердечных ритмов различной продолжительности от 1 до 30 секунд, как здоровых пациентов, так и имеющих аномальные звуки сердцебиения. Набор содержит 813 аудиофайл с записями, разбитыми по категориям: artefact, extrastole, murmur, normal и unlabel. Попробуем разобраться, что обозначают эти категории.

Normal - как и следует из названия, нормальное сильное ритмичное сердцебиение.

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

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

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

Читать далее

Космики: моделирование эволюции многоклеточных организмов

Reading time4 min
Views43K
Здравствуй, Хабр!

Несколько лет назад в прикладных целях я реализовал обычный Force-based визуализатор графов.

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

Со временем возникло несколько идей, что интересного можно смоделировать.

Вот что получилось с одной из них (в кадре мелкие объекты, смотреть в HD):



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

Эволюция разумна?

Reading time14 min
Views7.1K

Приветствую, хабрчане! Сегодня речь пойдёт об одном, на мой взгляд, интересном варианте алгоритма для самообучающейся системы. Идея подобной статьи зрела давно, однаĸо руĸи всё не доходили.

Рассматриваемую ниже модель можно споĸойно отнести ĸ областям эволюционного моделирования и роевого интеллеĸта, однаĸо с заделом на дальнейшую интеграцию с существующими наработĸами в области нейросетей. Но, обо всём попорядĸу...

Читать далее

Алгоритм роя частиц

Reading time8 min
Views65K

Введение


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


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

Муравьиные алгоритмы

Reading time8 min
Views85K

Предисловие


Совсем недавно в этом блоге была опубликована статья, посвященная алгоритму поведения роя пчел. Данная статья рассказывает о другом алгоритме роевого интеллекта, называемом муравьиным алгоритмом. Она состоит из введения, вкратце рассказывающего о заимствованном природном механизме, описания оригинального алгоритма Марко Дориго, обзора других муравьиных алгоритмов и заключения, в котором указываются области применения муравьиных алгоритмов и перспективные направления в их исследованиях.

Введение


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

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

Звериные алгоритмы: какими представителями животного мира вдохновлялись исследователи для создания алгоритмов

Level of difficultyEasy
Reading time16 min
Views8.5K

По мере развития технологий в мире появляется все больше различных технологических алгоритмов. Часть из названы в честь ученых, имеющих отношение к их разработке, другая часть имеет простые (или не очень простые) «сухие» названия или же забавные наименования, например, коктейльная сортировка (Cocktail shaker sort), в русском языке называемая просто — «сортировка перемешиванием». Сегодня поговорим про алгоритмы, названные в честь различных представителей животного мира.

Читать далее

Коллективный разум бактерий или роевой интеллект

Reading time3 min
Views17K

Приветствую тебя, коллективный хабраразум, поздравляю с Новым Годом! УРА!
Некоторое время назад я решил постичь всемогущий Actionscript 3.0. Дабы сразу опробовать этот инструмент, я взялся за написание небольшой программки, которая бы имитировала жизнь бактерий. Как мне пришла эта мысль в голову — точно уже не вспомню, но результат оказался для меня неожиданным и довольно интересным.
Под катом — много картинок и мало текста. Описание программки и пара опытов.
Читать дальше →

Information

Rating
5,609-th
Registered
Activity