Колонками
Постранично
29 июля
Алгоритмы многоруких бандитов

Многорукие бандиты — это альтернатива A/B-тестированию, то есть методу обоснованного выбора между рядом вариантов. С одной стороны, это простая вещь, с другой — она имеет много применений.

Читать далее →
20 июля
Распределения вероятностей

Интерактивные графики функций плотности вероятностей и функций распределения. Нормальное распределение (Гаусса), распределение Пуассона, экспоненциальное распределение, распределение Вейбулла и бета-распределение.

Читать далее →
19 июля
Поиск Кёнига

Поиск Кёнига в языке C++ — это набор правил для поиска неквалифицированных (без оператора разрешения области видимости ::) имён функций и операторов. По-другому он называется поиском, зависящим от аргументов, по-английски — argument-dependent lookup (ADL), Koenig lookup.

ADL в упрощённой формулировке означает, что при поиске имени функции компилятор будет рассматривать не только то пространство имён, в котором она находится, но ещё и пространства имён, которые содержат типы аргументов этой функции. В отличие от перегрузки функций, ADL — особенность вызова функции, а не её объявления [Дьюхерст07, 96—97].

Причины появления

Герб Саттер пишет [Саттер05, 118]:

«Причина [...] заключается в том, чтобы обеспечить коду, использующему объект x типа X, возможность работать с частью его интерфейса, состоящей из функций, не являющихся членами (например, инструкция cout << x использует оператор operator<<, который не является членом класса X) так же легко, как и функции-члены (например, вызов x.f() не требует выполнения специального поиска, поскольку очевидно, что поиск f выполняется в области видимости X)».

Попробуем разобраться.

Читать далее →
28 июня
Анализ рейтингов сериалов

Небольшая практика по разведочному анализу данных (exploratory data analysis).

«Теория Большого взрыва» (The Big Bang Theory, 2007—2019)

Данные должны быть в формате CSV (comma-separated values):

season, episode, rating
     0,       1,    6.7
     1,       1,    8.3
     1,       2,    8.4
     1,       3,    7.8
     1,       4,    8.2
     1,       5,    8.0
   ...,     ...,    ...

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

Читать далее →
План курса по языку C++

Бесплатный видеокурс по языку C++ «dynamic_pointer_cast»

Для кого?

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

Курс записывается профессиональным преподавателем. Каждая тема разбирается подробно, задания — на канале. Вы получите представление о разных стилях написания кода, узнаете, как писать производительные и поддерживаемые приложения.

Ссылка на Youtube: youtube.com/

Ссылка на канал: dynamic_pointer_cast

Репозиторий: github.com/Dyzzet/dynamic_pointer_cast

Я в телеграме: @dyzzet.

Бесплатный набор

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

Примерные темы видео

  1. Hello, world. Типы (диапазоны, внутреннее устройство). Явные и неявные преобразования.
  2. Ввод и вывод.
  3. Операторы. Управляющие конструкции. Область видимости.
  4. Массивы и указатели. Ссылки.
  5. Функции. Перегрузка функций и операторов.
  6. Классы памяти.
  7. Строки.
  8. Структуры, битовые поля, объединения.
  9. Файлы.
  10. Препроцессор. Технические детали: компиляция, компоновка, оптимизация.
  11. Пространства имён. ADL.
  12. Классы и объекты. Правило трёх, пяти, нуля.
  13. Обработка исключений. RAII.
  14. Шаблоны. SFINAE. CRTP.
  15. Наследование и полиморфизм. RTTI
  16. Умные указатели.
  17. Контейнеры, алгоритмы, итераторы стандартной библиотеки. BOOST.
  18. Основы многопоточности.
  19. Важные нововведения в новых стандартах (в нескольких частях).
  20. Популярные идиомы, проектирование программ на C++.
27 апреля
Необычные работы научной сессии

На международной научно-технической конференции студентов, аспирантов и молодых учёных «Научная сессия ТУСУР» ежегодно представляют сотни докладов. По большей части это работы с такими сложными названиями, как «Проектирование широкополосного буферного усилителя диапазона 8—12 ГГц на основе отечественной 90 нм Si-CMOS-технологии», иногда это захватывающие работы на стыке технологий и медицины или экологии. Но есть среди них и весьма занятные работы, о которых я сейчас расскажу (по материалам конференций 2018—2019 годов).

Ламповый MP3-проигрыватель

Этот проект с корпусом из фанеры, монофоническим однотактным усилителем на лампах 6Ж1П, 6П1П и одноплатным компьютером Raspberry Pi был представлен на конкурсе на лучший проект года среди молодёжного предпринимательства Томска «10К. Идеи для жизни» и выставке молодых учёных «РостUp 2017», где, по заверению авторов, вызвал заинтересованность публики. Заявлено много функций: проигрывание со съёмного носителя и других источников (винилового проигрывателя с предусилителем), онлайн-радио и просто ламповый усилитель.

Читать далее →
23 апреля
Поиск элемента в упорядоченной матрице

В матрице строки и столбцы отсортированы по возрастанию. Нужно найти позиции некоторого элемента, в примере это 100.

\( \begin{matrix} 60 & 64 & 66 & 67 & 71 & 75 & 76 & 77 & 81 & 85 \\ 62 & 70 & 72 & 73 & 77 & 81 & 85 & 89 & 90 & 93 \\ 63 & 71 & 73 & 75 & 79 & 82 & 88 & 93 & 96 & 97 \\ 63 & 81 & 83 & 84 & 86 & 89 & 92 & 96 & 98 & \bf{100} \\ 72 & 84 & 85 & 87 & 89 & 90 & 94 & 97 & 102 & 106 \\ 78 & 85 & 86 & 91 & 94 & 97 & \bf{100} & 101 & 103 & 110 \\ 87 & 90 & 94 & 96 & \bf{100} & 101 & 104 & 108 & 111 & 114 \\ 90 & \bf{100} & 101 & 105 & 106 & 110 & 111 & 113 & 116 & 120 \\ 94 & 103 & 106 & 110 & 111 & 114 & 117 & 121 & 122 & 125 \\ 95 & 111 & 115 & 117 & 119 & 122 & 125 & 127 & 128 & 130 \end{matrix} \)

Число 100 находится в позициях (если считать индексы с нуля): (3, 9), (5, 6), (6, 4) и (7, 1). Как решить такую задачу?

Читать далее →
5 февраля 2019
Как сделать «интерпретатор» кода, как на этом сайте

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

Новое решение строится на промисах и асинхронных функциях async/await. Для примера напишем функцию factorial() для вычисления факториала числа, он определён для целых чисел: \(n!=(n-1)!\times n\), \(0! = 1, 1! = 1\).

Вызывать функцию будем по нажатию на кнопку с идентификатором start.

$('#start').click(async () => {
    buttonPromise = makeButtonPromise();
    const n = 5;
    const result = await factorial(n);
    // ...
});

Читать далее →
5
4 3 2 1
© MMXIMMXX
Светлая тема / тёмная тема