Есть (очень общая) проблема, которую я рассматривал как часть проекта: вариант этой проблемы остается NP-сложным даже на графах с двумя вершинами и одним ребром, а другой вариант - NP-сложный на деревьях. Поскольку NP-твердость первого варианта, очевидно, не проистекает из формы графика, второй, вероятно, более интересен.
SCG=(V,E)S⊂VC⊂VS∩C=∅s∈S|s|Ff∈F|f|e∈EteR⊆C×F(c,f)∈Rcf
s∈SAs∑f∈As|f|≤|s|PrGr=(c,f)∈Rcsf∈AseDer=(c,f)∈DePre∑(c,f)∈De|f|≤te
Если вам не нужны все загрузки , чтобы маршрутизировать , но вместо того, чтобы попытаться максимизировать сумму filesizes скачанных файлов , которые являются маршрутизацией вы можете легко уменьшить подмножество-сумму к этой проблеме: у вас есть один сервер с огромным количеством пространства, один клиент, подключенный к серверу с ребром, емкость которого равна целевому значению экземпляра subset-sum, и для каждого целого числа в экземпляре subset-sum вы создаете файл одинакового размера; Затем клиент желает загрузить все эти файлы.
(Гораздо?) Более интересный вариант для этого вопроса - это случай, когда вы пытаетесь минимизировать количество ребер, емкость которых превышена - возможно, сеть, над которой мы работаем, моделирует трансатлантические интернет-кабели и заменяет кабель настолько дорого, что разница в стоимости обновления в два раза быстрее, а в три раза быстрее. Мы также говорим, что размещение файлов на серверах уже задано и не может быть изменено, поэтому мы смотрим исключительно на проблемы маршрутизации.
US⊆P(U)u∈U
s∈Su∈su
Идея состоит в том, что клиенту нужны файлы, которые являются уникальными для всех кластеров серверов, поэтому границы, соединяющие клиента с кластерами серверов, уже находятся на пределе своих возможностей (их емкость равна 1, файлы имеют размер 1). Если клиент загружает какие-либо элементы юниверса из любого кластера, ребро, соединяющееся с этим кластером, становится перегруженным. Поскольку нам требуется только минимизировать количествоиз-за перегрузок (а не из-за того, насколько мы превышаем возможности), клиент может загрузить остальные элементы юниверса, размещенные на этом кластере серверов (то есть остальные элементы соответствующего подмножества) без штрафа. Следовательно, это соответствует выбранному подмножеству. Клиент хочет загрузить все файлы в юниверсе один раз, поэтому юниверс действительно будет покрыт, и чтобы минимизировать количество перегруженных ребер, нам нужно минимизировать количество выбранных подмножеств.
Обратите внимание, что приведенная выше конструкция дает древовидный граф, так что это пример NP-трудной задачи на деревьях.