Меню

Задача о замене оборудования python



Проблема рюкзака в Python С 3 Уникальными способами решения

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

Автор: Team Python Pool
Дата записи

Проблема рюкзака в Python С 3 Уникальными способами решения

Здравствуйте Программисты, в этой статье мы обсудим способы решения проблемы рюкзака в python с использованием различных подходов. Существуют различные подходы к решению проблемы рюкзака – жадный метод, динамическое программирование и подход грубой силы. Прежде чем мы начнем с примеров проблемы рюкзака, позвольте мне кратко рассказать вам о проблеме рюкзака.

Для заданных весов и значений n предметов мы должны выбрать наборы весов, которые могут заполнить максимальную емкость w в мешке емкости W. Этот набор должен содержать максимальное количество элементов. Ожидаемый результат-это целое число с максимальным числом

Что такое проблема рюкзака в Python?

Алгоритм задачи ранца – это конструктивный подход к комбинаторной оптимизации. Проблема в основном заключается в заданном наборе предметов, каждый из которых имеет определенный вес и ценность. Поэтому программист должен определить номер каждого элемента для включения в коллекцию таким образом, чтобы общий вес был меньше или равен заданному пределу. И кроме того, общее значение является максимальным. Он получил свое название от рюкзака фиксированного размера, который должен быть до предела заполнен самыми ценными предметами.

Практическое применение ранцевой задачи Python

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

Примечание: 0/1 задача рюкзака – это частный случай задачи рюкзака, которая не заполняет рюкзак дробными предметами.

Ограничения Для задачи рюкзака в Python

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

  • 3 ≤ N ≤ 100000;
  • 1 ≤ W ≤ 2, для каждого элемента;
  • 1 ≤ C ≤ 109, для каждого элемента.
  • 1 ≤ C ≤ 109, для каждого элемента.
  • Ограничение по времени: 1 Сек.

Где N означает количество предметов, W – вес предмета, а C-стоимость предмета.

Примечание: Пожалуйста, помните, что эти ограничения могут изменяться в зависимости от вашей постановки задачи. Вышеприведенные ограничения относятся к проблеме рюкзака с платформы CodeChef.

Различные подходы к решению проблемы рюкзака Python

Следующие 3 способа являются единственными доступными способами решения проблемы рюкзака в Python –

  • Жадный метод
  • Динамическое программирование
  • Динамическое программирование

Жадный метод

Объяснение:

Жадные алгоритмы используются для решения оптимизационных задач, то есть поиска наилучшего решения по заданным критериям. Жадные алгоритмы реализуют оптимальные локальные выборки в надежде, что эти выборки приведут к наилучшему решению. Однако решение жадного метода всегда не является оптимальным. Жадные методы хорошо работают для дробной задачи рюкзака. Однако для задачи о рюкзаке 0/1 выход не всегда оптимален.

В заключение, идея жадного метода состоит в том, чтобы вычислить соотношение (значение/вес). Сортируйте коэффициенты в порядке убывания. Выберите первое соотношение, которое является максимальным пакетом. Вместимость рюкзака может содержать этот пакет (остаток > вес). Каждый раз, когда пакет помещается в рюкзак, это также уменьшает его вместимость.

Динамическое программирование

Объяснение:

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

В таблице все возможные веса от ” 1 ” до ” W ” служат столбцами, а веса хранятся в виде строк. Состояние DP[i][j] в приведенном выше примере обозначает максимальное значение “j-веса” с учетом всех значений от “1 до i-го”. Поэтому, если мы рассмотрим ” wi “(вес в “i-й” строке), он будет помещен во все столбцы, которые имеют “значения веса > wi”. Возникают две возможности – заполнить или не заполнить “wi” в данном столбце. Если мы не заполняем “i-й” вес в столбце “j-й”, то состояние DP[i][j] будет таким же, как DP[i-1][j].Но если мы заполняем вес, то DP[i][j] будет равно значению “wi”+ значению столбца с весом “j-wi” в предыдущей строке. Поэтому мы берем максимум из этих двух возможностей, чтобы заполнить текущее состояние.

Подход Грубой Силы Для Решения Проблемы Рюкзака Python

ОБЪЯСНЕНИЕ:

Грубая сила-это очень простой подход к решению проблемы рюкзака. Для n предметов на выбор, то будет 2n возможных комбинаций предметов для рюкзака. Предмет либо выбран, либо нет. A href=”https://en.wikipedia.org/wiki/Bit#:

