Максимальное подмножество массивов, среднее значение которых больше порогового значения

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

Пусть S = {v1, v2, v3, ..., vn} — набор из n массивов, определенных на ℝ6. То есть в каждом массиве по 6 записей.

Пусть для заданного набора массивов среднее значение измерения будет средним значением между координатами, соответствующими этому измерению, для всех элементов набора.

Кроме того, давайте определим определенное свойство P набора массивов как наименьшее значение среди всех средних значений набора (всего имеется 6 средних значений, по одному для каждого измерения). Например, если в некотором наборе в качестве среднего значения размеров измерения используется {10, 4, 1, 5, 6, 3}, то P для этого набора равен 1.

Теперь к определению задачи: вернуть максимальное количество элементов среди всех подмножеств S' множества S, таких что P(S') ≥ T, T известное пороговое значение, или 0, если такое подмножество не существует. Кроме того, выведите любое максимальное S' (такое, что P(S') ≥ T).

Резюмируя: Входы: множество S и пороговое значение T. Выход: Некоторое подмножество S' (|S'| очевидно непосредственно).

Сначала я начал пытаться придумать жадное решение, но безуспешно. Затем я перешел к подходу динамического программирования, но не смог установить рекурсию, которая решила проблему. Я мог бы немного расширить свои мысли о решении, но я не думаю, что они будут очень полезны, учитывая, как далеко я продвинулся (или не продвинулся).

Любая помощь будет принята с благодарностью!


person Gabriel    schedule 11.06.2014    source источник
comment
Этот сайт предназначен для вопросов по программированию, а не домашних заданий. Попробуйте math.stackexchange.com   -  person Marc B    schedule 11.06.2014
comment
Кажется, поддается решению динамического программирования. Каждая подзадача будет максимальным P множества заданной мощности, которое является подмножеством заданного префикса S.   -  person Sneftel    schedule 11.06.2014
comment
@MarcB Вопрос, являющийся домашним заданием, не выходит за рамки темы, а вопрос домашнего задания не соответствует теме Математика, и, похоже, это вопрос об алгоритме, который больше актуален здесь, чем в Mathematics. Странный комментарий для 100к+ пользователей.   -  person Bernhard Barker    schedule 11.06.2014
comment
Какова граница N, количество записей?   -  person Abhishek Bansal    schedule 11.06.2014
comment
@MarcB, откуда именно вы сделали вывод, что это домашнее задание? Для справки, это не так.   -  person Gabriel    schedule 11.06.2014
comment
@Sneftel, я считаю, что мои попытки решения dp не сильно отличались от того, что вы предложили. Я еще немного подумаю над тем, что вы сказали, и вернусь к вам, если чего-нибудь добьюсь.   -  person Gabriel    schedule 11.06.2014
comment
@ user1990169, да. Будет задан набор S (в том смысле, что каждый из массивов его компонентов будет частью входных данных), а также пороговое значение T. Я забыл упомянуть, что означает n в OP. Спасибо за внимание!   -  person Gabriel    schedule 11.06.2014
comment
Язык не указан, кода нет, значит, это не программирование. это математика/теория.   -  person Marc B    schedule 11.06.2014
comment
@Gabriel На самом деле, я больше не верю в это решение. На самом деле каждая ячейка должна хранить все парето-оптимальные подмножества, и я не могу убедить себя, что это будет полиномиально ограничено.   -  person Sneftel    schedule 11.06.2014


Ответы (1)


Оценка грубой силы с помощью рекурсии будет иметь временную сложность O (2 ^ n), потому что каждый массив может либо присутствовать в подмножестве, либо нет.

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

Define Xi = { 1 if array Vi is present in the maximal subset, 0 otherwise }
Hence Cardinality k = summation(Xi) {i = 1 to n }

Кроме того, поскольку среднее значение всех измерений >= T, это означает:

d11X1 + d12X2 + ... + d1nXn >= T*k
d21X1 + d22X2 + ... + d2nXn >= T*k
d31X1 + d32X2 + ... + d3nXn >= T*k
d41X1 + d42X2 + ... + d4nXn >= T*k
d51X1 + d52X2 + ... + d5nXn >= T*k
d61X1 + d62X2 + ... + d6nXn >= T*k

Objective function: Maximize( k )

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

person Abhishek Bansal    schedule 11.06.2014
comment
Я собираюсь немного просмотреть ваш ответ, но что касается жадного ответа, который вы опубликовали несколько минут назад, вы понимаете, почему он не решает проблему правильно, верно? - person Gabriel; 11.06.2014