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

    @dmshar
    Непонятно, откуда у вас MemoryError. Если исходная выборка размещена в памяти, и ей хватило там места, то на что у вас расходуется память? Вам ведь не надо запоминать все полученные простые числа. Вы берете их по одному и просто выясняете - простое оно или нет.
    Вот со временем - да, если у вас действительно большие числа и их к тому-же много - ну тогда переборный алгоритм быстрый не будет. Поэтому ограничение в 1 сек. - это просто какая-то мягко говоря странность, если не указывать, а какие именно числа в вашей последовательности. Для 1000 чисел, всех лежащих в диапазоне от 0 до 1001 - это одно, а для лежащих в диапазоне от 10**12-1000 до 10**12 - это совсем разное время работы.
    Ответ написан
  • Какой есть алгоритм для нахождения тенденции к уменьшению или увеличению значений в массиве?

    @dmshar
    Если нужен ТОЛЬКО ответ на вопрос есть или нет тенденция (тренд), то можно обойтись и без регрессии. Существуют специальные тесты. Их много.
    Критерии серий (https://math.semestr.ru/trend/median.php )
    Критерий Аббе-Линника (http://www.machinelearning.ru/wiki/index.php?title... )
    Критерий Фостера-Стюарта (http://www.machinelearning.ru/wiki/index.php?title... )
    Критерий Валлиса-Мура (https://thelib.info/matematika/66568-proverka-dina... )
    Выбирайте.
    Ответ написан
    Комментировать
  • Создание алгоритма для создания статистического отчета?

    @dmshar
    Если вы не можете САМИ решить тестовую задачу с собеседования - эта позиция вам ЕЩЕ не по зубам. Успокойтесь и начинайте не ответ искать, а разбираться, как решить ПОДОБНЫЕ задачи на следующих собеседованиях. Именно подобные а не конкретно "эту" - потому что на следующих собеседования вероятность попасть на ту-же задачу - почти нулевая.
    Недавно отвечал на очень подобный вопрос на этом форуме. Там был вопрос/ответ про алгоритмы, но суть от этого не меняется:
    https://qna.habr.com/answer?answer_id=1985526#answ...
    Ответ написан
    Комментировать
  • Как подготовиться по алгоритмам к собеседованию(junior)?

    @dmshar
    Никогда не понимал, что значит "подготовиться к собеседованию". К экзамену понимаю - выучили "от сих до сих", ответили на вопрос, удовлетворили преподавателя, получили свою оценку и гуд бай.
    А к собеседованию? Что толку, если вы "нахватаетесь" за 4 дня каких-то отрывочных знаний, даже на что-то правильно (почти случайно) ответите на собеседовании без глубокого понимания. Вы ведь тут не препода обманываете, вы завтра должны решать будете не игрушечно-собеседную, а реальную производственную задачу. Работодатель думает, что вы спец по алгоритмам, а вы просто чего-то там "нахватались" перед собеседованием. Можно догадаться, как закончиться ваш испытательный период. Так зачем тратить время? Лучше его потратить на ИЗУЧЕНИЕ алгоритмов, и на следующем собеседовании не трястись что тебя спросят чего-то, что не успел прочитать. Тогда и работодатель поймет с кем дело имеет, и вам польза будет на будущее.
    В общем, собеседование - это не экзамен! К нему специально готовиться - себе во вред. Но на собеседовании надо показывать именно то, что вы собой на самом деле представляете. А если это не устраивает работодателя, то благодарить Бога, что на эту работу вас не взяли.
    Впрочем, вменяемый работодатель и не будет заставлять на собеседовании до запятой рассказывать конкретный алгоритм. А вот попросить сравнить, объяснить почему один из них лучше, быстрее, экономичнее и пр. другого очень даже может. Или например попросить вас для конкретной задачи и конкретных данных подобрать наиболее подходящий алгоритм. Вот к пониманию именно таких вещей и надо посвящать время подготовки.
    Ответ написан
    2 комментария
  • Какой алгоритм применить для решения задачи?

    @dmshar
    А в чем проблема?
    1. Выбрать некоторое множество скриптов так, что-бы сумма времен их работы была максимально близка но меньше 24 часов.
    2. Выбранные скрипты формируют отдельную последовательность скриптов. Выбросить выбранные скрипты из рассматриваемого пула.
    3. Если пул скриптов не пуст - перейти к п.1. В противном случае - закончить.
    Получаем некое количество последовательностей скриптов. Каждая такая последовательность запускается параллельно и независимо от других. Элементы в каждой из этих последовательностей можно запускать в произвольном порядке.
    Количество таких последовательностей - минимально возможное. А следовательно, минимально и количество скриптов, которые будут работать параллельно.

    Поскольку скриптов пусть несколько десятков, а планирование - статичное, т.е. "один раз и надолго вперед", пункт первый можно даже перебором сделать.
    Но вообще говоря задача сводиться в проблеме заполнения ранцев - известная задача исследования операций.

    P.S. Ни к Матстатистике ни к Python задача отношения не имеет. Да и к Аналитике - тоже. Типичная задача исследования операций.
    Ответ написан
    Комментировать
  • Как можно найти все пути между вершинами графа networkx?

    @dmshar
    Если нет - легко написать самому. Рекурсия и элементарная теория графов.
    Но надо иметь ввиду, что эта задача имеет экспоненциальную сложность. Поэтому даже если напишете - не факт, что при более-менее серьезном графе решите вашу задачу за вразумительное время. (Ну, если ваш граф не на пять-десять вершин). А если граф еще и не ориентированный - то решений вообще по определению бесконечное число.
    Поэтому для практических нужд обычно формулируют ограничения, которые позволяют сократить круг рассматриваемых вариантов и решать реальные практические задачи.
    Вот тут - элементарное объяснение:
    kuimova.ucoz.ru/modul_10-grafy-bazovye_algoritmy.pdf
    Вот тут - некий драфт скрипта
    https://ru.stackoverflow.com/questions/1046271/алг...
    Вот тут - если начнете писать - некоторые полезные обсуждения и идеи
    https://coderoad.ru/2723438/Алгоритм-Графа-Для-Пои...
    www.fvn2009.narod.ru/Olympiads/Rules_Olympiads/Rul...
    www.delphikingdom.com/asp/answer.asp?IDAnswer=56734
    Ответ написан
    Комментировать
  • Какой лучше выбрать алгоритм для кластеризации большого количества данных?

    @dmshar
    Вы не сообщили главного - в сколько параметров описывают ваши данные?
    При двух-трех параметрах время вряд-ли будет катастрофически долгим.

    Тем не менее.
    Попробуйте DBSCAN например. Он не требует обработки всех данных на каждом шаге. Его вычислительная сложность O(NlogN), в худшем случае - O(N**2). Вот тут https://habr.com/ru/post/322034/
    его рекомендуют для случая, когда у вас данных порядка 10**6 и даже больше, если можете распараллелить реализацию.
    Ответ написан
    Комментировать
  • Как разделить "веса" на кластеры КОРРЕКТНО?

    @dmshar
    В алгоритмах кластеризации использующих центроиды (да и вообще - построенные на метрических мерах) как правило требуется задание количества кластеров, на которые вы желаете разбить свой набор данных в качестве входного параметра. Измените приведенный выше вами пример на такой - 1,2,4,11,12,18,19,20. И вот уже непонятно, тут три или четыре кластера? Просто в одномерном случае мы можем построить рисуночек и ответить на вопрос визуально. В многомерном так не получается, и определение "корректного" количества кластеров выливается в отдельную и весьма не простую задачу. И точног, абсолютно обоснованного решения, кстати, может и не иметь. Можете поискать "метод колена при кластеризации". Только зачем себе жизнь усложнять?

    Если же исходить из того, что данные к вам поступают, например, потоком и их надо бить на некоторые кластеры, то я бы вообще - в одномерном случае!!! - задал правило и не мучился бы. Например, в один кластер попадают точки, отстающие от ближайшей точки кластера не далее чем на 1. Или на 2, или на 3 или вообще на 100 - но это как раз и будет тем семантически зависимым параметром вашего алгоритма. При этом надо признать, что количество кластеров может изменяться. Причем и увеличиваться и уменьшаться. Например, в потоке 8,5,4,1,6,7 - у вас последовательно будет 1,2,2,3,3,2 кластера. Но это более менее согласуется с нашим интуитивным представлением. И главное, опровергнуть корректность именно такого количества кластеров - при заданном правиле - не удастся.
    Ответ написан
  • Как решить задачу оптимального распределения задач по времени среди определенного количества исполнителей?

    @dmshar
    В общем виде задача называется "Оптимальное распределение ресурсов".
    Изучается обычно в рамках курсах "Методы математической оптимизации", "Исследование операций", "Линейное и динамическое программирование" и т.д.

    Учебников масса - начиная с классики:
    Вентцель Е. С. Исследование операций: задачи, принципы, методология.
    Ответ написан
    2 комментария
  • Выражение формулы из задачи?

    @dmshar
    Господи, ну сколько можно. Ну хоть элементарно научитесь поиском работать!
    Берете А, А+1,A+2. Смотрите, кто из них делится на 3. Пусть это число равно С. Потом берете все числа С+3,С+2*3,С+3*3.... С+N*3 меньшие чем В. Все. Какой time limit??
    Ну, можете еще В-.A на три поделить, если вас инетерсует только число.
    Ответ написан
    Комментировать
  • Как написать алгоритм пересечения графиков двух функций с определенным уровнем допуска?

    @dmshar
    Не очень все понятно, но тем не менее.
    Во-первых, функции могут пересечься и тогда, когда обе они растут или обе падают. Просто с разной скоростью. Вы этот случай отбросили намерено?
    В-вторых, непонятно, у вас все точки измерений заранее накоплены или вы решаете задачу по мере поступления точек? Если последнее - то тут и думать нечего, просто меряете расстояние между значениями и принимаете решение.
    Кстати, не ясно, у вас данные приходят в один момент, или в разные. Во втором случае просто расстоянием не обойдешься - надо искать возможные пересечения функций между точками замера. Это не сложно но тем не менее.
    Далее. Если данные все-таки имеются "пакетно накопленные" - то проще всего используя, к примеру ту-же Pandas построить соответствующий ДатаФрейм, в котором точка пересечения (или точкИ пересечения) находятся с помощью одной строчки логического условия. Да и упорядочение точек, если они не одномоментно измерены, в Pandas - тоже стандартная процедура.
    Ответ написан
  • Почему в оценке сложности алгоритма log n пишется без основания?

    @dmshar
    В данном контексте выражение log 64 не имеет особого смысла. Сложность алгоритма - это не про то, сколько времени (или памяти) он будет точно занимать, та то, каким образом растет зависимость при n. (См. понятие Асимптотическая сложность алгоритма). Как сказано в других ответах - это весьма примерная оценка, и каково основание логарифма - особой роли не играет. Главное - что она не линейна, не квадратична и пр. а именно "формы графика логарифма". Не больше и не меньше.
    Ответ написан
    Комментировать
  • Как решать подобного рода задачи?

    @dmshar
    Проверка корректности вложенности скобок - классическая задача, которая используется при объяснении на простейшем примере работы. стека. Таким образом - на ваш вопрос "Как решать подобного рода задачи?" - отвечаю, используя стек. Открывающая скобка соответствует операции занесения нового элемента в стек. Закрывающая скобка - извлечение из стека. Если в конце прохода по данным стек пуст - выражение корректно. В противном случае - нет.
    Ответ написан
    5 комментариев
  • Как сосчитать гистограмму ячейки 8 × 8?

    @dmshar
    Ответил на другом ресурсе. Смотрите.
    Ответ написан
    Комментировать
  • Существует ли алгоритм выведения неизвестного из формулы?

    @dmshar
    Не только maxima или octave, но и Python/SymPy имеет аналогичные средства. (Кстати, разработки в этом направлении ведутся как минимум с начала 70-ых годов прошлого века). Но повторять подвиг их разработки - надо иметь большое нахальство (в хорошем смысле), глубокие знания в математике (мат.логике, алгебре, теории формальных грамматик и очень много в чем еще) и программировании (причем, не на классических языках программирвоания, а на всяких LISP да PROLOG - впрочем, я не слежу, что в этой области сейчас в тренде), и вообще-то говоря не малую команду квалифицированных сподвижников. Да и зачем? Бери, пользуйся готовым. Ну если очень хочется - встрой в свое приложение, благо все доступно, вплоть до исходного кода.
    Ответ написан
    Комментировать
  • Комплексная вероятность. Как реализовать генерацию случайного коэффициента по графику?

    @dmshar
    Все зависит от того, знаете-ли вы формулу вашей ф-ции (квази)плотности распределения. Надеюсь, что у=F(r) известна, и соответственно, известна и функция Ф(y)=r, обратная к ней. Тогда не надо изобретать велосипед, все придумано до нас.
    Например: stratum.ac.ru/education/textbooks/modelir/lection2...
    На пальцах:
    Генерируете равномерно распределенное число в диапазоне от (по вашему рисунку) 0 до 100%. Получаете точку y на оси Y. Потом считаете r=Ф(y).Последовательность таких точек {r} будут генерироваться случайным образом, в строгом соответствии с вашим законом распределения.
    Не просто "чаще"-"реже", и именно в соответствии с вашим законом.
    Так поступают всегда и все. Реализация на Python - в три строчки.
    Ответ написан
    Комментировать
  • Алгоритм автоматического распределения объектов по области?

    @dmshar
    Все элементарно.
    Цикл в цикле.
    Внешний цикл генерируете произвольную точку на плоскости (ну, например, генерируя случайное число в диапазоне размеров вашей плоскости по ширине и высоте)
    Пробуете поместить центр очередного объекта в эту точку.
    Получилось - отлично, продолжаем внешний цикли.
    Не получилось (из-за того, что либо вышли за пределы плоскости, либо перекрылись с ранее размещенной фигурой) - тут два варианта вам на выбор. Либо сдвиг текущего объекта (и снова проверка возможности), либо возвращаемся к пункту случайной генерации позиции.
    И так, пока не переберете все объекты.
    Не удалось разместить все объекты - возвращаетесь на несколько объектов назад (или на все) и повторяете основной процесс.

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

    @dmshar
    Для поиска пропущенных чисел вовсе не обязательно делать последний цикл да еще и в цикле.
    Достаточно один раз линейно пройти отсортированный массив от начала и да конца проверяя на каждом шаге выполняется или нет условие arr[i]==arr[i]+1, и если не выполняется - то arr[i] = это ваше число.

    Можно и по другому. Если вам известна numpy, то сначала создаете нулевой массив на n позиций, потом каждое число х записываете так, что-бы arr[x]=х. А потом за один проход массива ищите те позиции, которые остались нулевыми.

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

    @dmshar
    В НЕупорядоченном дереве такого алгоритма не существует. Это ничем не отличается от поиска в НЕупорядоченном массиве. Обе задачи требуют просмотра всего набора элементов. При упорядочении - можно думать о повышении эффективности алгоритма.
    Ответ написан
    Комментировать
  • Можете помочь решить задачи с блок-схемами?

    @dmshar
    Вы ошиблись. Тут сайт ПОМОЩИ для тех, кто что-то решает сам и у него что-то не получается. Или что-то непонятно. Всяко бывает.
    Сайт решения задач ВМЕСТО вас гуглится по слову "Фриланс".
    Ответ написан
    1 комментарий