:text=The%20bit%20is%20a%20basic,one%20of%20two%20possible%20values.”>bit генерируется строка из 0 и 1, длина которой равна количеству элементов, то есть n. Если i-й символ битовой строки равен 0, то этот элемент не выбирается. И если он равен 1, то элемент выбирается. href=”https://en.wikipedia.org/wiki/Bit#:

:text=The%20bit%20is%20a%20basic,one%20of%20two%20possible%20values.”>bit генерируется строка из 0 и 1, длина которой равна количеству элементов, то есть n. Если i-й символ битовой строки равен 0, то этот элемент не выбирается. И если он равен 1, то элемент выбирается.

Надо Читать

  • Надо Читать
  • Функция справки Python
  • Почему Python sys.exit лучше других функций выхода?
  • Python Bitstring: Классы и другие примеры | Модуль

Вывод

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

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

Источник

Динамическое программирование — это просто. Решаем задачу о рюкзаке

Объясняем на пальцах, как использовать приёмы динамического программирования в жизни и на работе.

Вам никогда не хотелось бросить всё и уйти из дома с одним рюкзаком? Мне да, но институт, экзамены, сессия родственники, ипотека, кот — так что не вариант.

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

Обозначим задачу

У нас есть довольно вместительный рюкзак и дорогие вещи, которые можно в него положить. Но вот беда — лямки рюкзака выдерживают, скажем, четыре килограмма, не больше.

  • из ноутбука, который весит три килограмма и стоит 2 000 долларов;
  • бензопилы (ею ещё можно отмахиваться от назойливых попутчиков) — четыре килограмма мощи, которые обойдутся новому владельцу в 3 000 долларов;
  • и мини- гитары — весит килограмм, а продать её можно за 1 500 долларов.

Нам нужно выбрать вещи наибольшей общей стоимости и не забывать про хилые лямки рюкзака.

Читайте также:  Как управлять оборудованием по локальной сети

Фулстек-разработчик. Любимый стек: Java + Angular, но в хорошей компании готова писать хоть на языке Ада.

Решаем вручную

Самый очевидный выход

Это полный перебор, конечно! Из трёх предметов можно составить всего восемь комбинаций. Подсчитаем стоимость для каждой и выберем самый выгодный вариант:

Пока предметов только три — вполне себе годное решение, но добавим ещё один — и вариантов станет 16, а для пяти их будет уже 32.

С добавлением каждого нового предмета число комбинаций удваивается, так что сложность такого алгоритма — O(2 n ). Это медленный способ.

Приблизительное решение

Применим так называемый жадный алгоритм: на каждом шаге добавляем в рюкзак самый дорогой предмет, пока лимит веса не превышен.

В случае с нашими предметами — одним шагом дело бы и закончилось. Мы сразу же взяли бы бензопилу за 3 000 долларов, потому что она самая дорогая. А при добавлении любого нового предмета в рюкзаке уже был бы перевес.

Было ли наше решение оптимальным? Нет, потому что гитару на пару с ноутбуком наш рюкзак тоже выдержит, но стоят они 1 500 долларов + 2 000 долларов = 3 500 долларов, что больше 3 000 долларов.

Оптимальное решение

Воспользуемся приёмами динамического программирования. Разобьём задачу на подзадачи и будем последовательно их решать. При этом на каждом следующем шаге используем результаты предыдущего.

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

1кг 2кг 3кг 4кг
гитара
бензопила
ноутбук

Таблица до заполнения

На пересечении, в ячейках, будем записывать общую стоимость предметов в рюкзаке.

Для каждого столбца (та или иная грузоподъёмность рюкзака) нужно решить: класть гитару в рюкзак или нет.

Так как гитара весит всего один килограмм, то она влезет уже на первом шаге. Поэтому в каждой ячейке первой строки напишем 1 500 — стоимость гитары.

Мы заполнили строку целиком и узнали, что промежуточный максимум для рюкзака в четыре килограмма составляет 1500 долларов.

1кг 2кг 3кг 4кг
гитара 1500 1500 1500 1500
бензопила
ноутбук

Таблица для первого предмета — гитары

На следующем этапе рассматриваем двух кандидатов — гитару и бензопилу.

В рюкзаки, рассчитанные на один, два или три килограмма, бензопилу не положить, так что оставляем там гитару и максимум стоимости вещей 1 500 долларов. А вот для случая «четыре килограмма» обновляем максимум: кладём бензопилу стоимостью 3 000 долларов.

