Pull to refresh
9
0
Антон Вдовиченко @avdx

Программист

Send message

Преобразование Уолша-Адамара

Level of difficultyHard
Reading time11 min
Views12K

На сайте hackerrank.com есть отличная задача. По заданному массиву short[] A; найти максимальное количество его подмассивов, xor элементов которых будет одинаковым. Сам этот xor тоже нужно найти.

Максимальная длина массива равна 105, так что квадратичный алгоритм не укладывается в лимит по времени исполнения. Я в своё время с этой задачей не справился и сдался, решив подсмотреть авторское решение. И в этот момент я понял почему не справился — автор предлагал решать задачу через дискретное преобразование Фурье.

Читать далее
Total votes 64: ↑64 and ↓0+64
Comments5

Объявление и инициализация переменных в C++

Level of difficultyMedium
Reading time41 min
Views17K


Продолжаем серию «C++, копаем вглубь». Цель этой серии — рассказать максимально подробно о разных особенностях языка, возможно довольно специальных. Это шестая статья из серии, список предыдущих статей приведен в конце в разделе 7. Серия ориентирована на программистов, имеющих определенный опыт работы на C++. Данная статья посвящена объявлению и инициализации переменных.


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


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

Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments48

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

Reading time16 min
Views61K

«Тёплые полы» в квартирах- это модная тема в ремонте ещё с 1990-х.

Сейчас тема сильно развилась, так как резко увеличилось количество специалистов, желающих такие полы построить из современных материалов.

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

Кто тут прав?

Читать далее
Total votes 112: ↑108 and ↓4+104
Comments334

Как правильно дифференцировать дискретные функции (Часть 2. Все-таки, МКЭ?)

Level of difficultyMedium
Reading time10 min
Views6.8K

Публикация является продолжением обсуждения алгоритмов вычисления первой производной дискретной функции (функции, заданной массивом {аргумент: значение}, или массивом узловых значений). В части первой обсуждались функции из библиотеки NumPy, и был предложен альтернативный алгоритм, повышающий точность расчетов на границах области определения функции. В настоящей публикации предложены 2 алгоритма на основе метода конечных элементов (МКЭ, Finite Elements Method), один из которых показал на тестовых функциях лучшие результаты в сравнении с альтернативами.

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments44

Монотонная кубическая интерполяция

Level of difficultyMedium
Reading time8 min
Views3.3K

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

В данной статье разобран алгоритм монотонной кубической интерполяции, предложенный Фритчем и Карлосоном в работе [1].

На рисунке красным обозначен результат обычной кубической интерполяции Эрмита, а синим - монотонной, кругами - опорные точки траектории.

Примеры кода написаны на C++, исходники всей библиотеки лежат здесь. Также написана копия библиотеки на Java, исходники лежат здесь.

Читать далее
Total votes 15: ↑15 and ↓0+15
Comments11

Задача коммивояжера (TSP) точное решение — метод целочисленного линейного программирования (Integer programming)

Reading time20 min
Views22K

Дочитав эту статью до конца, вы сможете решать точно задачу коммивояжёра на сотню элементов за считанные секунды!

Заинтригованы? Тогда, добро пожаловать под кат.

Читать далее
Total votes 124: ↑124 and ↓0+124
Comments40

Поверхность по сети кривых

Reading time11 min
Views2.4K

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

Заранее предупреждаем. Дальше вам встретится множество геометрических терминов и формул. А кто говорил, что будет легко?!

О различных аспектах построения поверхности по сети кривых, а также полезных для ее практической реализации тонкостей, рассказывает Павел Егоров, математик-программист в C3D Labs.

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

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments3

Игровой программный рендеринг в 2022-м году

Reading time28 min
Views26K


Программный рендеринг был широко распространён в играх на ПК до повсеместного распространения т. н. 3d-ускорителей (видеокарт). Каждая игра содержала свой собственный код рендеринга, каждая игра имела свои уникальные особенности в нём. Но с распространением видеокарт программный рендеринг в играх умер.


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

Читать дальше →
Total votes 196: ↑196 and ↓0+196
Comments57

Как оценить реальную производительность своего кода

Reading time9 min
Views13K

Код, который мы пишем, и который будет исполнен процессором, — две разные вещи. На уровне ассемблера существует миллион вариантов, в каком виде интерпретировать и запустить высокоуровневые команды. Более того, современные компиляторы сильно оптимизируют код, а результат этой оптимизации похож на магию.
Читать дальше →
Total votes 68: ↑65 and ↓3+62
Comments3

Введение в триангуляцию

Reading time4 min
Views15K

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

Читать далее
Total votes 14: ↑13 and ↓1+12
Comments3

Физика вращения 3д тел

Reading time11 min
Views10K

Когда я раньше задумывался о вращении в 3д, мне было неуютно. Оно казалось сложным. Вспомнить, например, эффект Джанибекова с прецессией свободно вращающейся гайки. Настало время разобраться!

В статье Вас ждут математика, физика, а заодно численное моделирование и визуализация в libgdx.

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

Читать далее
Total votes 45: ↑45 and ↓0+45
Comments19

Как можно установить «опасный» российский сертификат в Windows

Reading time3 min
Views41K

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

Читать далее
Total votes 57: ↑51 and ↓6+45
Comments75

Операционная система FreeBSD на ноутбуке Lenovo

