2013-11-14 2 views
4

Мне нужно разработать алгоритм для решения следующей задачи:Какой тип алгоритма будет уместен здесь?

Рассмотрим прямую L в плоскости. Конечное множество Т мишеней расположено над линией L, а конечное множество S беспроводных датчиков расположено ниже линии L. Датчик s может контролировать цель t тогда и только тогда, когда евклидово расстояние между s и t не более один. Предположим, что каждый датчик s ∈ S имеет положительную стоимость c (s), и каждая цель t ∈ T может контролироваться по меньшей мере одним датчиком в S. Рассмотрим, что подмножество S0 датчиков в S. S0 считается крышкой, если каждый Цель в Т покрывается, по меньшей мере, одним датчиком в S0. Стоимость S0 - это общая стоимость датчиков в S0. Цель состоит в том, чтобы вычислить покрытие S0 минимальной стоимости. Пожалуйста, разработайте алгоритм полиномиального времени и напишите программу для его реализации.

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

+0

Это проблема с «вершинной крышкой»? – MxyL

+3

Пожалуйста, используйте более описательное название, чтобы оно было полезно другим. –

ответ

3

Посмотрите здесь http://www.pressingquestion.com/3830657/Computing-Minimum-Cost-With-Using-Dynamic-Programming. Это вопрос, очень похожий на ваш. Решение этого вопроса указывает на то, что ваш вопрос NP-Hard, а не полиномиальный. Однако, если вы слегка измените свой вопрос таким образом, чтобы эти цели были на линиях, а не выше линии, то вы можете использовать способ динамического программирования для его решения. Подробности указаны в ссылке.

Если ваш вопрос не изменен, и вы все еще хотите использовать полиномиальное решение, то вам может потребоваться предположение, что датчики размещены в разрешенном пути . В этом случае вы можете использовать подход divide-and -quer. Отсортируйте все датчики в направлении линии (предположим, что линия L является осью x, затем сортируйте датчики по оси x), а затем разделите их на середину. Когда вы делите, вам нужно рассуждать о тех точках, координата которых находится около (не более 1) от того места, где вы делите очень тщательно. Если слишком много точек, алгоритм не будет полиномиальным, и поэтому требуется разреженное предположение.

+0

Это очень интересная ссылка, потому что я помню, как писал этот текст в stackoverflow. Я не могу найти его там с Google, но поиск этого текста находит как вашу ссылку, так и http://www.rqna.net/qna/iixzzr-computing-minimum-cost-with-using-dynamic-programming-closed. html - это первый раз, когда я слышал об одном из этих сайтов. Поиск google по вопросу в верхней части ссылки дает мне представление результатов поиска начала его как самого высокого голосуемого вопроса, но ссылка на результаты поиска не идет к вопросу. Кто-нибудь знает, что это за сайты? – mcdowella

+0

Если вы следуете http://stackoverflow.com/questions/13189050/computing-minimum-cost-with-using-dynamic-programming, вы можете видеть, что вопрос был модерирован из StackOverflow. FWIW Я не думаю, что важно, чтобы цели были на линии: каждая цель порождает интервал на линии, где центр может ее увидеть, и будет работать такой же подход динамического программирования - на самом деле моя единственная неопределенность заключается в том, есть более быстрый жадный подход, который также будет работать. – mcdowella

+0

@ mcdowella Я так не думаю. Когда некоторые цели находятся рядом с линией, а некоторые другие находятся далеко (но не более 1) от линии, то то, что может покрыть сенсор, не гарантируется как диапазон, а вместо этого набор, который усложняет задачу , Я думал, что простой подход с DP будет работать с первого взгляда, но позже я нашел это неправильно. – jeffrey

Смежные вопросы