1кг 2кг 3кг 4кг
гитара 1500 1500 1500 1500
бензопила 1500 1500 1500 3000
ноутбук

Таблица для двух предметов — гитары и бензопилы

Добавим последний предмет — ноутбук.

Для первых двух столбцов ничего не меняется, так как ничего, кроме гитары, в рюкзаки с грузоподъёмностью один и два килограмма положить не получится.

Зато в трёхкилограммовый рюкзак уже можно вместо гитары положить ноутбук — он дороже, обновляем максимум в этом столбце до 2 000 долларов.

Интереснее всего ситуация в последней ячейке: мы можем положить ноутбук, но он весит всего три килограмма, ещё один килограмм остаётся свободным.

И вот тут, наконец, пригодятся промежуточные результаты: мы узнали на предыдущих шагах максимальную стоимость для рюкзака, который выдерживает один килограмм, — она равна 1 500 долларов.

В итоге получаем ноутбук + гитара = 3 500 долларов, это больше предыдущего максимума в 3 000 долларов. Так что ответ в задаче — 3 500 долларов.

1кг 2кг 3кг 4кг
гитара 1500 1500 1500 1500
бензопила 1500 1500 1500 3000
ноутбук 1500 1500 2000 3500

Таблица для всех трёх предметов

В общем случае формула для стоимости в каждой ячейке выглядит так:

S[i, j] = max (S[i−1, j], цена i-го предмета + S[i−1, j−вес i-го предмета]),

где i — номер строки, j — столбца.

То есть на каждом шаге мы выбираем между предыдущим максимумом и суммой, которую составляют стоимость текущего предмета и максимальная цена незанятого веса.

Решим на Java

Определим класс для вещей, которые можно положить в рюкзак:

Источник

Задача о рюкзаке (ранце) python

Прошу помочь разобраться. Вместимость рюкзака — 6 (допустим, кг), необходимо вместить в него максимальное количество предметов, получив максимально выгодный результат (макс profit). Я понимаю, что в рюкзак должны попасть 1 и 4 или 2 и 3 предметы.

3 ответа 3

Задачу о рюкзаке 0-1 можно решить,используя динамическое программирование — O(n W) по времени и памяти алгоритм:

  1. Начинаем с пустого рюкзака (разрешённый вес равен полной ёмкости рюкзака— W ) и всех предметов (все n предметов доступны).
  2. Если наибольшая ценность, которую можно получить, используя все доступные предметы (индексы не более заданного), больше ценности, которую можно получить, не включая текущий предмет (с наибольшим индексом), то
    • добавляем текущий предмет в результат
    • уменьшаем разрешённый вес на величину равную весу текущего предмета
  3. Повторяем шаг №2, исключая предмет с наибольшим индексом из списка доступных предметов, пока всё ещё остались доступные предметы.

Где наибольшая ценность определяется рекуррентными соотношениями:

  • если нет доступных предметов, то наибольшая ценность равна нулю
  • если вес текущего предмета больше разрешённого веса, то результат равен наибольшей ценности без этого предмета (c оставшимися n-1 доступными предметами)

в противном случае, выбираем максимум из двух вариантов:

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

Источник

Python и динамическое программирование на примере задачи о рюкзаке

Момент настал – вы переезжаете в Сан-Франциско, чтобы стать известным дата сайентистом. Будете работать в крупной компании и скоро прославитесь. Но не всё сразу. Поначалу придётся ютиться в жилище, много меньшем, чем нынешний дом. Нужно решить, что взять с собой. Вы аналитик и намерены решить задачу эффективно. Обсудим алгоритм?

Описание проблемы

Представим, что на данный момент вы живёте в довольно большой квартире площадью 100 м 2 , а вещи занимают 50 м 2 . Вы знаете, что площадь нового жилья составит 40 м 2 и хотите, чтобы вещи занимали не более 20 м 2 . Вы любите, когда на полу есть свободное место, да и не всё можно поставить впритык друг к другу. Нужно составить список вещей, определить площадь, занимаемую каждой вещью и составить рейтинг ценности предметов. Конечная цель – максимизировать материальную ценность того, что разместится на 20 квадратных метрах.

Перечисляем предметы

Вы составили список вещей и выразили занимаемую площадь в квадратных дециметрах (1 дм 2 = 0.01 м 2 ). Каждому предмету сопоставили ценность по шкале от 0 до 100. Получилась сводка данных о 29 предметах, которую можно оформить как словарь вида <'название предмета':(площадь, ценность) >:

