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

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Все ломается

    потому что при рекурсивном вызове функции rand() выдаёт разное значение и опорный элемент прыгает

    $elem = [$array[rand(0, count($array) - 1)]];
    Ответ написан
    1 комментарий
  • Какой алгоритм для вычисления оптимальной задержки для API и сообщения её ПО пользователя, чтобы не генерировать лишнюю нагрузку?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Почему не выставить задержку исходя из доступных мощностей сервера поделённых на кол-во работников на линии?
    Сперва измеряем верхнее значение, например максимальный RPS (запросов в секунду) который может держать сервер без сбоев. Предположим это 1000 rps. Далее устанавливаем предельное значение, например 80% от максимального готовы всегда держать под этот вид запросов. Итого имеем 800 rps. Исходя из этого расчитываем задержку для каждого пользователя. Делаем автоматический перерасчёт задержки каждую минуту или через любой подходящий интервал времени.

    Идея не такая уж бредовая, как может показаться. Например ВК в своей ленте новостей при высоких нагрузках могут выключать автоподгрузку, и включать кнопку "показать ещё" для того чтобы снизить rps.

    Единственный вариант когда это может не подойти, если у вас тарификация и оплата сервера по факту испольуземых ресурсов (iops'ы, cpu time и тд). В остальных случаях если есть сервер - пусть работает на максимум своих возможностей.
    Ответ написан
    Комментировать
  • Как поровну поделить элементы массива между другими массивами?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    В цикле из массива A извлекать случайную строку, и помещать её в целевой массив при этом удаляя её из A
    И так далее пока A не станет пустым. Если A стал пустым, то восстанавливаем его изначальное состояние (1500 строк) и продолжаем раскладывать случайные строки в целевые массивы.
    И так по кругу пока не заполним все целевые массивы.
    Ответ написан
    2 комментария
  • Как найти все ближайшие связки чисел из массива?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    1. отсортировать список по возрастанию, если он не отсортирован
    2. обходим список и смотрим разницу "текущий элемент минус предыдущий".
    3. если разница равна 1 то записываем "предыдущий элемент" в новый список со связками.

    не понятно почему для ряда 1 2 2 2 5 8 12 12 13 15 15 21 25 правильный вариант 1, 12, 15
    так как судя по условиям, чтобы было 15, должно быть 15, 16 в исходных данных.
    Ответ написан
    Комментировать