Mi è stato dato un esercizio purtroppo non ci sono riuscito da solo.
C'è una serie di rettangoli e un rettangolo . Utilizzando l'algoritmo di scansione del piano, determinare se R_ {0} è completamente coperto dall'insieme di R_ {1} .. R_ {n} .
Per maggiori dettagli sul principio degli algoritmi della linea di sweep vedi qui .
Cominciamo dall'inizio. Inizialmente conosciamo l'algoritmo della linea di sweep come algoritmo per la ricerca di intersezioni di segmenti di linea che richiede due strutture dati:
- un set di punti evento (memorizza i punti finali di segmenti e punti di intersezione)
- uno stato (struttura dinamica per l'insieme di segmenti che intersecano la linea di sweep)
L'idea generale: supponiamo che la linea di sweep sia una linea verticale che inizia ad avvicinarsi all'insieme di rettangoli da sinistra. Ordina tutte le coordinate dei rettangoli e memorizzale in in ordine crescente - dovrebbe prendere . Inizia dal primo punto evento, per ogni punto determina l'insieme di rettangoli che si intersecano in corrispondenza di una determinata coordinata , identifica segmenti continui di rettangoli di intersezione e controlla se coprono completamente alla coordinata x corrente . Con come albero binario prenderà . Se una parte di rimane scoperta non è completamente coperto.
Dettagli: l'idea dell'algoritmo di intersezione dei segmenti era che solo i segmenti adiacenti si intersecano. Sulla base di questo fatto abbiamo creato lo stato e lo abbiamo mantenuto in tutto l'algoritmo. Ho cercato di trovare un'idea simile in questo caso e finora senza successo, l'unica cosa che posso dire è due rettangoli si intersecano se i loro corrispondenti ed coordinate sovrappongono.
Il problema è come costruire e mantenere , e ciò che la complessità di costruzione e mantenere la è. Presumo che gli alberi R possano essere molto utili in questo caso, ma come ho scoperto è molto difficile determinare il rettangolo di delimitazione minimo usando gli alberi R.
Hai idea di come risolvere questo problema, e in particolare di come costruire ?