Помогите рещить задачу линейного программирования
Создана: 11 Мая 2013 Суб 16:05:24.
Раздел: "Нужна помощь"
Сообщений в теме: 23, просмотров: 2499
-
Всем привет!
Дано собственно:
10 кандидатов, 7 предметных областей.
Ни один из какндидатов не разбирается во всех семи областях одновременно. Можно представить в виде бинарной матрицы (10 строк, 7 столбцов), где "1" означает, что кандидат разбирается в данной области, "0" - нет :
1234567
(к1) 1010100
(к2) 0010000
........
(к10) 1100100
Как найти номера кандидатов, которых необходимо принять на работу, чтобы при этом все предметные области были перекрыты их знаниями с наименьшим числом дублирования знаний. Все кандидаты готовы работать за одну и ту же ЗП. Количество нанятых кандидатов не имеет значения. Главное чтобы было наименьшее кол-во дублируемых знаний у кандидатов. -
Спасибо, вижу. Я допустил ошибку. Думаю, она поправима, если в алгоритм добавить условие "IF" (если), в момент отбора, "зачисления" очередного кандидата, проверив его области знания "на покрытие" знаний ранее отобранных кандидатов с возможной, при этом, их "отбраковкой".
С поправками получается так:
Изначально кандидатам "прикрепим бейджики с номерами".
Вычислим количество "единиц" у каждого кандидата, затем отсортируем этих кандидатов по количеству "единиц" и начнем рассматривать кандидатов для приема на работу с тех, у кого этих "единиц" меньше всего. Очередной кандидат принимается бы на работу, если бы его знания могли бы "закрыть" хотя бы одну предметную область.
При этом проверяем его знания предметных областей с уже ранее принятыми (отобранными) кандидатами. Если он, своими знаниями полностью «покрывает» знания ранее отобранного, то тому отобранному, – «до свидание, мы Вас больше не задерживаем» и продолжаем проверять с оставшимися уже отобранными кандидатами.
С его зачислением, эта(и) предметная (ые) область(и) считается закрытой. Прием кандидатов останавливается, когда все предметные области будут закрыты.
"Отобрать у принятых кандидатов" их бейджики.
"Банка" с бейджиками и будет итогом.
Количество действий приближается к простому перебору и на таких маленьких значениях как 10 и 7 может быть и лучше будет просто перебрать. -
Мне нравится как вы мыслите. Но, к сожалению, и этот алгоритм не даёт правильного решения:
контрпример
К1: 1001000
К2: 0100100
К3: 0010010
К4: 1000001
К5: 1110000
К6: 0001111
К7-10: 0000000
Вам не хватает чуть-чуть самокритичности. Дело в том, что мало просто изобрести решение. Нужно проверить своё решение на корректность. Для настоящего учёного самым первым и самым придирчивым критиком всегда выступает он сам! С гибкостью ума у вас всё в порядке, развивайте самокритичность.
Что касается топикстартера, то мы скорее всего его изрядно напугали своими эвристическими методами и терминологией векторной алгебры, которой он по всей видимости не владеет. Y@shok, посмотрите моё первое письмо, там разжёванное решение. Вам осталость только написать программу на том языке, которому вас учил преподаватель. Кстати, его зовут случайно не Ирина Ивановна? :) -
Не знаю как в других вузах, а у нас требовали в том числе и программу, реализующую алгоритм. Хотя, может быть за 18 лет что-то сильно поменялось. -
Teruro писал :
Что касается топикстартера, то мы скорее всего его изрядно напугали своими эвристическими методами и терминологией векторной алгебры, которой он по всей видимости не владеет. Y@shok, посмотрите моё первое письмо, там разжёванное решение. Вам осталость только написать программу на том языке, которому вас учил преподаватель. Кстати, его зовут случайно не Ирина Ивановна? :)
Когда-то раньше владел, но как и все полезное-неиспользуемое - знания имеют свойства забываться. Мне стыдно, но такого преподавателя не припомню. Что-то с памятью моею стало :) Надо завязывать с Алкоголем.
Во всяком случае ни програмирование, ни математику данный препод у меня не вел.
У вас действительно решение выглядит очень убедительно. Спасибо.
Да осталось дело за малым. -
-