Problème de couverture (émetteur et récepteur)

14

J'essaie de résoudre le problème de couverture suivant.

Il y a émetteurs avec une zone de couverture de 1 km et récepteurs. Décidez en que tous les récepteurs sont couverts par n'importe quel émetteur. Tous les récepteurs et émetteurs sont représentés par leurs coordonnées et .nnO(nlogn)xy

La solution la plus avancée avec laquelle je peux venir prend . Pour chaque récepteur, triez tous les émetteurs en fonction de leur distance à ce récepteur actuel, puis prenez l'émetteur avec la distance la plus courte et cette distance la plus courte doit être à moins de 0,5 km.O(n2logn)

Mais les regards d'approche naïve aiment beaucoup mieux la complexité du temps . Calculez simplement toutes les distances entre toutes les paires d'émetteur et de récepteur.O(n2)

Je ne sais pas si je peux appliquer des algorithmes de recherche par plage dans ce problème. Par exemple, les kd-arbres nous permettent de trouver de telles plages, mais je n'ai jamais vu d'exemple, et je ne suis pas sûr qu'il existe une sorte de recherche par plage pour les cercles.

La complexité donnée suppose que la solution devrait être en quelque sorte similaire au tri.O(nlogn)

com
la source
1
Si le temps prévu est correct, je pense que vous pourriez construire un k d -arbre sur les émetteurs (en prenant le temps O ( n log n ) ), puis effectuer une requête de voisin le plus proche pour chaque récepteur (en prenant une moyenne temps O ( log n ) pour chaque récepteur). Cela devrait faire l'affaire, mais je suppose que vous avez besoin de la pire des cas. Il semble y avoir quelques astuces pour accélérer lorsque vous effectuez plusieurs requêtes de voisins les plus proches dans un arbre k d . O(nlogn)kdO(nlogn)O(logn)kd
utdiscant
1
Je suppose qu'un algorithme de ligne de balayage peut faire l'affaire: trier les émetteurs et les récepteurs par coordonnée x et parcourir la liste. Une gestion intelligente de l'ensemble des émetteurs viables est essentielle.
Raphael
@Raphael, pouvez-vous s'il vous plaît élaborer un peu plus, il semble que ça va être très lent dans le pire des cas.
com
1
Je pense qu'il vaut la peine de jeter un coup d'œil à l'algorithme de Fortune pour calculer un diagramme de Voronoi dans l'avion. Cela fonctionne en , et étant donné un diagramme de Voronoi, votre problème devient facile. O(nJournaln)
Syzygy

Réponses:

4

Vous pouvez utiliser le diagramme de Voronoi, ainsi que la structure de données de Kirkpatrick pour résoudre ce problème.

O(nJournaln)

1 km

O(Journaln)O(nJournaln)O(nJournaln)

Chaque cellule d'un diagramme de Voronoi est un polygone convexe, éventuellement illimité.

...

Le nombre de sommets [d'un diagramme de Voronoï de n sites] V ≤ 2n-5

- www.cs.arizona.edu

Θ(v)vnnO(n)O(n)O(n)O(n)O(n)

Realz Slaw
la source