Problema di copertura (trasmettitore e ricevitore)


14

Provo a risolvere il seguente problema di copertura.

Esistono trasmettitori con area di copertura di 1 km e ricevitori. Decidi in che tutti i ricevitori sono coperti da qualsiasi trasmettitore. Tutti reveivers e TRASMETTITORE sono rappresentati dal loro ed coordinate.nnO(nlogn)Xy

La soluzione più avanzata che posso venire con prende . Per ogni ricevitore ordinare tutti i trasmettitori in base alla loro distanza dal ricevitore corrente, quindi prendere il trasmettitore con la distanza più breve e questa distanza più breve dovrebbe essere entro 0,5 km.O(n2logn)

Ma l'approccio ingenuo sembra molto meglio nella complessità temporale . Calcola solo la distanza tra tutte le coppie di trasmettitore e ricevitore.O(n2)

Non sono sicuro di poter applicare algoritmi di ricerca intervallo in questo problema. Ad esempio, kd-trees ci consente di trovare tali intervalli, tuttavia non ne ho mai visto un esempio e non sono sicuro che esista un tipo di ricerca di intervalli per i cerchi.

La data complessità presuppone che la soluzione dovrebbe essere in qualche modo simile all'ordinamento.O(nlogn)


1
Se il tempo previsto va bene, penso che potresti costruire un k d -tree sui trasmettitori (prendendo il tempo O ( n log n ) ), e quindi eseguire una query del vicino più vicino per ciascun ricevitore (prendendo una media di O ( log n ) tempo per ciascun ricevitore). Questo dovrebbe essere un trucco, ma presumo che tu abbia bisogno della complessità del caso peggiore. Sembra che ci sia alcuni trucchi per aumento di velocità quando si esegue più vicino multiplo query prossimo in un k d -tree. O(nlogn)KdO(nlogn)O(logn)Kd
utdiscante

1
Immagino che un algoritmo di sweep line possa fare il trucco: ordinare entrambi i trasmettitori e i ricevitori in base alle coordinate x e scorrere l'elenco. È essenziale una gestione intelligente dell'insieme di trasmettitori validi.
Raffaello

@Raphael, puoi per favore elaborare un po 'di più, sembra che sarà molto lento nel peggiore dei casi.
com

1
Penso che valga la pena dare un'occhiata all'algoritmo di Fortune per calcolare un diagramma di Voronoi nell'aereo. Funziona in , e dato un diagramma Voronoi, il tuo problema diventa facile. O(nlogn)
Syzygy,

Risposte:


4

È possibile utilizzare il diagramma Voronoi, insieme alla struttura dei dati di Kirkpatrick per risolvere questo problema.

Come suggerito da Raffaello e Syzygy, è possibile utilizzare l'algoritmo di Fortune (sweepline) per creare il diagramma Voronoi. Peggior tempo: .O(nlogn)

Il diagramma Voronoi avrà un gruppo di poligoni, ognuno contenente un trasmettitore. Qualsiasi punto all'interno del poligono è il più vicino a quel trasmettitore. Pertanto, se riesci a scoprire quale poligono contiene il ricevitore, puoi trovare il trasmettitore più vicino ad esso scoprendo in qualche modo in quale poligono si trova. Successivamente, controlli se quel trasmettitore si trova entro .1 km

Per determinare quale poligono Voronoi contiene il ricevitore, devi prima triangolare ciascun poligono nel diagramma. Ora hai una maglia triangolare. Successivamente si utilizza la struttura dei dati di Kirkpatrick per individuare qualsiasi triangolo contenente un dato punto nel tempo , nel peggiore dei casi. Costruire la struttura dei dati di Kirkpatrick prende il caso peggiore O ( n log n ) . Una volta che conosci il triangolo, conoscerai il poligono che lo contiene e quindi il trasmettitore più vicino. Fare questo per tutti i ricevitori sarà O ( n log n ) , nel peggiore dei casi.O(logn)O(nlogn)O(nlogn)

Ogni cella in un diagramma di Voronoi è un poligono convesso, possibilmente illimitato.

...

Il numero di vertici [di un diagramma di Voronoi di n siti] V ≤ 2n-5

- www.cs.arizona.edu

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.