Dyzzet|
C++ Data Science Алгоритмы Темы · Блог · YouTube · Telegram
Колонками
Постранично
Обзоры книг по C++

Это будет серия публикаций о большом количестве книг по C++. Книг по этому языку действительно много, они разные, как разными бывают и цели у читателей. Поставим нескромную задачу — помочь сориентироваться в этом море литературы.

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

Первый стандарт C++ был принят в 1995 году (C++ ANSI 1995), но первый международный — только в 1998 (ISO/IEC 14882:1998), поэтому первый и более ранние версии будем считать «достандартным» C++.

11 декабря 2020
Парадокс Симпсона

Корреляция измеряет связь между двумя переменными. Важная оговорка: при прочих равных [Грас-20, 91]. Попробуем в этой заметке разобраться. С котиками.

Возьмём данные о проектах на краудфандинговой площадке «Кикстартер» на январь 2018 [Kaggle].

Категория
Количество проектов
Количество успешных проектов
Доля успешных проектов
Программное обеспечение
3041
371
12 %
Веб-разработка
3900
258
7 %

Читать далее →
2 ноября 2020
Квартет Энскомба

Квартет Энскомба (это английский математик) — четыре набора точек на плоскости. Их особенность в том, что каждый из четырёх наборов сильно отличается от других графически, но некоторые простые статистики совпадают.

Читать далее →
29 июля 2020
Алгоритмы многоруких бандитов

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

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

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

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

Поиск Кёнига в языке 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 июня 2020
Рейтинги сериалов: таблица

Небольшая практика по разведочному анализу данных (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
   ...,     ...,    ...

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

Читать далее →
27 апреля 2020
Необычные работы научной сессии

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

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

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

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

В матрице строки и столбцы отсортированы по возрастанию. Нужно найти позиции некоторого элемента, в примере это 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);
    // ...
});

Читать далее →
9 8 7 6
5
4 3 2 1
© MMXI—MMXXV. RSS
 Boosty
Светлая тема / тёмная тема