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

    нет, 4 ключа из 128 цифр не дают никаких основ для генерации новых
    Ответ написан
    Комментировать
  • Как организовать такое поведение?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    У вас весьма услржненный вариант Set cover. Пишите полный перебор.

    Могу лишь дать пару советов по реализации.
    Пишите рекурсивную функцию которой передается оставшиеся не распределенные блюда и список уже готовых наборов (наборы из одного блюда - тоже наборы). Пытайтесь куда-то приспособить первое нераспределенное блюдо.

    Если наборы не большие (скажем, не более четырех типов блюд) и всего блюд в заказе не много, то можно делать в тупую - перебирайте в функции все 2-3 блюда, кроме первого, двумя-тремя вложенными циклами. Потом берете типы этих блюд и смотрите, а есть ли у вас такой набор. Наборы можно хранить как список списков и искать там бинарным поиском или линейно. Или можно завести 4-х мерный массив и дополнить короткие наборы заглушкой вида "" до 4-х блюд. Такой ассоциативный набор для каждой комбинации типов блюд будет хранить есть ли такой набор и сколько он стоит.

    Если же наборы могут быть больше или всего блюд многовато и надо бы побыстрее решать, то делайте следующее:
    Для каждого типа блюд заведите список наборов, в которые такой тип входит.
    В функцию передавайте блюда, сгруппированные по типам, и уже собранные наборы. Потом циклом перебирайте какой тип набора будете собирать с первым блюдом (у вас же есть список всех подходящих наборов) и вызывайте вторую рукурсивную функцию, которой передаются несобранные блюда, уже готовые наборы, какой тип набора собирается, и собранная часть текущего набора. Функция2 будет брать следующий неиспользованный тип в текущем наборе и, если блюда такого типа у вас есть, добавлять в цикле одно такое блюдо к набору и вызываться рекурсивно. Если весь набор собран, то рекурсивно вызывайте первую функцию.
    В первой функции, помимо перебора всех наборов, после цикла, просто берите первое блюдо как само себя.

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

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Это классическая задача о рюкзаке.

    Можно составить такое ДП: F(c, k) - максимальное количество страниц, которые можно набрать из первых k книг общей стоимостью ровно c.

    База: F(0,0) = 0, F(0,*) = F(*,0) = -infinity.
    Пересчет:
    F(c, k) = max(F(c-cost[k], k-1) + pages[k], F(c,k-1))


    Это ДП приведено в википедии, например. Ответ - максимум по всем c F(c,k).

    Есть одна хитрость при реализации - можно обойтись только одной строкой этой матрицы, если вам не нужно восстанавливать весь набор книг в ответе, а только его лучшее значение (только надо поменять параметры местами - строка размером с максимальную цену). Это сократит потребление памяти в K раз, если у вас K книг. На скорость работы решения это не влияет.

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

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Ваша задача - Мультипликативный 0-1 рюкзак. Тут надо упомянуть NP и другие страшные слова, которые означают, что хорошего решения тут нет. Жадность - если подойдет какая-то аппроксимация оптимального ответа. Стоит пытаться собирать числа с самых мелких, пытаясь засунуть туда как можно большие числа.
    Метод ветвей и границ (фактически полный перебор с оптимизациями и эвристиками).

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

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Турбопаскаль может использоваться в образовательных целях. Проекты которые сейчас, пишут на Дельфи.

    VB.NET вполне может использоваться внутри, где уже есть какая-то внутренняя система на базе .Net.
    Редко нужен чистый VB.Net разработчик, обычно это совмещено с ASP.net, MS SQL, C#. Работа - в поддержке текущего легаси, интеграция с различным другим софтом.
    Но публичные серьезные сервисы на VB.net не делают, делают на .Net, C#
    Ответ написан
    Комментировать
  • Как учить программирование школьнику без денег?

    Extar93
    @Extar93
    Не нужны нам эти ваши интернеты
    А зачем курсы, чтобы что ? У вас в доступе весь Интернет и гугл, в котором открытой информации куда больше, чем закрытой и (или) платной.
    Ответ написан
    Комментировать
  • Стоит ли использовать здесь перечисления?

    Collin
    @Collin
    Стоит, так будет удобнее и понятнее.
    namespace TryEnum
    {
        enum DownloadType
        {
            Video, Audio, Custom, Unknown, Default
        }
        enum ForceIpProtocol
        {
            IPv4, IPv6
        }
        enum ProxyProtocol
        {
            HTTPS, HTTP, SOCKS4, SOCKS5
        }
    }


    А использовать вот так:
    5ed7670d68591771166057.png

    А по поводу интерфейсов... Интерфейсы не должны быть вместо классов; класс реализует интерфейс (выглядит синтаксис как наследование class ClassName : IClassName, но это не совсем наследование, там немножко другая реализация). И интерфейс нужен в том случае, если нужно реализовать полиморфизм в коде и/или что бы упростить доступ к публичным полям в классах, которые реализуют этот интерфейс.
    Например: у нас есть много классов с разными реализациями, но их всех объединяют одни и те же свойства (к приеру свойства public string Name ( get; set; ); public int Age( get; set; ); и тд...). Интерфейс в данном случае нужен для того, что бы через него мы получали доступ ко множественному поведению, при помощи разных классов, содержащих одноименные свойства, не плодя при этом код.

    Для наглядности:

    у нас есть метод Create(); в котором мы хотим создавать новых людей

    static void Create()
            {
                // empty...
            }


    Есть разные классы, которые создают Human и реализуют интерфейс IHuman

    class SimpleHuman : IHuman
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public SimpleHuman()
            {
                Name = "Generic human...";
                Age = 20;
            }
            public SimpleHuman(string name) : this()
            {
                Name = name;
            }
            public SimpleHuman(string name, int age) : this()
            {
                Name = name;
                Age = age;
            }
        }


    class CoolHuman : IHuman
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public CoolHuman()
            {
                Name = "BOB!";
                Age = 20;
            }
            public CoolHuman(string name) : this()
            {
                Name = name;
            }
            public CoolHuman(string name, int age) : this()
            {
                Name = name;
                Age = age;
            }
        }


    interface IHuman
        {
            string Name { get; set; }
            int Age { get; set; }
        }


    И теперь, благодаря реализации интерфейса в этих классах мы можем удобно использовать этот самый интерфейс, например:
    class Create
        {
            public IHuman Human { get; set; }
            public Create()
            {
                Human = new CoolHuman();
            }
            public void Hello()
            {
                Console.WriteLine("Hello, {0}. Today you are {1} years old", Human.Name, Human.Age);
            }
        }


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

    @dmshar
    Открою вам маленький секрет, который вам должны были рассказать на первой же лекции по теории алгоритмов. Если вы возьмете тот-же массив, перетасуете его и еще раз отсортируете, то велика вероятность того, что получите ответ, отличный от 28.
    И вам наверняка говорили, что O(n) - это вовсе не время и даже не количество операций, которые надо выполнить. На самом деле О - нотация показывает как изменяется количество выполнимых операций при соответствующем увеличении входных данных.
    Соответственно O(n) говорит, что с ростом объема количество операций растет (примерно) линейно, а O(n^2) - растет (примерно) квадратично.
    Если хотите удостовериться - надо проводить такой эксперимент. Берете набор данных на Х элементов, 100000 раз его тасуете и 100000 проводите сортировку. Получаете некоторую усредненное число повторений A. Потом берете набор данных на 2Х элементов и повторяете процедуру. Получаете усредненное количество операций В. И смотрите, в каком отношении находятся В и А. Вот это и есть грубая оценка О(.).
    Ответ написан
    9 комментариев
  • Какую СУБД выбрать для большого проекта?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Да любую. Большой проект понятие растяжимое и в 99.999999% случаев это завышенная оценка
    Ответ написан
    Комментировать
  • Как обрезать фото человека с определнной точки(я хочу взять глаз человека и вокруг него обрезать), что читать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Думаю надо использовать искуственный интелект да?

    Сначала нужно использовать естественный.
    Потом погуглить 2 минутки и вуаля
    Ответ написан
    Комментировать
  • Как реализовать оптимальную расстановку расписания занятий в уч. заведении?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Ну, это задача из теории расписаний - тема кандидатских и докторских диссертаций.

    Рядом еще болтается задача поиска оптимальных пар - за нее вообще дали нобелевку по экономике
    Ответ написан
    Комментировать
  • Как перенести строку в sql запросе?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Как вам удобно, так и пишите. Переносы строк в SQL это обычные пробельные символы (если, конечно, они не внутри строковых литералов).
    Ответ написан
    Комментировать
  • Взломали компьютер и требуют денег, что делать?

    Отключаете пк от интернета. переустанавливайте винду и поменьше скачивайте софт из незнакомого места. Материнскую плату сжечь невозможно
    Ответ написан
    17 комментариев
  • Алгоритм поиска кратчайшего пути через все вершины?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Это NP-полная задача. При достаточном количестве мусорных баков эффективно и быстро решить её просто нельзя.
    Важно понимать какое вам нужно решение: достаточно хорошее или оптимальное. Возможно, что для поиска оптимального решения вам просто не хватит ресурсов.
    Оптимальный маршрут ищется перебором иногда с разными оптимизациями, которые, впрочем, не сильно помогут в произвольном случае.
    Субоптимальные ищутся, к примеру, генетическими алгоритмами.

    Эта задача называется задачей коммивояжера:
    Задача коммивояжёра относится к числу трансвычислительных: уже при относительно небольшом числе городов (66 и более) она не может быть решена методом перебора вариантов никакими теоретически мыслимыми компьютерами за время, меньшее нескольких миллиардов лет.
    Ответ написан
    8 комментариев
  • Как получить вывод из консоли js в код на питоне?

    @abberati
    frontend-разработчик
    Для этого нужно понимать, что js исполняется в совершенно другой среде — в браузере, который ничего не знает о питоне (а питон ничего не знает о браузере). Единственный способ коммуникации между этими средами — сетевой протокол, для вашей задачи отлично подойдёт ajax-запрос по http.
    Ответ написан
    6 комментариев
  • Где будет располагаться структура?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Рихтер.

    Но в обычной жизни глубоко плевать. Разговор если что про тот пресловутый хайлоад и кровавый энтерпрайз
    Ответ написан
    Комментировать
  • В чем профит @property в python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Попробуйте полазить по учебникам.
    Ответ написан
    Комментировать
  • Как написать SQL?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    SELECT DISTINCT t1.eid
    FROM
        t t1
        JOIN t t2 ON t2.eid = t1.eid AND t2.key = 'patronymic' AND t2.value='Павлович'
    WHERE t1.key = 'place_award' AND t1.value = 'г.Коломна'

    И научитесь уже предоставлять исходные примеры таблиц в виде SQL, чтоб отвечающие могли быстро и без труда потестировать свои решения, а не писать из головы.
    Ответ написан
    Комментировать