Готово! Теперь видно, что кровать ( ‘bed’ ) занимает 400 дм 2 , а её ценность составляет 100, игровой стол ( ‘game_table’ ) занимает 150 дм 2 квадратных метра и имеет ценность 30.

Максимазация ценности

Как максимизировать суммарную ценность объектов так, чтобы суммарная площадь не превышала 2000 дм 2 ? Можно попробовать перебрать все возможные комбинации и рассчитать суммарную ценность для каждой из комбинаций. Решение получится, если выбрать максимальную суммарную ценность для 2000 дм 2 . Но вот незадача: и комбинаторика, и теория множеств утверждают, что 29 предметов дают 2²⁹ возможных комбинаций выбора предметов.

То есть более 536 миллионов. Похоже, такой перебор займёт некоторое время. Нельзя ли быстрее?

Стоит подумать о других вариантах. Что если начать с наиболее ценного предмета, затем следующего за ним по ценности, и так до тех пор, пока не заполнятся 20 квадратных метров? Такой алгоритм явно быстрее. Но даст ли он оптимальное решение? Есть сомнения. Как быстро решить задачу и найти лучшее решение?

Примечание: описанные выше случаи соответствуют полному перебору (метод «грубой силы», англ. brute force) и жадному (англ. greedy) алгоритму.

Динамическое программирование

Соответствующий класс проблем называют задача о рюкзаке. Своё название проблема получила от конечной цели: уложить как можно большее число ценных вещей в рюкзак при условии, что вместимость рюкзака ограничена. В общем виде задачу можно сформулировать так: из заданного множества предметов со свойствами «стоимость» и «вес» требуется отобрать подмножество с максимальной полной стоимостью, соблюдая при этом ограничение на суммарный вес.

К счастью, знакомый слышал об этом классе задач и подсказал вам более разумный способ справиться с проблемой. Он объяснил, что можно рекурсивно разделить проблему на более мелкие подзадачи. Сохраняя результаты в ячейках таблицы мемоизации и используя их на следующих итерациях, вы быстро найдёте оптимальное решение. Вы как бы обменяете программную память на время. То есть воспользуетесь методом динамического программирования.

Этапы решения задачи с помощью динамического программирования

  1. Создаём словарь со списком элементов и их параметрами (площадь, ценность).
  2. Создаём списки значений площади и ценности.
  3. Используем списки для построения таблиц мемоизации.
  4. Получаем элементы из последней строки таблицы. Последняя строка таблицы мемоизации содержит оптимальное решение. Возможно, существует несколько оптимальных решений. Например, когда есть два предмета с одинаковой площадью и стоимостью или ряд предметов имеют суммарные площадь и ценность, как у другого предмета.

Рассмотрим, как реализовать этот план на практике. Первый шаг мы предусмотрительно выполнили ранее, перейдём ко второму.

Создаём списки значений площади и ценности

Разделяем списки значений исходного словаря, например, так:

Используем списки для мемоизации

Пусть n – общее число предметов, A – их максимально допустимая суммарная площадь в новом жилище (2000 дм 2 ). Составим таблицу из n + 1 строк и A + 1 столбцов. Строки пронумеруем индексом i, столбцы – индексом a (чтобы помнить что в столбцах площадь, area). То есть в качестве номеров столбцов мы рассматриваем дискретные значения площади, отличающиеся друг от друга на 1.

Вначале создаётся и заполняется таблица в виде вложенных списков. Нулевую строку и нулевой столбец заполняем нулями. Это базовый случай: когда площадь или количество элементов равны нулю, значение ячейки равно нулю. Далее таблица значений V будет заполняться строка за строкой слева направо и сверху вниз:

Если площадь текущего элемента меньше или равна площади (номеру столбца) текущей ячейки, вычисляем значение ячейки следуя правилу:

То есть выбираем максимальное из двух значений:

  1. Сумма ценности текущего предмета value[i-1] и величины элемента из предыдущей строки i-1 с площадью, меньшей на величину площади текущего предмета area[i-1] . Обратите внимание: нужно помнить, что элементы в таблице отличаются по нумерации на единицу из-за нулевой строки.
  2. Значение элемента предыдущей строки с той же площадью, то есть из того же столбца, что текущая ячейка. То же значение устанавливается в случае, если площадь текущей ячейки меньше, чем площадь текущего элемента (см. блок else )

За счёт такого подхода при одной и той же суммарной площади элементов происходит максимизация суммарной ценности.

Забираем нужные элементы из последней строки таблицы

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

Итак, мы нашли список:

