Красота математики
Конечно же математика не так нужна в решении средних задач программиста, но иногда она позволяет творить откровенную и не очевидную «магию»)
Я обожаю интересные задачи математики, в них можно найти очень интересные мысли и подходы, которые довольно неочевидны. Сегодня я наткнулся на любопытное видео. И действительно, очень крутая задача показывающая не очевидную математическую «магию». По сути на основе этой же задачи можно строить алгоритмы поиска скажем по связанным данным. Так как если данные связаны подобным образом, что обладают структурой циклов внутри себя, то это может значительно ускорить поиск в отличии от тех же жадных алгоритмов или алгоритмов поиска, которые работают за log(n) Так как нам не потребуется проходить по всем объектам) А можно предположить, что если наши данные представляют кучу несвязанных циклов, то с некоторой вероятностью сложность поиска будет уже пусть даже линейной, но по циклам меньше, чем log(n).
Допустим мы ищем в игре ботов фармящих золото. Часто боты работают как фермы, запускаются +- в одно и тоже время с разных айпи адресов. Но допустим мошенник хитрый, и рандомизирует время запуска + конечно же использует VPN. С помощью в некоторой степени той же идеи мы можем найти весь ботнет. Только вместо номеров на коробках у нас айпи адреса и время запуска (с некоторым люфтом). Мы смотрим айпи, смотрим время захода, ищем массив айпи с таким же временем захода, потом смотрим когда они ещё заходили, набросив пару фильтров отсекающих вероятно честных игроков) И таким образом находим массив айпи и аккаунтов которые с них заходили, чтобы забанить все эти аккаунты) Это конечно не прям такая же задача, и тут есть предположение, что боты не заходят совсем в случайное время со случайных неповторимых айпи, но базируется оно на той же идее, что мы можем свести данные к набору некоторых циклов)
Такими задачами конечно в среднем не занимаются разработчики, но это всё равно безумно интересно. Так же, как меня когда-то впечатлила идея qsort с двумя нодами. Идея в том, что в алгоритмах часто не обращают внимания на то, что сложность O(log(n)) в целом можно грубо развернуть в N * log(n) + C. Где N и C — это какие-то числа. И когда условный поиск/сортировка идёт по миллионам данных, то N=2 и N=1 — это два разительно отличающихся времени поиска)
Конечно я всё ещё считаю, что математика и алгоритмика в современном программировании обязательными не являются, так как в реальности такие задачи — это дай бог 2% задач. И есть много задач вообще не требующих математики) Но в любом случае это очень крутой инструмент :)