Pull to refresh
4
0
Nikolai Panov @code_panik

User

Send message

всегда есть более органичные способы монетизации

Что такое органичные? Например?

Код выглядит так из-за санитайзера. Компилятор с включенной опцией -fsanitize=undefined добавляет в исходный код нужные ему проверки. По теме есть лекция от разработчика asan https://www.lektorium.tv/lecture/23702

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

то сложность по выполнению у них одинаковая O(n)

У вас операции в map за логарифм, поэтому O(nlogn).

Хабр упорно не давал отправить личное сообщение, поэтому пишу сюда возможные неточности:

Например, мы хотим первой картой получить десятку треф, вероятность этого события в случайно собранной колоде будет 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 тут даже интереснее.

Можно только предполагать, что произойдет, потому что 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,

#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(), чтобы гарантировать отсутствие реалокаций, и индексы вместо итераторов для корректного определения начала и конца вектора.

я не соблюдаю префиксы в именах переменных указывающих на их тип.

Такое легаси, https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rl-name-type

Движок 2d или 3d?

"Расскажите, как вы бы пояснили своей бабушке, что такое мьютекс?"

Маленькое окошко, в которое помещается только одна голова в регистратуре.

что значит, прощай Jira, Confluence, Bitbucket?

У меня вот так.

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.

i это некоторое число вне класса действительных чисел, обладающее следующим свойством i * i = -1

Есть два числа с таким свойством, это i и -i.

Значит, проблема была в моторе. Лучше так, чем плавающий баг по автобусу отлавливать.

В определении нейтрального элемента не хватает свойства перестановочности, если x - нейтральный, то x * a = a * x = a. Сейчас у нас элемент x является только правым нейтральным, https://ru.wikipedia.org/wiki/Нейтральный_элемент#Определение. Операция в полугруппе и моноиде не является коммутативной.

Information

Rating
Does not participate
Registered
Activity