Код выглядит так из-за санитайзера. Компилятор с включенной опцией -fsanitize=undefined добавляет в исходный код нужные ему проверки. По теме есть лекция от разработчика asan https://www.lektorium.tv/lecture/23702
Казалось смешным, пока не вспомнил, что храню остатки урожая чеснока в масле в банке в холодильнике с температурой около 4 градусов. В тепле не оставлял, и чеснок полностью раздавлен. Использую только для жарки, и только сейчас дошло, что варианты с заправкой отпадают. А ведь это очень распространенный рецепт.
Хабр упорно не давал отправить личное сообщение, поэтому пишу сюда возможные неточности:
Например, мы хотим первой картой получить десятку треф, вероятность этого события в случайно собранной колоде будет 1/36, но шанс получить этой же карты на втором эксперименте будет уже 1/35.
Если нужно вытащить ровно на втором ходу, то вероятность события - это произведение вероятностей: <не вытащить на первом> * <вытащить на втором> = 35/36 * 1/35 = 1/36.
Шанс получить десятку треф на втором ходе будет (1/36 + 1/35).
Это предложение по смыслу повторяет предыдущее. Но если нужно вытащить за два хода, то вероятность равна: <вытащить на первом> + <вытащить ровно на втором (выше)> = 2/36. Это же проверяется другой формулой: <вытащить за два хода> = 1 - <не вытащить за два хода> = 1 - <не вытащить на первом> * <не вытащить на втором> = 1 - 35/36 * 34/35 = 1 - 34/36 = 2/36
У Shell sort опечатка в асимптотиках - квадрат относится только к логарифму. Ещё википедия говорит, что сортировка имеет O(nlogn) или O(nlog^2(n)) в лучшем случае (в зависимости от выбора шага) и до O(n^2) в худшем, https://en.wikipedia.org/wiki/Shellsort.
upd: Спасибо @LeetCode_Monkey и @qw1 за то, что отметили ошибку в моем комментарии. Не обратил внимание, что в третьем примере гонка, а значит ub, возникает уже при вставке первого элемента в main. То есть недостаточно делать reserve и использовать индексы. Из головы вылетело простое правило, что std::vector не является потокобезопасным, поэтому изменение vector в нескольких потоках без синхронизации - ub.
В третьем примере vector следует полностью строить в main, т.к. функция в конечном итоге ждет завершения всех потоков.
#include <thread>
#include <vector>
using namespace std;
void func() {
for (int i = 0; i < 100; ++i);
}
int main()
{
const int nworkers = 5;
vector<thread> threads;
threads.reserve(nworkers + 1);
threads.emplace_back([&threads, nworkers]{
for (int i = 0; i < nworkers; ++i)
threads.emplace_back(func);
});
for (int i = 0; i < nworkers + 1; ++i)
threads[i].join();
return 0;
}
Можно. threads[0] добавляется в main. Основной поток с main остановится на первом join(), пока не завершится threads[0], к завершению которого вектор будет построен.
В первом примере дважды допускается одна и та же ошибка - возврат ссылки на локальную переменную функции. Упрощенно https://godbolt.org/z/Ybcn3n1va. Сначала параметр v конструктора возвращаемого объекта ссылается на локальную переменную arg функции arg. Затем поле value ссылается на локальную переменную v конструктора named_arg.
В третьем примере можно было использовать vector::reserve(), чтобы гарантировать отсутствие реалокаций, и индексы вместо итераторов для корректного определения начала и конца вектора.
We are contacting you to let you know that Atlassian is winding down its operations in Russia and Belarus, and our records identify you are using Atlassian's no‑charge product(s) within these identified regions. As such, this email constitutes notice that, in accordance with our Cloud Terms of Service, we will terminate your Atlassian account in 30 days.
[Далее идет причина прекращения работы, которую не буду выписывать, чтобы не получить 20.3.3 коап]
You can export your data before your Atlassian account is terminated in 30 days. Please visit our Data Storage FAQs for more details. If you are a Trello user, please visit our Data Export page.
В определении нейтрального элемента не хватает свойства перестановочности, если x - нейтральный, то x * a = a * x = a. Сейчас у нас элемент x является только правым нейтральным, https://ru.wikipedia.org/wiki/Нейтральный_элемент#Определение. Операция в полугруппе и моноиде не является коммутативной.
Что такое органичные? Например?
Код выглядит так из-за санитайзера. Компилятор с включенной опцией -fsanitize=undefined добавляет в исходный код нужные ему проверки. По теме есть лекция от разработчика asan https://www.lektorium.tv/lecture/23702
Казалось смешным, пока не вспомнил, что храню остатки урожая чеснока в масле в банке в холодильнике с температурой около 4 градусов. В тепле не оставлял, и чеснок полностью раздавлен. Использую только для жарки, и только сейчас дошло, что варианты с заправкой отпадают. А ведь это очень распространенный рецепт.
У вас операции в map за логарифм, поэтому O(nlogn).
Хабр упорно не давал отправить личное сообщение, поэтому пишу сюда возможные неточности:
У Shell sort опечатка в асимптотиках - квадрат относится только к логарифму. Ещё википедия говорит, что сортировка имеет O(nlogn) или O(nlog^2(n)) в лучшем случае (в зависимости от выбора шага) и до O(n^2) в худшем, https://en.wikipedia.org/wiki/Shellsort.
Можно только предполагать, что произойдет, потому что race condition - ub. Ответил ниже https://habr.com/ru/articles/787776/comments/#comment_26417306.
Я имел в виду синхронизацию с join, но ошибка раньше - ответил ниже https://habr.com/ru/articles/787776/comments/#comment_26417306.
upd: Спасибо @LeetCode_Monkey и @qw1 за то, что отметили ошибку в моем комментарии. Не обратил внимание, что в третьем примере гонка, а значит ub, возникает уже при вставке первого элемента в main. То есть недостаточно делать reserve и использовать индексы. Из головы вылетело простое правило, что std::vector не является потокобезопасным, поэтому изменение vector в нескольких потоках без синхронизации - ub.
В третьем примере vector следует полностью строить в main, т.к. функция в конечном итоге ждет завершения всех потоков.
С memory_order здесь нет ребусов. По умолчанию это
memory_order_seq_cst.
Пример кода https://godbolt.org/z/q7xj4x1zo,
Можно. threads[0] добавляется в main. Основной поток с main остановится на первом join(), пока не завершится threads[0], к завершению которого вектор будет построен.
pitch d... - pitch deck
В первом примере дважды допускается одна и та же ошибка - возврат ссылки на локальную переменную функции. Упрощенно https://godbolt.org/z/Ybcn3n1va. Сначала параметр v конструктора возвращаемого объекта ссылается на локальную переменную arg функции arg. Затем поле value ссылается на локальную переменную v конструктора named_arg.
В третьем примере можно было использовать vector::reserve(), чтобы гарантировать отсутствие реалокаций, и индексы вместо итераторов для корректного определения начала и конца вектора.
Такое легаси, https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rl-name-type
Движок 2d или 3d?
Маленькое окошко, в которое помещается только одна голова в регистратуре.
У меня вот так.
Есть два числа с таким свойством, это i и -i.
Значит, проблема была в моторе. Лучше так, чем плавающий баг по автобусу отлавливать.
В определении нейтрального элемента не хватает свойства перестановочности, если x - нейтральный, то x * a = a * x = a. Сейчас у нас элемент x является только правым нейтральным, https://ru.wikipedia.org/wiki/Нейтральный_элемент#Определение. Операция в полугруппе и моноиде не является коммутативной.