Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2012, 14:46   #1
smishel
Новичок
Джуниор
 
Регистрация: 21.11.2012
Сообщений: 5
Сообщение Задача о минимальной стоимости закупки на С/С++

Дано:

Имеется 10 поставщиков и 10 товаров. Каждый поставщик поставляет все товары, но у каждого поставщика разные цены на товары.

Найти: 2 или 3 поставщика (или в общем виде 2<N<10) у которых суммарная закупка этих 10 товаров (по 1 шт.) будет иметь минимальную стоимость.
smishel вне форума Ответить с цитированием
Старый 21.11.2012, 15:37   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

О, интересно. Как понимаю, речь идёт о том, что нужно выбрать не более N прейскурантов из M так, чтобы сумма закупки K позиций была минимальна?
Простейший вариант - полный перебор по всем сочетаниям из M по N. Время (при M>>N) - O(K*M^(N+1)). При M=K=10 это, впрочем, достаточно мало, чтобы не искать лучшего алгоритма.
Дальше мысли вслух.
Можно ли в среднем случае отсечь значимую часть вариантов? Для каждого товара у нас есть упорядоченный список продавцов с ценами. Это позволяет быстро (за O(K*M)) узнать оценку снизу для цены покупки при выкидывании произвольного набора торговцев. Если эта оценка превышает уже найденный вариант - все варианты, выкидывающие этот набор, можно не рассматривать.
Другое направление. Пусть у нас есть множество всех сочетаний из M по N. Возможность перейти от одного сочетания к другому заменой одного столбца создаёт на этом множестве граф переходов. Пусть S - оптимальное решение, а P - "пессимальное" решение, такое, что S достижимо из него переходами, уменьшающими стоимость. Такие переходы выделяют в графе направленный подграф, число вершин в котором, вообще говоря, меньше общего числа вершин графа. К сожалению, не очевидно, каким образом быстро найти P.
Abstraction вне форума Ответить с цитированием
Старый 21.11.2012, 15:47   #3
smishel
Новичок
Джуниор
 
Регистрация: 21.11.2012
Сообщений: 5
По умолчанию Простой перебор даже в матрице 10x10 - это очень много!

Оценка перебора привела к следующим параметрам:

Нужно отобрать, к примеру 3 из 10 поставщиков.

Число вариантов= 120

И посчитать все варианты сумм 10 позиций из 30 вариантов (3 строки по 10 вариантов) = 30 045 015

Итого: 30 045 015 * 120 = 3 605 401 800 вариантов перебора.

Меня это число слегка пугает. А вас?

Последний раз редактировалось smishel; 21.11.2012 в 15:51.
smishel вне форума Ответить с цитированием
Старый 21.11.2012, 15:50   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Оценка перебора привела к следующим параметрам:
господи(
2 массива 10 на 10
и 2 на 10
считаем в первом суммы по строкам и складываем во второй в 1 строку номер во вторую сумму
сортируем второй массив по возрастанию по второй строке
забираем 2 первых или 3 или сколько там нужно первых столбца(номер и сумму соответственно)
откуда тут
Цитата:
3 605 401 800 вариантов перебора.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 21.11.2012, 15:54   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
И посчитать все варианты сумм 10 позиций из 30 вариантов (3 строки по 10 вариантов) = 30 045 015
Как? У нас есть (уже выбранные) 3 торговца. Для каждого товара, находим минимум из 3 величин и прибавляем к сумме. Всё, за ~100 инструкций получили сумму для данного сочетания. Умножить на 120.

Вообще, можно хотя бы для случай 4 торговцев, 4 товаров и n=2 пример входных данных и результата? Для приведения понимания задачи всеми участниками к единому знаменателю.

Последний раз редактировалось Abstraction; 21.11.2012 в 15:56.
Abstraction вне форума Ответить с цитированием
Старый 21.11.2012, 16:27   #6
smishel
Новичок
Джуниор
 
Регистрация: 21.11.2012
Сообщений: 5
По умолчанию Прикрепил

Прикрепил табличку с примером поставщики - цены
Изображения
Тип файла: jpg 4x4n2.jpg (21.3 Кб, 108 просмотров)
smishel вне форума Ответить с цитированием
Старый 21.11.2012, 16:29   #7
smishel
Новичок
Джуниор
 
Регистрация: 21.11.2012
Сообщений: 5
По умолчанию

Мы хотим выбрать 2-х торговцев, у которых закупить товары
smishel вне форума Ответить с цитированием
Старый 21.11.2012, 16:37   #8
smishel
Новичок
Джуниор
 
Регистрация: 21.11.2012
Сообщений: 5
По умолчанию Да, согласен! Вы правы.

До поиска минимума из 3-х, я как то не до пер. Это меняет всё!
Вопрос снят. Спасибо ГИГАНТСКОЕ!
smishel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна программа позволяющая прогнозировать оптимальный объем закупки товара A.i.r.a.t Фриланс 5 05.07.2012 22:00
Алгоритм поиска потока минимальной стоимости(C) fangb31 Помощь студентам 6 31.05.2012 10:43
код для транспортной задачи на PascalАВС методом минимальной стоимости Настёнок Помощь студентам 0 23.12.2011 01:43
Pascal метод минимальной стоимости The_Joker Помощь студентам 2 08.10.2011 18:25
Поиск минимальной стоимости GBTA Общие вопросы C/C++ 1 10.07.2010 11:17