Проверим суммарные площадь и ценность собранных предметов:

Получилось! Собираем вещи и отправляемся в путь (звучит песня Mamas & Paps – San Francisco).

Бонус: Тепловая карта таблицы

Тепловая карта ниже отображает рассмотренную выше таблицу. По оси абсцисс отложена доступная площадь, по оси ординат – список предметов. Цветовая шкала соответствует суммарной ценности. Можно видеть, как значения возрастают по мере продвижения по таблице снизу вверх.

Для построения использовалась библиотека matplotlib:

А тем, кто следит за нашим сериалом головоломок, динамическое программирование также поможет решить текущую задачу (головоломку о беглеце).

Источник

Русские Блоги

Алгоритм Python — жадный алгоритм для решения задачи о рюкзаке 0-1

оглавление

  • Жадный алгоритм и задача о рюкзаке 0-1
    • как поживаешь
    • 0-1 задача о ранце
  • Стратегия разрешения
  • Реализация алгоритма
    • Функция инициализации
    • Три стратегии
    • как поживаешь
    • Функция сравнения
    • Основная функция
    • Файл сценария
  • бегать
  • Вывод
  • Благодарность

Жадный алгоритм и задача о рюкзаке 0-1

Решение задачи о ранце 0-1 с помощью жадного алгоритма является классической проблемой в мире алгоритмов.Автор попытался использовать скрипт на языке Python для получения соответствующих оптимальных результатов для входных данных задачи.

как поживаешь

Жадный алгоритм, также известный как жадный метод, является распространенным методом поиска оптимального решения проблемы. Этот метод обычно разделяет процесс решения на несколько этапов, применяя жадный принцип на каждом этапе, выбирая лучший или оптимальный выбор в текущем состоянии (наиболее благоприятный выбор на местном уровне) и надеясь, что окончательный результат сложения также будет Лучшее или оптимальное решение. Каждое решение жадного метода основывается на текущей ситуации и выбирается по оптимальному принципу, без учета других возможных ситуаций в целом.

Жадный метод, как и метод динамического программирования и метод «разделяй и властвуй», должен разложить проблему и определить словесную структуру оптимального решения, но самая большая разница между жадным методом и другими методами заключается в том, что после выбора каждого шага жадного метода локальное оптимальное решение Подтверждено, что обработка с возвратом не будет выполняться, пока алгоритм не завершится. Следовательно, жадный метод может получить истинное оптимальное решение только в нескольких случаях, таких как проблема кратчайшего пути и проблема минимального остовного дерева графа. В большинстве случаев из-за недальновидности стратегии выбора жадный метод упускает истинное оптимальное решение и не дает истинного ответа на проблему. Однако жадный метод прост и эффективен, устраняет необходимость в исчерпывающих операциях для поиска оптимального решения и позволяет получить приближенное оптимальное решение, которое ближе к оптимальному решению. Обычно он используется в качестве вспомогательного алгоритма для других алгоритмов.

Основная идея дизайна жадного метода состоит из трех этапов:
(1) Создайте математическую модель, которая точно описывает проблему, включая модель, определяющую оптимальное решение.
(2) Разбейте проблему на серию подзадач и определите оптимальную структуру решения подзадач.
(3) Примените жадный принцип для определения локального оптимального решения каждой подзадачи и суммируйте глобальное оптимальное решение с локальным оптимальным решением подзадач в соответствии с моделью оптимального решения.

Определение модели оптимального решения и определение оптимальной структуры решения подзадач обычно выполняются одновременно.Модель оптимального решения обычно отражает структуру декомпозиции и режим суммирования подзадач оптимального решения. Существует множество способов декомпозиции подзадач. Некоторые проблемы можно декомпозировать шаг за шагом в соответствии с процессом решения проблемы. На каждом шаге выбирается лучшее решение на основе предыдущего шага, и задача упрощается до Для меньшей проблемы, когда завершен последний шаг решения, получается глобальное оптимальное решение. Есть и другие проблемы, которые можно разложить на несколько относительно независимых подзадач, и после решения каждой подзадачи они объединяются в соответствии с определенными правилами для получения глобального оптимального решения.

0-1 задача о ранце

