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

    kumaxim
    @kumaxim
    Web-программист
    Нечеткий поиск. Алгоритм шинглов.
    Ответ написан
    Комментировать
  • Как правильно генерировать псевдослучайные числа?

    kumaxim
    @kumaxim
    Web-программист
    Судя по Вашему комментарию к ответу Ivan Sokolov Вы несколько не понимайте суть своего же вопроса.

    Любое, повторюсь, абсолютно любое, псевдослучайное число будет находиться в какой-то последовательности, причем сама последовательность будет строиться по какой-то формуле.

    Я очень глубоко сомневаюсь что вообще кто-либо когда-либо сможет получить абсолютно случайное число, т.к. любая случайность это непознанная закономерность!

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

    Возьмем, например, функцию rand() из любого языка программирования. Она будет генерировать псевдослучайное число основываясь на метки времени в unixtime. На сколько она предсказуема? Хм, думаю не менее чем на 100%. Хорошо, получается что зная приблизительное время запуска функции rand(), скажем, с точностью до 1 минуты, мы можем получить точно такое же псевдослучайное число. Отлично, т.е. вот от этого нужно и копать.

    Давайте предположим, что мы вытянули список компаний из ЕГРЮЛ по Москве и взяли их ОРГН. Далее, наша функция генерирует unixtime и из него мы вычитаем этот самый ОГРН, причем последние две цифтры в unixtime и ОГРН должны совпадать(к примеру, условие выбора ОГРН может быть любое). Чего мы добились? Зная время работы функции rand() мы не можем сгенерировать второе точно такое же псевдослучайное число. Вы мне можете сейчас возразить, что давайте возьмем тот же ОГРН и повторим процедуру. На этом месте я хочу задать Вам вопрос: а от кого мы вообще строим защиту? Злоумышленник является создателем системы и знает о ней 100%? Я думаю любая защита в этом случае просто бессмысленна.

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

    Будет ли при этом Ваш ряд псевдослучайных числем более или менее случайным? Хм... Большой вопрос... На этом месте опять вспоминаем что такое случайность.
    Позволит ли это повысить защищенность системы? Думаю от части может, потому что злоумышленнику неизвестен алгоритм генерации, хотя это в определенной степени и плохо.

    Резюмируя все выше сказанное - чтобы сделать Ваш ряд псевдослучайных чисел более случайным, нужно в формулу его генерации добавить число из другого ряда чего-то псевдослучайного. Также сильно рекомендую получившиеся псевдослучайное число проверять на простоту, если Вы его собирайтесь использовать как значение в генерации секретного ключа для ГОСТ или RSA
    Ответ написан
    2 комментария
  • Какие методы Вы используете, чтобы быстро найти участок в проекте с сотней тысяч строк?

    kumaxim
    @kumaxim
    Web-программист
    1)Ctrl + F
    2)PHPStorm автоматически может перекидывать на определение функции
    3)Отладчик

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

    kumaxim
    @kumaxim
    Web-программист
    Фраза для гугла "Длинная арифметика С++"
    Ответ написан
    Комментировать
  • Как правильно сгруппировать данные по временным границам?

    kumaxim
    @kumaxim
    Web-программист
    Для начала я буду отталкиваться от того, что это у Вас какой-то журнал и все записи идут по возрастанию времени. Для простоты я полагаю что эти записи у Вас лежат в массиве.

    Решение в лоб - организовать перебор. По шагам:
    1. Берем элемент N
    2. Проверяем существует ли элемент N-1(обработка первого элемента)
    3. Берете dataTime элемента N и вычитайте из него 15 минут(переменная time_minus)
    4. Берем dataTime элемента N-1 и сравниваем с time_minus. Если он меньше - ставите некий флаг, пусть semi_result_minus, в истину
    5. Проверяем существует ли элемент N+1(обработка последнего элемента)
    6. Берете dataTime элемента N и прибавляйте к нему 15 минут(переменная time_plus)
    7. Берем dataTime элемента N+1 и сравниваем с time_plus. Если он меньше - ставите некий флаг, пусть semi_result_plus, в истину
    8. Если обе переменные semi_result_minus и semi_result_plus имеют истинное значение - текущий элемент N соответствует Вашим критериям, значит включайте его в результат


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

    kumaxim
    @kumaxim
    Web-программист
    Задача "экономить" технические мощности встает в трех случаях:
    1. Вы Марк Цукерберг и Вашему Facebook не хватает мощностей всех датацентров для нормального функционирования
    2. Вы программируйте тостер/утую/кофеварку и т.п. где в принципе ресурсов нет
    3. Вы мазохист и используйте шаг 0,000000001 в методе приближения чего-либо


    С моей точки зрения, написанный Вами код должен в первую очередь быть понятен другому разработчику, он должен легко читаться, возможно, расширяться. Если клиент стоит перед выбором "Нанять разработчика за 1к у.е./месяц или арендовать под свой проект еще один сервер за 250 у.е./месяц", то я сомневаюсь что он выберет первый вариант, кроме случая №1 из списка выше.
    Ответ написан
    2 комментария
  • Что послушать про программирование?

    kumaxim
    @kumaxim
    Web-программист
    Уйдите чуток от программирования, расширьте свой кругозор. Я когда-то в маршрутках по дороге дом < = > коворкинг слушал:
    1)Самый богатый человек в Вавилоне. Клейтон
    2)Богатый папа, бедный папа. Киосаки
    3)Квадрант денежного потока. Киосаки
    4)Искусство войны. Сунь Цзы

    *Через точку - фамилия автора

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