Задать вопрос
  • Что не так с кодом для решения по математической игре Баше?

    wataru
    @wataru Куратор тега Математика
    cocejah173, Почти. Опишите же словами стратегию. Что надо делать, чтобы выиграть, если текущее количество не делится на K+1?
  • По какой формуле вычислить минимальное количество раз для установки шага диапазона для вычисления?

    wataru
    @wataru Куратор тега Алгоритмы
    Torento20345, Производная функции f(x) - пересекает 0 только в одной точке. До этого она отрицательная, а потом положительная. Значит f(x) - имеет один минимум. Если мы ограничены условием, что x - целое, то минимум - одна из ближайших к оптимальному x значений.

    Или 22, или 23 в вашем примере. Нужно подсчитать сколько ходов там будет в итоге и выбрать минимум из двух вариантов.

    При x=22, n = 500 будет. floor(n/x) + x = floor(500/22) + 22 = 22 + 22 = 44

    При x=23, n = 500 будет. floor(n/x) + x = floor(500/23) + 23 = 21 + 23 = 44

    Тут без разницы, сколько брать 22 или 23. Всегда ли это так - мне лень думать. Преберите 2 варинта в вашей программе и найдите лучший.
  • Что не так с кодом для решения по математической игре Баше?

    wataru
    @wataru Куратор тега Математика
    Отформатируйте код в теге code (кнопка </> над редактором. Выберите c++ из списка. Расставьте отступы нормально.
  • Самая быстрая реализация алгоритма Дейкстры на javascript?

    wataru
    @wataru Куратор тега Алгоритмы
    Magneto903,

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

    wataru
    @wataru
    WebDev, даже код на php иногда можно ускорить в сотни раз, если использовать правильный алгоритм и структуры данных. Это с запасом покроет медленность этого решения на пхп против быстроты тупого решения на встроенных функциях.

    Да, такой же код на си будет в несколько раз быстрее, но если у вас нет возможности переписать все или только сложную часть на си, то придется довольствоваться этим.
  • Как реализовать триангуляцию?

    wataru
    @wataru Куратор тега Алгоритмы
    mIka01, вот, это и впишите в вопрос. Если вам не нужны особые свойства делоне, то задача решается сильно проще.
  • Как реализовать триангуляцию?

    wataru
    @wataru Куратор тега Алгоритмы
    mIka01, Напишите все-таки, что за триангуляцию вам надо. Пока под условие подходит вернуть пустой массив, или {{1,2,3},{4,5,6},...}. Тоже триангуляции.

    Вам точно триангуляция Делоне нужна или вам просто разбить на тругольники без пересечений, чтобы все точки были состояли в треугольниках?
  • Как реализовать триангуляцию?

    wataru
    @wataru Куратор тега Алгоритмы
    mIka01, Делоне! Блин, по вопросу вообще непонятно, что вы там триангулируете. Какой-то list. Поправьте вопрос - шанс ответа значительно возрастет.
  • Почему не работают хеши?

    wataru
    @wataru Куратор тега C++
    jcmvbkbc, Хорошо, был не прав. Мой комментарий должен был быть:
    Если же тупо заменить все переменные на unsigned int - то там будет вычисление по не тому модулю (2^32)
  • Почему не работают хеши?

    wataru
    @wataru Куратор тега C++
    jcmvbkbc, Просто повторение фраз из стандарта, без какой-либо попытки их осмыслить, обычно плохо кончаются (второй пример там).

    Стандарт лишь говорит, что нет никакого UB, и вычисления производятся по модулю 2^n. В русском языке термина для "underflow" особо нет, поэтому я использовал слово "переполнение".

    Если проблема "чтобы не было отрицательных значений" - то предлагать unsigned - это весьма необдуманное решение.
  • Почему не работают хеши?

    wataru
    @wataru Куратор тега C++
    jcmvbkbc, Ну по коду очевидно же, что тут попытка написать полиномиальный хеш.

    > у беззнаковой арифметики нет переполнения.

    И чему будет равно 1 - 2 в unsigned int?
  • Почему не работают хеши?

    wataru
    @wataru Куратор тега C++
    jcmvbkbc, Проблема ТС в том, что x%m при отрицательном m выдаст неверное, отрицательное число. Да, с тем же остатком, но в вычислениях нужно число от 0 до m-1. Правильное решение этой проблемы - прибавить m, если число отрицательно, или всегда прибавлять m и брать по модулю опять. ТС же, наобум вставил модуль. Если же тупо заменить все переменные на unsigned int, то там будет переполнение и, фактически, прибавление 2^32 к ответу. Что тоже испортит ответ, если только m - не степень двойки.
  • Почему не работают хеши?

    wataru
    @wataru Куратор тега C++
    jcmvbkbc, Если пользоваться беззнаковой арифметикой, то как считать (a-b) % m?

    Если же сделать номальную формулу, то она будет работать и при знаковых числах: (a+m-b%m)%m.
  • Почему не работают хеши?

    wataru
    @wataru Куратор тега C++
    fronttrty, Давайте сначала. Запишите формулу хеша на отрезке l..r. Запишите формулу для каждого prefhash и powp. Запишите как ваш getshash считает, приравняйте, посмотрите, то ли у вас получилось.
  • Почему не работают хеши?

    wataru
    @wataru Куратор тега C++
    fronttrty, Зачем там abs?
  • Какой алгоритм для вычисления оптимальной задержки для API и сообщения её ПО пользователя, чтобы не генерировать лишнюю нагрузку?

    wataru
    @wataru Куратор тега Алгоритмы
    Mark, Можно эту же логику сделать на сервере. Или для каждого клиента считайте, сколько раз он уже посылал запрос и был послан, или считайте, сколько было отказов всем клиентам в какое-то окно времени.

    При посыле клиента подождать реализуйте экспоненциальный откат - генерите случайное число ожидания в промежутке, зависящим от счетчика отказов (для данного клиента или в целом по серверу).
  • Какой алгоритм для вычисления оптимальной задержки для API и сообщения её ПО пользователя, чтобы не генерировать лишнюю нагрузку?

    wataru
    @wataru Куратор тега Алгоритмы
    Mark, Сервер, если не может обработать запрос сразу отвечает клиенту "я занят". Клиент, если получает от сервера это, или таймаут или ошибку запроса - откатывается.
  • Как построить симуляцию луча?

    wataru
    @wataru
    rusyska55011, Не понял ваш коммент.

    Смотрите на картинку. Тут черными ограничены достижимые комнаты, а серым показана траетория луча из примера в задаче. Посчитайте сами - ровно 11 пересечений.

    spoiler

    602e2fbc0b989709294142.png


    Эта задача вообще не на геометрию - а на теорию чисел. Надо подсчитать сколько на этой треугольной решетке точек, обладающих определенными свойствами. Тут нужны делимость и взимопростота.

    Если же вам интересно как смулировать луч с отражениями, то вам нужна базовая аналитическая геометрия и линейная алгебра. Нужно уметь задавать луч и отрезки параметрически, нужно знать вектора, смену системы координат, сколярное и векторное произведения.

    Задайте ваш луч как p(t)=b+v*t, где b - начальная точка. v - вектор направления луча, t - параметр от 0 до бесконечности. Фактически, это 2 уравнения для X и Y: x(t)=..., y(t)=... Подставляете любое значение t, получаете точку на луче.

    Изначально b - нижний угол комнаты. Потом вам надо найти, где этот луч пересечется с границей комнаты. Для этого пересеките его со всеми отрезками и найдите то пересечение, которое дает минимальное t. Задайте отрезки также параметрически (но там параметр q будет от 0 до 1). Приравняйте координаты x(t)=x(q), y(t)=y(q), решите систему 2 линейных уравнений относительно t и q. Проверьте, что значения параметров в нужных пределах.

    Потом эта точка пересечения будет новым началом луча. Для отражения вектора v представьте, что мы поменяли систему координат на ту, где зеркало горизонально. Тогда отражение - просто поменять знак у координаты Y вектора v. Можно не вводить систему координат, а просто проецировать вектор v на сторону и ее нормаль через скалярное произведения и потом собрать вектор обратно сложив проекции.

    Если s - вектор вдоль зеркала, n - нормаль к нему, то отраженный вектор v'=s*(v^s)/|s|-n*(v^n)/|n|. Тут "^" - это скалярное произведение. Еще вам надо будет понимать, если луч проходит через угол. Пусть этот угол - точка c. Тогда луч b+v*t проходит через нее, если (c-b)^v >=0, (c-b)*v = 0. Скалярное произведение вектора на угол и вектора луча - должно быть неотрицательно (значит вектора смотрят примерно в одну сторону). Векторное произведение должно быть 0 (значит вектора коллиниарны).
  • Какое максимальное количество операций в бинарном поиске?

    wataru
    @wataru Куратор тега Алгоритмы
    Василий Банников, это если вы точно знаете, что число в массиве есть. Тогда ceil(log n). Если же возможен ответ - не нашлось - то надо + 1 под логарифмом.