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

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    попробуйте словарь вместо массива (или сходные типы)
    думаю других вариантов нет. от слова совсем убедили коллеги ))

    ps есть еще разнообразные БД. но целесообразность зависит от объема данных в соотношении с доступной оперативкой..

    pps если в достатке оперативка и ядра, то запрос plinq поможет... но все же рекомендую бенчмарки ))

    https://learn.microsoft.com/ru-ru/dotnet/api/syste... в довесок ;)
    Ответ написан
  • Как ускорить поиск элементов из статичного string[] по подстроке?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    как вариант (да простят коллеги) - многосвязный граф из уникальных подстрок с глубиной..
    25 млн строк
    не хилая заявка..
    все что повторяется - узлы графа, уникальные хвосты - их содержимое
    тут появляется возможность использовать графовые БД.
    раз у нас тег C# brightstardb возможно? это умозаключения, не имел достаточной практики утверждать уверенно

    ps если память не изменяет - brightstardb легковесная, может работать как сервис, так и встраиваемая, мозгами пораскинуть придется.. производительна.. но все познается в сравнении бенчмарков

    pps естественно это не единственная графовая бд, в тч под шарп ))

    ppps ... а обход массива с plinq не пробовали?... ну может ядер много? ;)))
    Ответ написан
  • Как разместить N файлов по папкам?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    вам сюда

    ps ок. на математику не учились. бывает. остается выбор декларативного (или функционального языка)... (мой любимый шарп уже практически оброс функциональщиной...)...
    ... и тупой перебор вариантов... а он может оказаться долгим... но это правда жизни
    Ответ написан
    Комментировать
  • Объясните мне на пальцах рекурсию Фибоначчи F(4, например). Это самый простой алгоритм, а я не могу понять. Что мне делать?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    это функциональный стиль. может в том проблема? попробуйте тот же C#? Си? (без плюсов для начала).. любой диалект Pascal?
    ... это именно что бы понять.. а так, против питона ни че личного ))
    разглядел теги... ща.. дабавлю..
    изучите легкую модификацию алгоритма.. ну и проще с хранилищем, чем сразу с рекурсией.. просили же на пальцах? ;))
    namespace ConsoleApp1
    {
        public static class Fib
        {
            static List<int> fib = new List<int>();
            static int max = 15;
            public static void Main()
            {
                for (var i = 0; i < max; i++)
                {
                    if (i == 0) fib.Add(0);
                    else if (i == 1) fib.Add(1);
                    else fib.Add(fib[i - 1] + fib[i - 2]);
                    fib.print();
                    "... next step...".print();
                }
            }
            public static void print(this string s) => Console.WriteLine(s);
            public static void print(this List<int> l) { foreach (var i in l) i.ToString().print(); }
        }
    }
    - функциональный стиль крут лаконичностью....
    - слаб не предсказуемостью времени выполнения (а так же рисками переполнения стека..
    - изучите что такое хвостовая рекурсия.. (после того как разберетесь с моей версией... ;)))... удачи
    .. ну или так еще..
    namespace ConsoleApp1
    {
        public static class Fib
        {
            static List<int> fib = new List<int>();
            static int max = 15;
            public static void Main()
            {
                fib.Add(0);
                fib.Add(1);
                for (var i = 2; i < max; i++)
                {
                    fib.Add(fib[i - 1] + fib[i - 2]);
                    fib.print();
                    "... next step...".print();
                }
            }
            public static void print(this string s) => Console.WriteLine(s);
            public static void print(this List<int> l) { foreach (var i in l) i.ToString().print(); }
        }
    }
    нарушения сна.. надо чем то заняться ))
    .. и так, рекурсия мощный инструмент.. но особенно когда мы знаем некие принципы по кускам, а связать их нам трудно (привет Prolog ;)...
    беру ваш исходный пример, и добавляю трассировку ;)
    namespace ConsoleApp2
    {
        public static class recursion
        {
            static long callcnt = 0;
            static int fib(int n)
            {
                $"_fib calling {++callcnt} count".print();
    
                var res = 0;
    
                if (n == 0 || n == 1) res = n;
                else res = fib(n - 1) + fib(n - 2);
    
                $"_fib return {res}".print();
    
                return res;
            }
            static int max = 15;
            public static void Main()
            {
                for (var i = 0; i < max; i++)
                {
                    "... next fib...".print();
                    fib(i).ToString().print();
                }
            }
            public static void print(this string s) => Console.WriteLine(s);
            public static void print(this List<int> l) { foreach (var i in l) i.ToString().print(); }
        }
    }
    .. реализуйте, и сравните как растет стоимость выполнения с ростом глубины погружения (номера числа Фибоначчи).. оптимизацию для одного вызова не применял.. так нагляднее )))
    .. тем не менее, иногда рекурсия и красивый, и надежный способ решения запутанных задач )))
    .. но, возможно, дорогой по времени и ресурсам )))

    ... еще подправил, подумал так нагляднее ;)))... программируйте, пробуйте все ))
    Ответ написан
    5 комментариев
  • Для кого операция добавления элемента в середину медленнее — для List или для LinkedList?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Проблема в том, что для LinkedList операция чтения O(n), вставки - O(1). Для List - операция чтения O(1), вставки - O(n). Получается, что скорость равна?
    если n=1, умозрительно да...
    .. ну а цена вопроса?... не? не слыхал?... я молчу по новые фишки распараллеливания... хотя и не знаю (пока) на сколько уместны...
    Ответ написан
  • Знаете ли вы алгоритмы длинной арифметики, операции которого не выходят за границы двух байт?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    для результата умножения двух int32, всегда надо резервировать int64 и так далее (8х8=>16, 16х16=>32)

    ps результат умножения просто рассматриваете как массив из 2х элементов базовой размерности
    Ответ написан
  • Формула для игрока в азартной игре?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    Ответ написан
    Комментировать
  • Как заполнить недостающие элементы словаря?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - думаю тег Unity тут лишний ))
    2 -
    3. Если несколько неизвестных элементов стоят в ряд, то значение float первого из таких элементов является средним арифметическим первого известного элемента перед этим рядом и первого известного элемента после этого ряда.
    ну тут что то из ряда выпадает.. почему не построить дискретный ряд средних между начальным и конечным? .. но это тоже мысли в слух. если у вас условия заданы извне или вы жестко настаиваете что так и только так дело то хозяйское
    3 - все три (ваших. по тексту вопроса) пункта, весьма просты. вопрос(ы) только в том:
    - когда вы обнаруживаете нехватку значений?
    - когда коррекцию надо выполнять?
    - .. как то сведите эти события к решению ;)))
    4 - а вот тут, единственный момент, который, на мой взгляд, вам важнее всего усвоить в контексте вопроса
    - ключ в c# dictionary уникален
    - вы ограничиваете значения диапазоном [0-360] (кстати, почему не [0-359] или [1-360]? ну как хотите)
    - вам точно проще использовать массив float[360]. не благодарите вру, люблю отметки. и этот пункт, на данный момент, самый ценный для вас ;))

    ps что то подумалось.. вам наверное надо как то отличить значения, которые еще ни когда не инициализировались?.. возможно подойдет float?[360] (Nullable) это хороший способ отличить значение, которое еще не принимало численную величину, не создавая при этом каких других заумных абстракций..
    .. и даже обозначить случай, когда ранее определенной величине, надо присвоить значение, которое четко говорит а теперь мы опять не знаем числа, и настаиваем на неопределенности значения
    Ответ написан
    Комментировать
  • Как осуществить алгоритм поиска Фибоначчи?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Eugene,
    Я просто не пойму как реализовать. Как написать код и как оно должно все выглядить. Вот в чем беда.
    возвращаемся к заданию
    Разработать программный модуль демонстрации сравнения работы алгоритмов поиска с помощью Фибоначчиева алгоритма и алгоритма по бору.
    вам надо выяснить что такое:
    - поиск с помощью Фибоначчиева алгоритма
    - поиск по бору
    - реализовать оба алгоритма
    - протестировать на показательном наборе входных данных
    - что от вас хотят в качестве сравнения, ни кто тут протелепатировать не может. минимум это сравнение быстродействия по времени исполнения и/или по количеству итераций
    - максимум, все это можно еще и визуализировать. как это может выглядеть можно посмотреть на визуализациях тех же алгоритмов сортировок. хотя скорее всего пункта выше вам хватит
    ps
    ни один из этих пунктов не может быть подсказан 2-3 предложениями и 5-10-15 строками кода. если не приложили собственных существенных усилий
    pps
    в частности основы WinForms точно надо освоить
    https://docs.microsoft.com/ru-ru/dotnet/framework/...
    https://metanit.com/sharp/windowsforms/1.1.php
    Ответ написан
  • Алгоритмы на хэш функциях?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    https://www.google.com/search?client=firefox-b-d&q...

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

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

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    Возможно ли вообще строить блок-схемы по объектно ориентированному коду
    ООП концепции адекватнее отображать с помощью uml, но не ГОСТ 19.701-90. вы можете отобразить алгоритм исполнения по госту для консольных программ. для форм или wpf в общем то тоже, но вам придется уже углубиться в механизм обработки событий для того что бы такая блок схема была корректной
    как мне обозначит что в этом месте будет исключение и там будет две ветки развития событий?
    тут ключевое слово ветвление, если вы понимаете куда реально произойдет передача управления в случае выброса исключения - нет проблем это отобразить

    ps сам механизм исключений не привязан к конкретной парадигме. и уж точно не имеет отношения к ООП
    Ответ написан
    4 комментария
  • Задачи с собеседований по максимальным числам: как решить?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    Adamos,
    2. Раскладываете А1 на множители (это куда быстрее перебора всего массива на комбинации из трех элементов).
    все зависит от размеров чисел. для больших чисел это может быть сверсхложной задачей

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

    а пляски с делителями зависят от нюансов - размер списка? он помещается оперативной памяти? или доступен только последовательно, из медленного источника?.. если делители гарантировано присутствуют, их можно найти за.. думаю количество проходов однозначно будет меньше чем для любого алгоритма сортировки )) upd если список существенно длинне 3х элементов ))

    и существует ли гарантия присутствия делителей в списке? если нет +значения не велики +список большой +источник последовательный и медленный, возможно, Adamos будет прав. ну а для значений не более 8 битного целого, скорее будет прав однозначно ))
    Ответ написан
    6 комментариев
  • Что почитать для понимания чужого кода?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    1 -
    Что почитать для понимания чужого кода?
    чужой код
    2 - осваивайте отладчик.
    первый раз работаю с С#
    если это винда, то все довольно не плохо - вам абсолютно легально и бесплатно, доступна VS2019 Community (если есть очень веские аргументы, можно и версию постарее) изучайте код под отладчиком
    3 - советовать вам литературу, в данном случае бесполезно - надо знать мышление кодера, который слислся. возвращаемся к пп2 - лучше отладчика, ни кто вам не поможет
    4 - поправка - F1 и правый клик на классах в студии )). если класс от МС - F1 поможет. если класс/переменная/тип от "слившегося" - изучите пункты меню "правого клика":
    - перейти к определению
    - перейти к реализации
    - найти все ссылки
    5 - upd что бы читать, надо и кодить.. что бы легче было читать - надо много кодить. эти процессы друг друга сильно подпитывают. если нет заданий "с чистого листа".. стоит где то упражняться (как качалка, спортзал).. тут к примеру https://www.codewars.com/
    .. но делать хотя бы мелкие, но кому то полезные задачи, это даже круче. ну и совсем круто - совмещать все... если хотите стать мастером )))
    Ответ написан
    Комментировать
  • Библиотека, которая поможет понять, что "ответы" и "OtBETЫ" - это одно и тоже?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    Алиасы не помогут решить эту проблему. Есть миллионы способов написать слово...

    вот тут мы и подходим к версии ИИ:
    - надо иметь огромную базу (что реально) краденых паролей, что бы гонять ее по словарям, и учить ИИ (дальше версии для НЕ слабонервных.. или корпораций.. или спецслужб)
    - можно тренировать ИИ на визуальное подобие символов в национальных раскладках (допустим a=@ и $=s это универсально, а ч=4 это "по русски".. в=8 .. б=6.. почему нет? ;))) .. о=0 .. ну это во всех языках допустимо..
    - можно тренировать ИИ на аудио совпадения. но, это еще мегазатратнее по ресурсам (не обучения, даже исследования (+видеоподобия см пп. выше, думаю, используются на порядки чаще)

    ps классический пароль от МС, для обхода старых "строгих" правил, для какого то быстрого теста - P@ssword
    улучшенная версия (известная всему миру, хакерскому точно) - P@$$w0rd

    .. допустим у вас монитор Panasonic.. немного правил в голове, и шпаргалка всегда под носом - P@na$0ni(
    c => (... а че нет то? ;)))
    .. или - Pфn@$0ni( .. удачи составителям словарей алиасов ;))
    .. для полной картины, допустим Зфт@$0ni( .. и еще раз - удачи! ;)))
    Ответ написан
  • Как автоматически сгенерировать правила искажения изображений?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    1) Клеем на автомобиль винил с изображением сетки
    2) Фотографируем
    3) Генерируем правила искажения

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

    с какого бодуна? формы автомобилей то разные.. у вас 3D печать? используйте 3D сканирование+preview, но если работа ручная, как вы предполагаете учесть в "правилах искажений" видение мастера?

    upd2 подсказка - это CAD технологии - возможно даже полный жизненный цикл ваших хотелок. довольно популярен 3DMax, он вроде не бесплатен, но и не единственный продукт на рынке
    Ответ написан
    2 комментария
  • Количество вариантов возможных расстановок в игре?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    Комментировать
  • Как реализовать алгорим задачи о сумме подмножеств?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    у гугла спросить не судьба? Задача о сумме подмножеств

    ps кстати, сведения о вычислительной сложности идут первым же пунктом
    Ответ написан
    6 комментариев
  • Как сделать алгоритм перебора всех вариантов перестановок и количества чисел, чтобы их сумма ровнялась определенному числу?

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    вашу задачу можно рассмотреть как аналог раскроя ленты материала (длиной 3000 единиц измерения) на отрезы заданной длины (1000, 750 и 500)

    тогда уже понятно куда копать Задача раскроя

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

    mindtester
    @mindtester
    http://iczin.su/hexagram_48
    шаг значения фиксированный?
    это "1" ?

    двоичный поиск вам в руки. вы же можете предсказать значение любого
    A[n]
    как исходного массива, так и фрагмента. по отклонению можно делать вывод о наличии пропуска (или нескольких)

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

    ps SharuPoNemnogu точно!.. в общем случае, все рассуждения об арифметической прогрессии и двоичном поиске, верны для любого шага прогрессии (не только 1)
    Ответ написан
    Комментировать