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

    По какому критерию Вы оптимизируете ? По количеству перестановок ?
    Потому как, если оптимизация не требуется, то просто за 52 перестановки Вы можете расставить карты на свои места всегда : либо устанавливая карту в первую позицию (доставая в инверсном), либо устанавливая карту в i-ую позицию (доставая в прямом).
    Ответ написан
  • Как рассчитать кол-во вариантов?

    Вы поставили совершенно верный тег - Комбинаторика. Этот раздел математики и начинался как метод подсчета количества различных вариантов/комбинаций.

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

    Давайте начнем со второй задачи - она несколько проще.

    2а) Первую цифру двузначного числа с заданными условиями можно выбрать 4 способами; после того как первая цифра определена, вторую можно выбрать снова 4 способами. Итого вариантов 4х4=16.
    2б) Первую цифру двузначного числа с заданными условиями можно выбрать 4 способами; после того как первая цифра определена, вторую можно выбрать уже только тремя способами, т.к. цифра не может совпасть с той которая на первой позиции. Итого вариантов 4х3=12.

    1а) Целых неотрицательных, которые могут сыграть роль "x", - 9 (от 0 до 8 включительно). После того как "x" зафиксирован, "y" может быть выбран (8-x+1) способами, например, если х=7, то остается для "y" только 0 и 1. После того как "х" и "y" зафиксированы, "z" всегда можно выбрать только 1 способом, следовательно, количество вариантов решений он не увеличивает. Осталось посчитать сумму кол-ва возможных комбинаций (считаем по "y"-кам) = (9+8+7+...+1) - по формуле суммы арифметической прогрессии - 10*9/2 = 45. И соответственно, Ваш ответ неверен.

    1б) Аналогично, но уменьшая кол-во "x"-ов до 6 (от 1 до 6 включительно), а кол-во "y" до (7-х) способов. Сумма (6+5+...+1) = 7*6/2 = 21.
    Ответ написан
    Комментировать
  • Какой алгоритм рассадки игроков по нескольким столам с условиеми в описании?

    Задача минимум - единоразовое решение проблемы.
    Идеально - возможность создавать все новые и новые рассадки для разного количества игроков и столов. Метод создания рассадок очень интересует, у меня нет идей как правильно решать эту задачу, если не рандомом формировать массив, проверяя подходит ли он под ограничения:)

    Ваши условия дают на конечный массив слишком много ограничений, поэтому при проверке уже готового рандомного массива он с вероятностью 99.999% не будет Вас устраивать. Поэтому либо массив должен заполняться постепенно с проверкой каждой новой ячейки на все уже возникшие при ее заполнения ограничения и возможным откатом назад (и весьма далеко), если все ветви далее по ходу заполнения окажутся тупиковыми. Либо как мне кажется неплохо должен сработать на этой задаче генетический алгоритм заполнения - Вы задаете случайную начальную рассадку и вычисляете суммарный штраф за все нарушения условий (при чем можете задать очень большие "заградительные" штрафы за абсолютно недопустимые условия), а затем оптимизируете изменяя построчно/по столбцам минимизируя штраф.
    Ответ написан
    1 комментарий
  • Как доказать равномерность хэш-функции?

    Проведите над массивами значений, полученных после хеширования случайных наборов входных данных, тесты на случайность (DieHard, FIPS 140-1 и аналогичные)
    Ответ написан
  • Как найти все комбинации символов?

    Я бы из такого задания решил, что сначала интересуют все перестановки внутри этой строки (выборка без возвращения) - их будет 6.
    А потом из получившихся 6 строк составить все возможные варианты квадратных матриц (выборка с возвращением) - соответственно их будет 6^3=216.

    Лексикографическая первая квадратная матрица будет [abc, abc, abc], потом [abc, abc, acb], [abc, abc, bac], ..., а заканчиваться это будет [cba, cba, cab], [cba, cba, cba].
    Ответ написан
    Комментировать