Вычисление расстояния Хэмминга с помощью C++

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

Несколько примеров

1. Битовые расстояния — количество позиций с различными битами

2. Расстояния в слове — количество позиций в различными символами

Битовое расстояние Хэмминга — C++

читать далее «Вычисление расстояния Хэмминга с помощью C++»

Установка и настройка библиотеки CryptoPP для C/C++

Прежде всего пара слов об этой замечательной библиотеке.

CryptoPP (она же Crypto++) — это чудесная и очень обширная библиотека криптографических функций и алгоритмов. Огромный выбор хеш-функций, реализации всех или почти всех шифров, возможность гибкой настройки каждого из них. Это и многое другое вы получите сразу после того, как прочитаете мою заметку и научитесь компилировать, собирать и подключать Crypto++ к своим проектам.

Неоспоримые плюсы CryptoPP

  • Умопомрачительное количество реализованных алгоритмов и протоколов (в том числе протокол Диффи-Хеллмана);
  • Самодокументированный код: библиотека грамотно написана, благодаря чему во многих случаях отпадает необходимость часто «гуглить» решение;
  • Скорость работы на хорошем уровне: а были сомнения? Это ж плюсы все таки.

Вещи, которые могут отпугнуть

Библиотека написана на полноценном академическом C++ с активным использованием ООП, шаблонов и классов. На первый взгляд это может показаться жутким запутанным клубком шаблонов, классов, статических функции и прочих ужасов. Особенно если библиотека была установлена «на один раз», например, студентом для домашнего задания.

Но есть выход! В таком случае можно просто нагуглить парочку примеров и вечно их модернизировать под разные задачи. Это становиться возможным как раз благодаря гибкой системе шаблонов. Работа с совершенно разными алгоритмами может быть реализована практически не отличающимся кодом. О этот чудный C++!

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

Установка библиотеки Crypto++

читать далее «Установка и настройка библиотеки CryptoPP для C/C++»

Функции активации искусственной нейронной сети

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

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

Модель искусственного нейрона

читать далее «Функции активации искусственной нейронной сети»

Краткая история развития науки об искусственном интеллекте

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

Вовсе нет, мысли и идеи о создании машины, способной мыслить и принимать решения появились больше 50 лет назад.

История становления как науки

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

читать далее «Краткая история развития науки об искусственном интеллекте»

Метод перекрестной проверки(Cross-validation) с примером реализации

Доброго времени суток! Речь пойдет о задаче классификации. А если быть точнее, то о способе оценить эффективность построенной модели, в частности, о методе перекрестной проверки. Что подразумевается под эффективностью? Конечно же, раз речь идет о классифицирующей модели, то оценивать нужно количество верных ответов.

Чем выше процент правильных ответов, тем больше вероятность, что модель адекватно себя поведет в «полевых условиях» — на реальных данных. Хорошо, когда размер обучающей выборки достаточно велик для того, чтобы выбрать оттуда процентов 30 элементов для тестирования. Но как быть, если данных для обучения очень мало?

На помощь приходит метод перекрестной проверки, в оригинале — Cross-validation.

Суть метода перекрестной проверки

читать далее «Метод перекрестной проверки(Cross-validation) с примером реализации»