2016-11-17 4 views
2

Étant donné un ensemble de N segments de ligne horizontaux disjoints (parallèles à l'axe X) de longueur variable et de distances perpendiculaires variables, nous devons placer des nombres minimaux de disques d'unité qui recoupent au moins un segment de ligne ou un disque d'unité de sorte que l'union des segments de ligne et des disques soit connectée. Existe-t-il un algorithme existant ou tout ce que je peux utiliser pour résoudre ce problème?Couverture de N segments de ligne avec des disques unitaires

+0

Eh bien, il s'agit d'un cas spécial de Hitting Set, donc vous pouvez le formuler et le résoudre comme ça, mais c'est un problème NP-difficile. Il est possible qu'un algorithme plus rapide (même poly-temps) existe qui exploite mieux les propriétés de votre problème (par exemple, si un disque rencontre une ligne à y1 de x11 à x12> x11 et une autre ligne à y2> y1 de x21 à x22> x21, alors il frappe nécessairement toutes les lignes contenant un point à l'intérieur du carré (max (x11, x21), y1, min (x12, x22), y2))). –

+0

Pouvez-vous s'il vous plaît expliquer la solution plus? Il serait également utile d'obtenir une solution optimale ou (1+ e) approximative pour cela. – Coder404

+0

Je crains qu'une telle garantie de qualité d'approximation ne soit en dehors de mon domaine d'expertise. La formulation de l'ensemble de frappe est évidente; Si vous souhaitez incorporer l'observation sur les lignes pouvant être touchées, il est facile de le faire dans un algorithme de branchement et de liaison. –

Répondre

0

La recherche d'une solution optimale est probablement NP-difficile, comme le dit @j_random_hacker. Mais peut-être qu'un algorithme glouton produit une approximation raisonnable.

Triez vos segments par leur extrémité gauche et traitez les segments dans cet ordre, de gauche à droite. À tout moment, vous disposez d'un ensemble de segments et de disques connectés à gauche du segment actuel non encore incorporé s. Recherchez l'objet (segment ou disque) le plus proche de l'extrémité gauche de s. Supposons que cette distance est d. Ensuite, connectez s par une séquence de disques de plafond (d/2) le long de la ligne en réalisant cette distance minimale d. s est maintenant incorporé, et vous pouvez passer au segment suivant.

On pourrait facilement créer des exemples où cela fonctionne mal, mais il y a un peu de place pour améliorer via heuristiques.

+0

Il serait utile d'obtenir une solution optimale ou (1+ e) approximative pour cela. Pouvez-vous suggérer comment je peux améliorer la technique gourmande. – Coder404

+1

(1 + eps) peut encore être difficile, car il s'agit d'un problème de couverture, et dans de nombreuses versions, seules des approximations approximatives sont disponibles. Par exemple, dans "Points de couverture par unité de disques de localisation fixe" [PDF download} (https://pdfs.semanticscholar.org/26b5/aa92a34231094d2090f10219d24d8410f58a.pdf), une 4-approximation est atteinte. –