Reading time117 min
Views42K

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

Моя статья посвященная настройке САПР КОМПАС-3D под FreeBSD получила ряд одобрительных комментариев, поэтому мне захотелось продолжить тему «FreeBSD на десктопе». К тому же, есть добрые предпосылки — недавно я приобрел новый современный ноутбук Lenovo Ideapad 3 Gaming взамен окончательно рассыпавшегося на несколько частей Asus VX7, а с ним и массу приятного и затейливого опыта установки и настройки ОС FreeBSD для работы на новом «железе». В этой статье я не будут касаться установки и настройки специализированного ПО и прочих САПР, будет рассмотрен только системный вопрос: установка операционной системы, драйверов, патчей, библиотек, настройка и борьба с железом. Будет много выдержек из системного руководства (мануала - man) — уж сильно я к нему пристрастился за последние 130 лет.

Ссылка на статью в формате PDF для "офф-лайн" прочтения

Продолжить читать журнал
Total votes 90: ↑90 and ↓0+90
Comments91

Нужен бесплатный SSL-сертификат? Легко

Reading time3 min
Views142K

Если вам нужен SSL-сертификат, но вы не являетесь специалистом в веб-технологиях, то эта заметка для вас. Описан простой способ выпуска базового SSL-сертификата Let’s Encrypt в ручном режиме, на локальном компьютере с Windows, с помощью приложения Certbot. Этот способ позволяет получить файлы SSL-сертификата в папку на своём локальном компьютере, после чего можно установить сертификат на свой хостинг.

Потребность в SSL-сертификатах возникла у меня в связи с тем, что срок старых истёк, а создать новые оказалось невозможным из-за возникших ограничений на доменные зоны RU и РФ. Если у вас такая же проблема или вам просто надоело искать веб-сервис для выпуска SSL-сертификатов, то эта заметка вам поможет.

Поскольку я пока не знаю наилучшего пути, то ниже просто опишу ту последовательность действий, которую сам выполнил и которая позволила мне создать SSL-сертификаты для десяти своих доменов (в том числе в зонах RU и РФ), а значит и вам этот способ может помочь.

Читать далее
Total votes 45: ↑29 and ↓16+13
Comments87

Полковнику никто не пишет. Отправка писем по SMTP после изменения политики Google. С примером на Python

Reading time2 min
Views20K

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

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

Читать далее
Total votes 22: ↑21 and ↓1+20
Comments14

RustDesk — self-hosted аналог TeamViewer

Reading time2 min
Views87K

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

Читать далее
Total votes 88: ↑87 and ↓1+86
Comments41

Нормали и обратное транспонирование, часть 3: внешняя алгебра над сопряжённым пространством

Reading time12 min
Views3.2K

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

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

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments7

Объяснение фильтра Калмана в картинках

Reading time9 min
Views41K
image

Я обязан рассказать вам о фильтре Калмана, потому что он выполняет просто потрясающую задачу.

Как ни удивительно, о нём, похоже, знают немногие разработчики ПО и учёные, и это печалит меня, потому что это очень обобщённый и мощный инструмент для объединения информации в условиях присутствия неопределённости. Иногда его способность извлечения точной информации кажется почти магической, а если вы думаете, что я слишком много болтаю, то взгляните на это видео, в котором я показываю, как фильтр Калмана определяет ориентацию свободно плавающего тела, посмотрев на его вектор скорости. Потрясающе!
Читать дальше →
Total votes 116: ↑116 and ↓0+116
Comments31

Симметричные НЧ-ВЧ фильтры

Reading time12 min
Views22K
В задачах обработки сигналов часто возникает необходимость фильтрации сигналов, когда сигнал разбивается на узкополосные диапазоны. В бытовом плане мы с этим сталкиваемся при воспроизведении музыки через акустические системы, в которых каждый громкоговоритель (динамик) воспроизводит свою полосу частот, которых обычно три — низкие (НЧ), средние (СЧ) и высокие (ВЧ); для воспроизведения сверхнизких частот иногда выделяют отдельную акустическую систему под названием «сабвуфер». Конкретные границы частот зависят от реализации и ориентировочно находятся на границах 100 Гц, 1 кГц и 5 кГц. Для того, чтобы не было резких скачков громкости между динамиками, используют частичное перекрытие — когда амплитуда воспроизводимой полосы частот плавно спадает на одном, одновременно нарастая на другом.

Наиболее популярными фильтрами для такого разбиения являются фильтры Линквитца-Рейли 4-го порядка, представляющих из себя два последовательно соединённых фильтра Баттерворта, изображение АЧХ которых многим хорошо знакомо:

Читать дальше →
Total votes 74: ↑74 and ↓0+74
Comments21

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

Reading time10 min
Views32K

Я работаю программистом в игровой студии IT Territory, а с недавних пор перешел на направление экспериментальных проектов, где мы проверяем на прототипах различные геймплейные гипотезы. И работая над одним из прототипов мы столкнулись с задачей генерации случайных чисел. Я хотел бы поделиться с вами полученным опытом: расскажу о псевдогенераторах случайных чисел, об альтернативе в виде хеш-функции, покажу, как её можно оптимизировать, и опишу комбинированные подходы, которые мы применяли в проекте.

Читать далее
Total votes 29: ↑29 and ↓0+29
Comments25
1

Information

Rating
Does not participate
Registered
Activity