Есть N предметов и рюкзак с грузом C, каждый предмет весит wi, Значение pi, Решите, какие предметы упаковать в рюкзак, чтобы сумма веса этих предметов не превышала C, общее значение максимума.
Задача о рюкзаке — это общий термин для этого типа задач комбинаторной оптимизации NP, таких как проблема загрузки грузового контейнера, проблема загрузки грузового судна и т. д., поскольку проблема возникла из того, как выбрать наиболее подходящий элемент. Он назван в честь упаковки в рюкзаке. Эта проблема подразумевает условие, при котором существует только один элемент на элемент, что означает, что каждый элемент может быть выбран только из 0 или 1, поэтому это также называется проблемой рюкзака 0-1.

Стратегия разрешения

В этой задаче есть три распространенных жадных стратегии. Первый — выбрать в соответствии с весом предмета и каждый раз выбирать предмет с наименьшим весом. Второй — выбирать в соответствии со значением элемента каждый раз, когда выбирается элемент с наибольшим значением. Третий — определение концепции плотности значений. Каждый раз, когда выбирается элемент с самым легким весом, значение плотности siОпределяется как pi/wi
В этом файле сценария Python автор инкапсулирует все три стратегии в функции. После получения соответствующих результатов сравните полученное общее значение и, наконец, выведите наиболее ценный результат.

Реализация алгоритма

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

Функция инициализации

В соответствии с введенными данными выберите, следует ли использовать набор данных по умолчанию для демонстрации, и сохранить вес, значение и общий вес в весе, цене и C соответственно, и распечатать их для проверки.

Три стратегии

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

как поживаешь

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

Функция сравнения

Сравните размер общего значения в результатах после расчета с помощью трех стратегий и верните набор результатов с наибольшим значением.

Основная функция

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

Файл сценария

В файле сценария python, помимо перечисленных выше функций, есть две строки кода для реализации операции.

бегать

Выше весь код написан, давайте посмотрим на результаты запуска файла скрипта в fish.
 python fish
Как показано на рисунке, fish показывает два результата работы с набором данных по умолчанию и набором данных, введенным вручную.

Вывод

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

Благодарность

Я многому научился у сообщества в течение всего процесса благодаря большинству пользователей сети.
Основное справочное содержание:
[1] «Удовольствие от алгоритмов» — Ван Сяохуа
[2]https://blog.csdn.net/sunny1235435/article/details/95603969.

Интеллектуальная рекомендация

Точки знаний C ++ — наследование

Дополнительные знания C ++:индекс каталога c ++ 1. Наследование 1.1 Концепция наследования Наследование — важное средство объектно-ориентированного повторного использования. Определение класса через н.

проблема развала полей

Сегодня я вспомнил проблему коллапса на полях в упругой коробке CSS3. Напомним здесь . Свернуть поле — это когда родительский элемент расположен относительно браузера, но дочерний элемент не располо.

Dockerfile

Docker состоит из трех ядер: образа, контейнера и хранилища. docker commit [options] container[repository] -a, –author = «» информация об авторе -m, —message = true сообщение о фиксац.

Операция без обратной передачи элемента управления TreeView

Сегодня я видел вопрос на форуме, в котором спрашивалось, как реализовать элемент управления TreeView для выполнения различных функций без обратной передачи. Поскольку обратная передача не требуется, .

Transform to Chessboard

An N x N board contains only 0s and 1s. In each move, you can swap any 2 rows with each other, or any 2 columns with each other. What is the minimum number of moves to transform th.

Вам также может понравиться

Генетический алгоритм Python (подробно)

Код обучения исходит из:Генетический алгоритм питона (произведен моим зятем) 1. Основная идея Генетический алгоритм основан на дарвиновском «выживании наиболее приспособленных»,Выживание с.

Начало работы с git + gitee

Нет необходимости описывать здесь цель и установку git gitee. В этой статье в основном рассказывается, как использовать команды git для выполнения хостинга кода на gitee (я немного беловатый, и я все .

Установка Oracle

монтаж Feng Ge уже отсортировал сжатый пакет,адресЗагрузите сжатый пакет вниз, декомпресс, получите папку «Oracle 11G 64-битная», следующий слой содержит Setup.exe, Runs, обратно к рабочем.

Том Ли: фьючерсы на ETH могут не подходить для ETH, но они хороши для BTC

Согласно источникам, Чикагская биржа опционов (Cboe) близка к запуску фьючерсов на Ethereum. Но Том Ли, известный биткойн-бык на Уолл-стрит, считает, что на самом деле это может быть не очень хорошо д.

дерево решений sklearn

[Гао Ман] Вероятность встречи с богиней составляет: 66,7% [Fu fu] Вероятность встречи с богиней составляет: 100,0% [Красивый мужчина] Вероятность встречи с богиней составляет: 33,3%.

Источник