Ответы пользователя по тегу Математика
  • Почему при делении получается больше а при умножении меньше?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Возьмите 16 литров водки, разлейте в бутылки по 0.5 литра. Сколько поллитр получилось?
    2. Возьмите 16 поллитр. Сколько литров водки в них будет.
    Ответ написан
    3 комментария
  • Буква C в уравнениях, откуда она появилась?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для чайников:
    Если взять любые значения ci и подставить их в решение, то получится набор xi, являющийся решением системы.
    Например, 1.106 - (-8, 3+с, 6+2с, с)
    Берём произвольное значение с = 2.1, получаем (-8, 5.1, 10.2, 2.1)
    Ответ написан
    1 комментарий
  • Как увеличить высоту повернутого прямоугольника математически (быстрый алгоритм)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    MAD = ((x1 + x4)/2, (y1 + y4)/2)
    A' = MAD + (A - MAD) * scale
    B' = MAD + (B - MAD) * scale
    Ответ написан
    Комментировать
  • Как выбрать случайным образом победителя, учитывая его шанс на победу?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Это классический алгоритм. Визуально его можно представить так:
    - Каждая ставка представляется в виде отрезка с длиной, равной ставке.
    - Эти отрезки располагаются на прямой друг за другом без разрывов.
    - На полученный отрезок, равный по длине сумме всех ставок, равновероятно бросается точка.
    - Побеждает та ставка, на отрезок которой эта точка попала.
    Ответ написан
    1 комментарий
  • Есть бекэнд для ресторанов. Как работать с различными единицами измерения для ингредиентов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    ЕМНИП, для предприятий общепита существует такое понятие как "раскладка продуктов", и там всё выражается в одних единицах. Вывод - ещё на стадии заведения рецепта в базу приводить всё к одним единицам, возможно добавляя как примечание нестандартную единицу , то есть "соль - 10 г (1 ч.л.)". Правда всё равно останется проблема того, что "чайная ложка" у каждого своя, кто-то берёт с верхом, кто-то меньше, чем полная и т.д.
    Ответ написан
    Комментировать
  • Как решаются задачи на вероятность?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Конкретно для этой задачи алгоритм простой. На каждом шаге:
    Выигрыш (выход из леса) - одна дорога из трёх:
    W = 1/3
    Проигрыш (разбойники)- две дороги из трёх * вероятность встретить разбойников:
    L = 2p/3
    Остался в игре - две дороги из трёх * вероятность не встретить разбойников:
    G = 2(1-p)/3
    Соответственно, для i-го шага:
    Wi = 1/3*G(i-1)
    Li = 2p/3*G(i-1)
    Соотношение
    Wi/Li = (1/3)/(2p/3) = 1/(2p)
    не зависит от i, а значит для
    SUMi=1..N(Wi)/SUMi=0..N(Li) = 1/(2p)
    для любого N
    Таким образом, общая вероятность выигрыша
    PW = W/(W+L) = 1/(1+2p)

    Ну а читать - теорию вероятности и комбинаторику.
    Ответ написан
    Комментировать
  • Как найти количество вариантов получения числа из последовательности чисел?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Напрашивается сортировка по возрастанию, затем рекурсивный перебор с отсечением по критерию.
    2 | 9 | 3 | 6 | 3 | 8 | 1 | 10 | 6 | 7
    Сортируем
    1 | 2 | 3 | 3 | 6 | 6 | 7 | 8 | 9 | 10

    функция перебор(numbers, result, summ) {
        пока numbers не пуст {
            current = numbers[0]; // первое число
            numbers = numbers[1..]; // остаток массива
            если summ+current > 8 
                вывести result, current;
            иначе
                перебор(numbers, [result | current], summ+current);
        }
    }
    перебор([1 | 2 | 3 | 3 | 6 | 6 | 7 | 8 | 9 | 10], [], 0);
    Ответ написан
  • Взлом шифра Вернама(одноразовый блокнот). Как сделать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Правильно закодированное шифром Вернама (длина гаммы не меньше длины сообщения; гамма получена случайным, а не псевдослучайным образом; гамма используется только один раз) сообщение не декодируется в принципе, доказано математически. Этот шифр считается самым безопасным в криптографии.
    Подумайте сами, из одного исходного сообщения "АААААААААААААААА" применением разных гамм можно получить и "Добро пожаловать!" и "Вход воспрещён!!!".
    Ответ написан
    3 комментария
  • Как найти равноудалённые точки на кривой Безье, или эллипсе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А что значит "равноудалённо"? Равное декартово расстояние между точками или равная длина дуги кривой?
    Для эллипса задача аналитически не решается, поскольку решение содержит эллиптический интеграл, не берущийся в общем виде.
    Можно преобразовать эллипс в набор точек по Брезенхему, сохраняя кроме координат расстояние до предыдущей точки (сдвиг только по X или Y даёт 1, одновременный сдвиг даёт sqrt(2)) и просуммировать расстояния, получив длину приближённой линии. Затем делим эту длину на нужное количество частей, получая шаг по дуге и от стартовой точки суммируем расстояния до получения нужного шага.
    Ответ написан
    1 комментарий
  • Как определить кривизну линии?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Пусть (x0, y0) и (x1, y1) крайние точки отрезка. Тогда коэффициенты общего уравнения прямой
    Аx+By+C = 0
    можно определить как
    A = y1-y0; B = x0-x1; C = x1y0-x0y1
    Расстояние от точки (x, y) до прямой
    L = |Ax+By+C|/sqtr(A2+B2)
    Дальше остаётся определить метрику отклонения, например среднее расстояние от промежуточных точек до отрезка, делённое на длину отрезка
    Ответ написан
    Комментировать
  • Какого максимального размера должны быть квадраты, чтобы ровно впихнуть их в прямоугольник c известными сторонами?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если не нужно полное покрытие прямоугольника, то общий алгоритм такой:
    1. Считаем максимальную сторону квадрата = int(sqrt(высота_прямоугольника*ширина_прямоугольника/количество_квадратов)) = 219
    2. Берём ширину и высоту, делим нацело на все числа от 1 до количества квадратов. Из полученного списка удаляем все числа, большие максимальной стороны квадрата, удаляем дубликаты и сортируем по убыванию.
    (192, 166, 160, 137, 125, 120, 106, 100, 96, 83, 71, 62, 55, 50)
    3. Для полученных размеров считаем количество квадратов, умещающихся в прямоугольник = int(высота_прямоугольника/размер_квадрата)*int(ширина_прямоугольника/размер_квадрата). Как только получаем число большее необходимого количества квадратов - останавливаемся.
    n(192) = 10
    Итого - сетка 5х2 со стороной квадрата 192 пиксела. По вертикали остаются 116 свободных пикселов.
    Ответ написан
    1 комментарий
  • Как написать алгоритм для для поиска кратчайшего расстояния?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Тогда придётся повторно пересматривать вершины если для них нашёлся более короткий путь.
    Пример:
    .  A  B  C
    A  -  4  1
    B  4  -  1
    C  1  1  -

    Начальная точка A (A = 0). Строим пути из A (B = 4, C = 1), добавляем их в очередь. Строим пути из B (С = 1). Строим пути из C (B = 2). И снова надо перестраивать пути из B, поскольку до него нашёлся более короткий путь.
    Поэтому у Дейкстры и используется сортированная очередь, тогда не возникает необходимости в повторном просмотре точек.
    Ответ написан
  • Найти количество чисел заданного порядка, модуль разницы соседних цифр которых не больше 1

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У вас уже неправильно, для двузначных будет (10, 11, 12, 21, 22, 23, 32, 33, 34...).
    Модуль разницы:
    myglbyq.png
    Верхнюю оценку получить легко, 10*3(n-1), а вот точное число посчитать по формуле скорее всего не получится, 0 и 9 портят всю картину.
    Ответ написан
  • Как осуществить поиск функции по известным значениям?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Если заранее неизвестен хотя бы общий вид функции, то, по моему, проще дизассемблировать программу и разобраться в вычислениях, чем пытаться определить взаимозависимости между 50 параметрами. Например, для такой функции двух переменных
    oohphsl.png
    зависимость от y сильно проявляется только в малой области значений x в районе x=b. А ведь функция может быть и кусочно-непрерывной, например
    lf3t5yz.png
    Ответ написан
  • Как осуществить поиск функции по известным значениям?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    По известному набору точек можно лишь предположить вид функции, например набор (-1, 0), (0, 0), (1, 0) может принадлежать как прямой y=0, так и синусоиде y=sin(πx) или полиному y=x3-x. Обычно вид функции выбирается из физической модели процесса, для которого получены данные.
    Ответ написан
    Комментировать
  • Почему цикл for не уменьшает значение в префиксной форме?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    for(int i = f; i > 0; --i)обычно раскрывается компилятором в
    {
        int i = f;
        goto loop_cond;
    loop:
        // тело цикла
        --i;
    loop_cond:
        if (!(i > 0)) goto loop;
    }
    Ответ написан
    Комментировать
  • Доверительный интервал

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    С лотереей, если её правила за это время не менялись, оценка 2/(365*3) будет достаточно точной.
    С листовками всё гораздо сложнее - надо оценивать репрезентативность выборки, то есть насколько точно 50 человек, получивших листовки, соответствуют той аудитории, среди которой будут розданы все листовки и целевой аудитории, на которую они расчитаны.
    Ответ написан
    Комментировать
  • Компьютерная неточность JS

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Math.round(299*8655/10)/100
    Ответ написан
    Комментировать
  • Сколько существует различных уникальных подпоследовательностей из последовательности цифр длиной N?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На C++
    #include <iostream>
    #include <vector>
    #include <set>
    #include <time>
    
    std::set<std::string> subSeqs;
    struct _element {
        char digit;
        int  count;
    };
    std::vector<_element> elemSeq;
    
    void recurse(std::vector<_element>::iterator elemRest, std::string subSeqHead) {
      bool fin = (elemRest+1 == elemSeq.end());
        for (int i = 0; i <= elemRest->count; i++, subSeqHead += elemRest->digit)
            if (fin)
                subSeqs.insert(subSeqHead);
            else
                recurse(elemRest+1, subSeqHead);
    }
    
    void main(void)
    {
      int i;
      _element element;
      std::string initialSeq = "1234567890123";
    
        std::cout << "Initial sequence: " << initialSeq << "\n";
    
        clock_t start = clock();
    
        element.digit = initialSeq[0];
        element.count = 1;
        for (i = 1; i < initialSeq.length(); i++) {
            if (element.digit == initialSeq[i])
                element.count++;
            else {
                elemSeq.push_back(element);
                element.digit = initialSeq[i];
                element.count = 1;
            }
        }
        elemSeq.push_back(element);
    
        recurse(elemSeq.begin(), "");
    
        clock_t finish = clock();
    
        i = 0;
        std::cout << "Elements: (";
        for (std::vector<_element>::iterator t = elemSeq.begin();
                                                    t != elemSeq.end(); t++) {
            if (i++ != 0)
                std::cout << ", ";
            std::cout << "{'" << t->digit << "', " << t->count << "}";
        }
        std::cout << ")\n";
        std::cout << subSeqs.size()-1 << " unique subsequences\n";
        std::cout << "Calculation time " << finish-start << " clicks, ";
        std::cout << ((float)(finish-start))/CLOCKS_PER_SEC << " sec\n";
    /*     for (std::set<std::string>::iterator t = subSeqs.begin();
                                                    t != subSeqs.end(); t++) {
            std::cout << *t << "\n";
        } */
    }

    Результаты:
    Initial sequence: 8246
    Elements: ({'8', 1}, {'2', 1}, {'4', 1}, {'6', 1})
    15 unique subsequences
    Calculation time 0 clicks, 0 sec
    ================================================================
    Initial sequence: 88885
    Elements: ({'8', 4}, {'5', 1})
    9 unique subsequences
    Calculation time 0 clicks, 0 sec
    ================================================================
    Initial sequence: 12345678901234567890
    Elements: ({'1', 1}, {'2', 1}, {'3', 1}, {'4', 1}, {'5', 1}, {'6', 1}, {'7', 1},
     {'8', 1}, {'9', 1}, {'0', 1}, {'1', 1}, {'2', 1}, {'3', 1}, {'4', 1}, {'5', 1},
     {'6', 1}, {'7', 1}, {'8', 1}, {'9', 1}, {'0', 1})
    1043455 unique subsequences
    Calculation time 4383 clicks, 4.383 sec
    ================================================================
    Initial sequence: 11223344556677889900
    Elements: ({'1', 2}, {'2', 2}, {'3', 2}, {'4', 2}, {'5', 2}, {'6', 2}, {'7', 2},
     {'8', 2}, {'9', 2}, {'0', 2})
    59048 unique subsequences
    Calculation time 187 clicks, 0.187 sec
    Ответ написан
    3 комментария
  • Сколько существует различных уникальных подпоследовательностей из последовательности цифр длиной N?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Несколько сократить количество вариантов при переборе можно сгруппировав подряд идущие одинаковые цифры. Скажем для (1 1 1 2 1 1) получим исходный набор ((1, 3), (2, 1), (1, 2)). После этого рекурсивно его перебираем.
    функция рекурсия(набор, результат) {
        если набор пуст {
            если результат уникален { 
                добавить результат в список уникальных
            }
        }
        ((цифра, количество), следующий_набор) = набор;
        для i от 0 до количество {
            рекурсия(следующий_набор, результат+(цифра i раз));
        }
    }
    рекурсия(исходный_набор, '');

    Первый шаг рекурсии даст варианты '', '1', '11' или '111'. Второй шаг к каждому из них допишет '' или '2'. Третий шаг к каждому из 8 получившихся вариантов допишет '', '1' или '11'. То есть вместо 26 = 64 вариантов для поиска уникальности получим 4*2*3 = 24.
    Чем больше будет в исходной последовательности групп подряд идущих одинаковых цифр тем больше будет выигрыш. Если таких групп нет, то упрёмся в полный перебор.
    Ответ написан
    1 комментарий