Ответы пользователя по тегу Алгоритмы
  • Как уменьшать числовую последовательность, чтобы каждое последующее число было меньше предыдущего?

    @CBET_TbMbI
    нужно максимально равномерно распределить эти 100 рублей, в том случае как Вы предлагаете, получается что 99 человек получит меньше рубля, а 1 человек получит больше 49 руб.

    С этим доп условием считай так (на примере нечётного числа):
    1. Среднему номеру даёшь среднее количество денег (обозначу С). В данном случае С=1 руб (100 руб / 100 чел).
    2. Назначаешь сколь угодно мелкий шаг (Ш) и соседям в ряду даешь С+Ш и С-Ш. Соседям соседей С+2Ш и С-2Ш. И т.д.

    Если число людей чётно, то на первом этапе назначай премию двум средним в размере С+0,5Ш и С-0,5Ш и далее соседям С+1,5Ш и С-1,5Ш.

    Если математика нужна дискретная, то округляй С вниз, и, играя с величиной Ш решай, что важнее, минимальная разница в премиях у соседей или минимальный остаток в рублях и бригадира.
    Если после раздачи деньги остались, то остатком или принебреч, или первому (опять же, смотря что важнее).
    Ответ написан
    Комментировать
  • Проверка редких кейсов в логике игр?

    @CBET_TbMbI
    > Во всей игре есть лишь одно место, где нельзя ставить провода - храм джунглей.

    А чем это отличается от любой другой логики, описываемой словом "только"?
    - яйцо дракона можно получить только с дракона
    - мифическую руду можно получить только копая в мифической пещере
    - костёр можно развести везде кроме водоёмов
    Ответ написан
    Комментировать
  • Как реализовать систему перемотки времени назад, как в принц персии например?

    @CBET_TbMbI
    Вести лог всех объектов на сцене (спавн, уничтожение, изменение координат и других свойств объекта и время этих манипуляций) и когда это нужно, воспроизводить всё в обратном порядке по времени

    А как без этого? Вам нужно прошлое, значит нужна информация об этом прошлом. Значит её надо записывать и хранить. Вопрос лишь в деталях: как часто делать записи, как долго хранить, что именно туда включать и что можно упустить, хранить логи отдельных сущностей или переодически делать "снимки" всего окружения игрока и т.д. Это уже вам решать. Плюс надо подумать, нужна ли обратная анимация всех процессов, или достаточно будет просмотра стоп-кадров.
    Ответ написан
    Комментировать
  • Как получить все возможные комбинации?

    @CBET_TbMbI
    Самый простой для понимания способ - цикл в цикле. Внешним циклом меняйте один символы по порядку на Z. Во вложенном перебирайте замены оставшихся букв хоть на Z, хоть на Y.
    Ответ написан
    Комментировать
  • Алгоритмы для поправки на эффект Доплера?

    @CBET_TbMbI
    Чисто теоретически, задача должна решаться.
    Тут есть 3 "переменные"
    1. Начальные параметры волны.
    2. Наблюдаемые параметры волны.
    3. Скорость движения друг относительно друга.
    Зная 2 из них можно найти третье.
    Другое дело, что надо отлично знать физику и математику явления, чтобы это всё пересчитывать друг в друга.
    И первична тут физика. Если готовых алгоритмов не отыщется, надо копать физические формулы.

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

    @CBET_TbMbI
    Не совсем понятен принцип свитков. Каждый свиток одноразовый даже если использован на на всю силу? Буду исходить из этого.
    Думал бы я примерно так (полный перебор):
    1. Рассматривать только имеющиеся в инвентаре свитки. Нет смысла перебирать все возможные варианты.
    2. Определить возможное сокращение каждого пути с каждым из свитков. Получится несколько цифр (по количеству типов свитков) для каждого из путей. Это сама по себе не простая задача, т.к. для каждого пути и каждого свитка придётся перебирать варианты, выбирая оптимум для пары путь-свиток.
    3 (опционально). Если в следующих пунктах будут проблемы с быстротой счёта, то нужно отобрать только те сокращённые пути, которые максимально отличаются от исходных по длине.
    4. Составить все возможные графы из комбинаций путей/сокращённых путей. Их может быть очень много. Сократить тут особо не вижу как - как не крути, нужен перебор всех вариантов (можно с учётом пункта 3 для упрощения, но это риск пропустить оптимум, особенно если есть много слабых свитков). Тут надо не забывать, что свитков ограниченное количество - не имеет смысла рассматривать графы с таким количеством сокращённых путей, на которые не хватит свитков. Кстати, если типов свитков будет меньше, то будет проще.
    5. Для каждого из полученных графов решить свою задачу коммивояжёра и выбрать лучший вариант из них.
    Примечание: этот вариант не рассматривает использование нескольких свитков на одном пути. Если это надо, то придётся включить во все пункты дополнительное усложнение.

    Можно придумать краткий перебор, но он может пропустить оптимум. Зато расчётов намного меньше.
    Заочно начать назначать свитки, начиная с самого мощного.
    1 (как и в полном переборе). Определить возможное сокращение каждого пути с каждым из свитков. Получится несколько цифр для каждого из путей.
    2. Самый мощный заочно отдаётся пути, в котором возможно максимальное сокращение пути.
    3. Второй свиток так же отдаётся самому большому сокращению (включая уже сокращённый).
    4. И так далее пока все свитки или пути не кончатся.
    5. В итоге останется только один граф из путей и сокращённых путей, которые будет или оптимальным или не очень далёким от него. Для него и решаем задачу коммивояжёра.
    Примечание: из плюсов то, что в него автоматом встраивается вариант с несколькими свитками за 1 путь.

    П.С. Надо ещё понять, насколько нужно оптимальное решение.
    Если оно для ИИ-противников, то не будет ли с такими безошибочными ИИ слишком сложно играть?
    А для игрока и вовсе интересней ставить задачи, в которых он на основе своего личного скила может оптимизировать пути. Идеальный автопилот может только убить интерес к игре. Разве что такой автопилот будет редким бонусом.
    Ответ написан