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

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    https://gephi.org
    Plugin: https://marketplace.gephi.org/plugin/dag-layout/

    Список софта и сервисов визуализации: тут

    Плагин, просто чтобы пиариться: "Я занимаюсь таким!" ))))
    pic.jpg?022bbc
    Ответ написан
    Комментировать
  • Как научиться делать сортировки любой сложности в JavaScript?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Комментировать
  • Как правильно генерировать псевдослучайные числа?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Мда....
    То ли лыжи не едут, то ли я......
    Читаем:
    Поэтому как правильно генерировать каким-либо алгоритмом псевдослучайные числа ?

    Ну смотрите, мне нужно генерировать случайное число своим алгоритмом. А по данной формуле у меня есть какая-то последовательность, поэтому мне нужно решение без каких либо последовательностей

    Это два противоположных понятия.
    Псевдослучайные - подчиняются закону (формуле генерации).
    Случайные - соответственно, нет.

    Поэтому, если нужны, всё-таки, случайные и чтобы никто не догадался, тогда используем динамические параметры внешней среды (для конкретного случая - параметры от ОС): температура с датчиков, объем свободного/занятого места на диске, объём занятой/свободной памяти, кол-во и идентификаторы процессов и т.д.

    Критерий выбора параметра: быстро и непредсказуемо изменяющееся значение во времени и не зависящее от алгоритма в коде генератора, недоступное из вне.

    Хешируем параметры с timestamp любым алгоритмом и берём каую-то часть из полученного хеша.
    ВАЖНО! Параметры для хэширования не должны быть доступны публично: никаких внешних запросов с ИНН, ОГРН и GISMETEO! )

    Самый простой вариант: 68747470733a2f2f6661726d382e737461746963 Взяли картинку и сделали любые преобразования с ней, затем сохранили в поток данных, взяли любой бит или несколько. Картинку генерируем на основе внешних факторов и никогда не помещаем в исходник алгоритма.
    Ответ написан
    Комментировать
  • C помощью какого алгоритма можно равномерно распределить набор частиц вокруг заданной точки?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Для создания диаграмм: тут
    img_551d334dc6083.pngДля заполнения пространства без пустот:
    Сумма всех углов фигур в точке соединения должна составлять 360 градусов и при этом отсутствовать пересечения и пустоты.
    А дальше - перебор.

    Например, для 4-х квадратов: это поле 2x2, где центр заданной точки (вокруг которой располагаем объекты) расположен точно в точке касания углов всех этих 4-х квадратов (ровно по центру), т.к. углы по 90 градусов: 4*90=360
    Ответ написан
    Комментировать
  • Есть ли алгоритм определения оптимального размера посылки?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Попарно убираем товары с одной площадью в основании (так, чтобы одна из сторон была равна или меньше, но минимум разницы) и дающие в сумме нужную высоту блока размещения. Начинаем без пары с самого габаритного.
    Как будет готово - размещаем площади оснований на заданной плоскости тем же методом.
    Блоки размещения - можно также комбинировать той же схемой алгоритма, начиная с самого габаритного.
    Товары и блоки размещения - можно крутить во все стороны.
    UPD:
    Изначально - нужно определиться с размерами одной из сторон посылки: пропорции размеров или чётко заданные размеры, чтобы можно было определить оптимальный размер начального блока размещения.
    Или должны быть заранее известны условия компактности:
    1. минимально занимаемый объём пространства без ограничений на любой из размеров
    2. минимальное удаление углов параллелепипеда от центра фигуры, т.е. идеальный вариант - куб.
    Ответ написан
  • Как подсчитать комбинацию шагов коня на матрице 4 на 3?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Непральный подход.
    Нужно создать верный словарь и далее - перебрать все сочетания по словарю.
    Ответ написан
  • Подсчет уникальных значений с минимальной погрешностью?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Есть файлы
    Нужно просто из них создать базу и проиндексировать все необходимые поля.
    Раз уж заговорили про собственную базу: бинарный кортеж и затем, бинарное неполносвязное "дерево" из них.
    Это позволит искать начиная с любых входных данных сразу весь список объектов.
    Ответ написан
    2 комментария
  • Какая еще бывает логика, не считая ТТЛ?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    квантовая
    Ответ написан
    Комментировать
  • Каким требованиям должна отвечать форма восстановления доступа к своему аккаунту?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. поле: почта или логин
    2. капча
    3. кнопка отправки
    на сервере:
    1. проверка периодичности отправки по IP, по юзеру/почте,
    2. если верно - приходит письмо со ссылкой, содержащей хэш, для последующей смены пароля после перехода по ней. И никаких логинов и паролей в письме!
    3. после перехода - проверяется сессия: если запрос пароля из этой сессии - СРАЗУ выполняется автоматический вход в систему с надписью, что "доступ восстановлен" и две кнопки (или линка): "перейти в ЛК" и "На главную", если сессия новая - предлагается ввести логин или почту (в зависимости от того, что было введено при запросе процедуры смены пароля изначально).
    Ответ написан
  • Как найти (подобрать) максимально близкий ключ массива?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Вначале нужно поместить искомое значение в массив ДО СОРТИРОВКИ! и затем отсортировать массив по цене (например, через половинное деление). Возможно, что он у Вас уже сортируется и нужно лишь пометить помещаемое значение отрицательным ID-шником товара.
    2. Затем найти через абсолютную разницу нужного соседа выше (перед) или ниже (за ним)

    Перебирать целиком ВЕСЬ массив - НЕ НУЖНО!
    Ответ написан
    1 комментарий
  • Кто-нибудь знает генератор фраз с возможностью задания алгоритма генерации?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Берётся либа или словарь определения и изменения форм слова и прогоняется:
    [часть речи, падеж, число] -> [часть речи, падеж, число] -> [часть речи, падеж, число]
    Морф. анализаторы/программы: здесь
    Ответ написан
    4 комментария
  • Как отсортировать в порядке убывания?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Для вашей задачи единственный нормальный вариант - это Proxmap-сортировка: https://en.wikipedia.org/wiki/Proxmap_sort
    (Табличка алгоритмов - внизу страницы!)
    Ответ написан
    Комментировать
  • Как найти подряд три идущих единицы с использованием битовой логики?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    ee7d95d214184285aa28c2d0f1c98cf7.jpg
    Мой велосипед на PHP (с алгоритмом оптимизированного поиска):
    <?php
    error_reporting	(E_ALL); // включаем лог ошибок
    
    function array_flatten($array) {
       $return = array();
       foreach ($array as $key => $value) {
           if (is_array($value)){ $return = array_merge($return, array_flatten($value));}
           else {$return[$key] = $value;}
       }
       return $return;
    }
    
    function rotate90($array) {
      array_unshift($array, null);
      $array = call_user_func_array('array_map', $array);
      $array = array_map('array_reverse', $array);
      return $array;
    }
    
    $Map = [
      [0, 1, 1, 1, 0, 0, 1, 1],
      [0, 0, 0, 1, 0, 1, 0, 0],
      [1, 0, 1, 0, 0, 0, 0, 1],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 1, 0, 0, 0, 0, 0, 0],
      [0, 0, 1, 0, 0, 0, 0, 1],
      [0, 1, 0, 0, 1, 0, 0, 0],
      [0, 0, 1, 0, 0, 0, 1, 1]
    ];
    
    $Map90 = array_flatten(rotate90($Map));
    $Map = array_flatten($Map);
    
    $s='';
    $s90='';
    foreach ($Map as $k=>$i) {
      $s.=$i;
      $s90.=$Map90[$k];
    }
    
    echo $s.'<br>';
    echo $s90.'<br>';
    
     //убрать переносы на след.строку
    $i=0;
    do {
       $n=strpos($s,'111',$i++);
       if ($n) {
          if($n%8>5) $i=8*(1+floor($n/8));
          else break; //найдено! :)
       } else break; //не найдено :(
    } while (-1);
    
     //убрать переносы на след.строку
    $i=0;
    do {
       $n90=strpos($s90,'111',$i++);
       if ($n90) {
             if($n90%8>5) $i=8*(1+floor($n90/8));
            else break; //найдено! :)
       } else break; //не найдено :(
    } while (-1);
    
    if ($n90!==false) {
       $n90=(8-$n90%8-3)*8+floor($n90/8); //конвертим в верный индекс
       if(!$n||$n&&$n90<$n) $n=$n90; //берём минимальный ближайший к началу.
    }
    
    //OUT
    if ($n!==false) {
     echo "Позиция в массиве (начиная с 0): ".$n.'<br>'; //позиция первого элемента совпадения в "плоском" массиве.
     echo "Координаты по X*Y в двумерном массиве: ".($n%8).'x'.floor($n/8); //COLxROW
    } else echo "не найдено!";
    ?>
    Ответ написан
  • Алгоритм поиска последовательности выпадения числа. Возможно ли такое реализовать?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    При таких задачах нужно в первую очередь смотреть на периоды функции.
    Если период или кратность найдена не будет - значит значения случайны.
    Сбор информации должен помочь ответить на вопрос: "А кратна ли функция?" и определить эту кратность при разных входных параметрах в случае её обнаружения.
    Т.е., переформулируем вопрос: "какая следующая пара параметров выдаст такое же число?"
    Затем, нужно найти зависимость между максимальным рядом параметров, выдавшим одно и тоже число.
    Ответ написан
    Комментировать
  • Как реализовать поиск схожести двух строк (названия продуктов)?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Ответ написан
    Комментировать
  • Как составить алгоритм выбора наиболее эффективной команды героев?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Выбор, чтобы понять: "сможет ли выбранный герой кого-то победить?" можно определить так: суммарная эффективность (сумма разниц показателей урона выбранного героя с героями противника) выбранных героев должна быть больше нуля.

    S=(A1-B1)+(A1-B2)+(A1-B3) > 0 => ∞

    Т.е. перебирать, чтобы эффективность каждого была положительна и стремилась к нулю (минимальный запас перевеса или минимакс).
    Всё остальное - это оптимизация.

    Я бы еще добавил такие параметры (коэффициенты, которые ещё нужно более детально прорабатывать), как:
    1. урон атаки каждым из возможных способов атаки (АТАКА)
    2. время перезарядки каждого из возможных способов
    3. возможность атаки каждого типа цели
    4. дальность атаки до каждого типа цели
    5. защита каждым из возможных способов (ЗАЩИТА)
    6. время восстановления защиты каждого из возможных способов защиты
    7. возможность защиты от каждого типа атаки
    8. скорость передвижения каждым из возможных способов (ПЕРЕДВИЖЕНИЕ)
    9. свобода передвижения (полная - когда летает, частичная - зависит от ландшафта, стационарная - например, защитная турель или бункер)

    При пошаговой игре: время перезарядки может быть рассчитано, как количество атак за ход.
    Большая разница тут: ПОШАГОВЫЙ или REAL-TIME бой.
    Я тут вспомню про старик (StarCraft - RTS от Blizzard):
    1. Когда загораживают выход двумя MCV (рабы) которые умеют друг друга чинить, а за ними ставят пару маринов, которые отбивают полчища, пока те атакуют рабов. Вроде бы, при любом расчёте: убить 2-х маринов и 2-х рабов - не проблема, если у тебя 6 маринов и при любом просчёте - это будет явно видно!
    Однако, как показывает реальность: всё зависит от конкретного ландшафта/местности и умения стратегически мыслить.
    2. Маринов ставят за здания полукругом с равным удалением для одновременной атаки перед входом, если атакуют войска ближнего боя (например, зерлинги): сделано, чтобы те, кто вбегает : оказывается сразу под огнём всех маринов и, чтобы убить всех этих маринов, нужно атаковать одновременно каждого с небольшим превосходством, что сделать мышью - практически нереально.
    3. Банальный лабиринт: когда есть узкий проход и в ближнем бое может участвовать лишь несколько единиц, остальные стоят и ждут (или умирают под обстрелом).
    Варианты создания лабиринта: узкие проходы на местности, специфичная застройка, специфичная организация войсковых единиц (юнитов) или любые сочетания всего перечисленного.

    Многое зависит от доп.данных и по этой таблице - не возможно ответить на Ваш вопрос. Нужны ещё данные.
    Ответ написан
  • По какому алгоритму изменяется скорость в играх по типу timberman?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    С помощью коэффициента параметра игрового мира, надо полагать.
    Ответ написан
    Комментировать
  • Как соединить два онлайн пользователя в игре?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Алгоритм: карточная раздача, где "карточная колода" - это стэк игроков, желающих поиграть с другими оппонентами.
    Например, два игрока в игре: берем последнего и предыдущего подключившегося.
    Например, 4 игрока в игре: последний =>команда1, предыдущий => команда2, третий (с конца стэка) => команда1, четвёртый (с конца стэка) => команда2.
    Ответ написан
    2 комментария
  • Что такое дзен программирование?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Простой пример, где применяется грамотный код PHP-класса для получения информации о песне с сервера Icecast с удобным и понятным использованием.
    Ответ написан
    Комментировать