Come risolvere questo problema algoritmico - Gopher 2

voti
0

Sto cercando di risolvere questo problema https://open.kattis.com/problems/gopher2 :

La famiglia Gopher, dopo aver scongiurato la minaccia canino, deve affrontare un nuovo predatore.

Il 𝑛 sono roditori e fori Gopher 𝑚, ciascuna ad distinte (𝑥, 𝑦) coordinate. Un falco arriva e se un Gopher non raggiunge secondi un foro in 𝑠 è vulnerabile ad essere consumato. Un buco può salvare al massimo un Gopher. Tutti i roditori correre alla stessa velocità di 𝑣. La famiglia Gopher ha bisogno di una strategia di fuga che riduce al minimo il numero dei vulnerabili>> Gopher.

t minimizza il numero di roditori vulnerabili.

L'approccio forza bruta sarebbe trovare tutte le possibili fori raggiungibili per ogni Gopher, poi trovare tutti (Gopher, foro) coppie distinte.

Esiste un algoritmo più veloce?

È pubblicato 02/12/2019 alle 23:57
fonte dall'utente
In altre lingue...                            


1 risposte

voti
1

Questo può essere formulato come un esempio della massima problema cardinalità corrispondente su un grafo bipartito.

Lasciate Al'insieme di roditori e di Bessere la serie di fori. C'è un bordo da gopher a ∈ Aal foro b ∈ Bse la distanza tra di loro è al massimo s*v, cioè la distanza massima un Gopher può essere eseguito nel tempo a disposizione.

Una soluzione consiste in un sottoinsieme di massima dimensione dei bordi in questo grafico, tale che (1) ciascuno a ∈ Aha al massimo un bordo, (2) ciascuno b ∈ Bha al massimo un bordo. I vincoli rappresentano le regole che ogni Gopher può andare solo a un buco, e ogni buca può essere inserito un solo Gopher. Il numero di roditori "vulnerabili" è allora il numero di roditori meno il numero di bordi in corrispondenza.

Il grafico prende O ( mn ) tempo di costrutto, e un accoppiamento massimo cardinalità può essere trovato in O ( mn ) tempo o meno utilizzando un algoritmo standard come Ford-Fulkerson , dove m è il numero di roditori ed n è il numero di fori.

Se questo non è abbastanza efficiente per il giudice on-line, è possibile utilizzare un algoritmo più efficiente per trovare la corrispondenza, e un modo più efficiente per trovare i bordi del grafico, ad esempio utilizzando un quadtree alla domanda che i fori si trovano a breve distanza s*vdi un gopher in meno di O ( n ) tempo.

Risposto il 03/12/2019 a 00:29
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more