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

    @rPman
    решение будет гулять вокруг того, как именно сформулировано условие:
    где условно показано, какая точка должна быть ближайшая


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

    Дальше эту задачу можно расширить, если у каждого из этих значений будет дельта окружность (т.е. расстояния указаны в виде min/max) тогда ищем не точки пересечения а области пересечения колец, ну и комбинаторика, в какую область какую точку запихнуть чтобы не возникало противоречий, с каждым шагом алгоритма увеличивая количество учитываемых вершин - с трудоемкостью в факториал.
    Ответ написан
    Комментировать
  • Как в opencv достигается такая скорость работы?

    @rPman
    opencv это библиотека, использующая вычисления на видеокартах, используя Opnecl

    Opencl тут не виноват, причина высокой скорости GPU - ОГРОМНОЕ (десятки для дешевых и тысячи для дорогих) дубовых и от этого энергноэффективных проецессоров, каждый из которых подключен к своему независимому блоку оперативной памяти (там многоуровневая система, по разному организовано у amd/nvidia/intel). И еще, работа кода на этих процессорах ограничена одним правилом - выполняется только один код сразу на всех, это дополнительно позволяет сэкономить энергию и место на чипе.

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

    @rPman
    2 кардинально разных подхода:

    * вы изучаете, какие запросы совершает браузер, когда вы совершаете действия настранице (в браузере F12 закладка network, там можно на строке правую кнопку нажать и получить готовую команду утилиты curl к примеру), изучаете что из себя представляет запрос, выделяете параметры (что есть идентификатор сессии, что номер поста и т.п. - эмпирически и следуя логике как вы бы сами как програмист сделали) а затем повторяете все то же самое или только необходимое (например можно не грузить картинки стили и прочее) на любом языке програмирования, скорее всего загружая страницы придется их парсить, разбирать ссылки чтобы знать какие параметры подставлять в следующие запросы.

    * используя расширение к барузеру (например greasemonkey/tempermonkey), либо используя headless браузер типа silenium с подключением к вашему любимому языку или напрямую однократно добавив функции в консоли браузера (если сайт single page app без перезагрузки страницы) - полезно на время отладки, написать необходимый код прямо на javascript. Например чтобы кликнуть на ссылку достаточно написать $('css селектор до ссылки/кнопки').click()

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

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

    @rPman
    Обычный поиск в ширину с пометками о прохождении, так как у вас нет весов на ребрах, найдет оптимальный путь 'быстрее' всего. Вы не можете дать ответ, находится ли данная ячейка на оптимальном пути, пока его не найдете, поэтому - во время поиска в ширину у вас список текущих решений, как только хотя бы одно решение найдено, вы прекращаете поиск и проверяете, находится ли указанная вершина на одном из пути (их может быть несколько одновременно).
    Ответ написан
    2 комментария
  • Как генерировать числа с линейно заданной вероятностью?

    @rPman
    Если параметры задают вероятность дискретно (на картинке кстати у вас не дискретно а сложные нелинейные зависимости, т.е. 1 встречается почти в 50 раз реже 10, смею предположить что вам ТАК не надо) на интервалах, типа от [0-10) - 50 то решайте проблему в лоб, сначала выбирайте интервал в соответствии с вероятностями (если задаете количественно, то это сумма заданых значений - максимальное значение, а интервал значения rand - соответствующее значение для суммы до этого интервала и с ним, после выбора интервала просто делаете повторный rand так как в пределах интервала вам нужно равномерное.
    Ответ написан
  • Есть ли алгоритмы преобразвоания строки в хеш из цифр длино около 20 символов?

    @rPman
    20 цифр это 64 битное число, берете любые биты, можете перемешивать (xor) а там в зависимости от количества значений хеша.
    Ответ написан
    Комментировать
  • Какой используется метод для обнаружения аномалии в случайной последовательности?

    @rPman
    Без какой либо дополнительной информации у вас есть только один метод - вручную выделить данные, создав таким образом обучающую выборку для нейронной сети, и обучить ее на их основе.

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

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

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

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

    @rPman
    простейшее направление решения задач когда нужно приблизительное вычисление уравнения с многими неизвестными - привести их к функции от искомых параметров, суть которой - точность, т.е. чем ее значение меньше тем точнее мы угадали параметры, а дальше задача сходится к многокритериальному поиску и многомерной оптимизации (нейронные сети например их частный случай).

    дальнейшее развитие это решение этой задачи не полным перебором, а значит с не полной информацией о пространстве решений а значит попытка обойти возможные западни, типа локальных минимумов.
    Ответ написан
    Комментировать
  • Оптимизировать алгоритм поиска кратчайшего пути

    @rPman
    Я не знаю, пробовали ли вы этот вариант, основанный на утверждениях:
    1. полностью вся карта игрового мира изменяется не сильно
    2. обычно карту можно попытаться поделить на зоны или в тупом варианте ячейки (или точнее варианты перемещения между ними), которые так же меняются очень редко и не сильно
    Простейший пример: пусть зоны — просто квадратные ячейки внутри простой сетки, размер ячейки сравним со средним размером препятствия на карте.
    Более сложный пример: многоугольная область поделена на зоны по границам больших препятствий, и перпендикулярно пересекающие типичные пути движения юнитов (грубо говоря магистрали их движения), такую статистику в процессе игры собрать не сложно, сложнее выбрать размер зоны, как враиант — фиксировать количество таких зон от среднего количества юнитов в игре…
    Тогда из соседних ячеек пути перемещения обычно либо в обход через соседние ячейки либо через соединяющую грань между этими двумя.
    Размеры ячеек должны быть подобраны таковыми, чтобы вмещать некоторое (не сильно большое) количество препятствий… десятки или сотни.

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

    Весь путь считать не актуально, достаточно рассчитывать в пределах 1-2 ячеек вперед (по уже известным вам алгоритмам) и получать ответ, есть ли вообще возможность попасть к цели. Добавить к алгоритму пересчет пути в зависимости от игровых объектов актуальных для расчета коллизий (тут проблема — возможны ли заторы).

    Такие ячейки — это аналог памяти юнитов о том, как можно было бы примерно пройти в соответствующую зону.
    Добавит даже больше реализма, например поведение при заторах, юнит как бы еще не видит что путь впереди закрыт, но послушно топает, пока не попадет в ячейку с этим затором… тогда возникнет событие что путь достигнуть нельзя… так как меду ячейками вариантов перемещения всегда несколько, это создает не один путь перемещения по ячейкам несколько, соответственно временно помечаем что путь закрыт и выбираем следующий.
    Ответ написан
    Комментировать
  • Алгоритм надежной системы голосования, исключающий «накрутки»?

    @rPman
    Проблема — в регистрации пользователей, пока либо легко но ненадежно, либо надежно но сложно.

    Круче уже предложенного, только регистрация 'по паспорту'.

    Можно воспользоваться базами тех кто уже этим занимается, например webmoney (атестаты выше формального), но ясно, что не у всех есть вебмани регистрация, тем более неформальная.
    Так же, если я все верно понимаю, можно сделать прямой прием карт visa/mastercard, суммы первоначального вложения приличные, но идентификация будет хорошей, возможно есть посредники, которые предоставят такую идентификацию.

    Можно воспользоваться тем же механизмом, что и webmoney — потребовать от пользователя выслать минимальный платеж в системе contact (от 50р но у них самое лучшее покрытие офисами по стране), будет возможность получить информацию о том кто отослал — паспортные данные.
    Ответ написан
  • Есть ли вопросы к разработчикам софта и сканеров систем биометричесткой идентификации?

    @rPman
    Вопрос только один, они понимают что раздел отпечатков пальцев в системах биометрической идентификации один из самых ненадежных и для банковского сектора 9в общем случае я имею в виду) малопригоден?
    Ответ написан
    1 комментарий
  • Как автоматически посчитать людей в салоне автобуса или помещении?

    @rPman
    После предложений о фотоэлементах, датчиках касания к поручню и т.п. могу предложить необычную идею… установить датчики на автобусе (потребление бензина, угол наклона дорожного полотна, скорость,...) и на их основе состряпать мегасложную формулу (или нейронную сеть обучить) вычисляющую вес автобуса… затем делить на средний вес пассажиров (при обучении можно считать людей 'вручную').
    Ответ написан
    Комментировать
  • Как обработать столкновение объектов?

    @rPman
    Судя по акценту на любые конфигурации объектов вам нужна корректная обработка даже таких случаев, когда по координатно объекты проходят друг сквозь друга, но из-за особенностей их конфигурационных матриц они не сталкиваются.
    Универсальное решение — только хранение дополнительных матриц кешей, уменьшенного масштаба объектов. Количество и конфигурация кешей зависит от сложности этих матриц. На один объект может быть несколько матриц, последовательного уменьшения масштаба (например с коэффициентом 4 — 128x128 -> 32x32 -> 8x8 -> 2x2), тогда при обнаружени столкновения прямоугольных областей объектов последовательно проверяются пересечения точек сначала на матрицах конфигураций объектов с низким разрешением, при обнаружении пересечения повторяется проверка для соответствующих точек уже из матрицы с более высоким разрешением.

    Алгоритм очень эффективный, особенно для сложных объектов, занимающих мало место в матрице.

    p.s. еще неплохим подспорьем может оказаться дробление объекта на составляющие (т.е. представлять объект сразу несколькими объектами, параметры которых вычислять тут же, даже не требуется физически хранить и двигать эти объекты синхронно)
    Ответ написан
    2 комментария