Току-що започнах да работя по проект, който включва известно оптимизиране на графика, и се притеснявам, че съм в математическите води над главата си. Чудех се дали можете да измислите някакъв хитър начин да направите следното.
Ето основните неща:
- Имате x брой времеви интервали
- Имате y брой интервюиращи от факултета
- Имате z брой кандидати, които интервюират
- x и y не трябва да са равни (може да има различен брой интервюиращи и интервюирани)
- Възможно е за времеви интервал никой да не бъде интервюиран.
- Те съставят таблица като график, където заглавията на редовете са интервюиращите (представени с числа), заглавията на колоните са времевите интервали (представени с числа), а самите клетки са кандидатите, които интервюират.
Ограничения:
- Цифрата z може да се появи само веднъж във всеки ред/колона като судоку (тъй като кандидатът не може да интервюира два пъти с един и същ интервюиращ и той/тя не може да интервюира два пъти наведнъж).
- Трябва да има точно 3 от всяко z число в цялата таблица (защото всички кандидати трябва да интервюират точно 3 пъти).
В крайна сметка ще се използва някаква формула за изчисляване на претеглен резултат за всяка валидна конфигурация, за да се определи „най-доброто“ състояние на дъската. За обяснение просто ще кажем, че това е нещо като 2a + 5b, където a и b са различни видове качества, които интервюиращите имат общи с кандидатите, но това не е важно за сега.
Опитвах се да измисля някакъв начин за генериране на всички възможни валидни конфигурации и в крайна сметка да изчисля резултата на всяка валидна конфигурация, като накрая избрах тази с най-висок резултат. Сблъсках се с някои проблеми при намирането на умен начин да го направя.
Първоначално не се чувствах умен и си помислих за грубо форсиране, но това е принципно невъзможно поради голямото разнообразие от възможности.
Можете ли да измислите някакъв по-хитър начин за мен да отрежа някои от грешните конфигурации или хитър начин просто да генерирам валидни табла за проверка на претеглени резултати?