Ho seguito il corso di Coursera su Algorithms e ho escogitato un pensiero sull'algoritmo divide / conquer per il problema della coppia più vicina, che voglio chiarire.
Come da algoritmo del Prof Roughgarden (che puoi vedere qui se sei interessato): Per un dato set di punti P, di cui abbiamo due copie - ordinate in direzione X e Y - Px e Py, l'algoritmo può essere dato come
closestPair (Px, Py):
- Dividere i punti nella metà sinistra - Q e nella metà destra - R, e formare copie ordinate di entrambe le metà lungo le direzioni xey - Qx, Qy, Rx, Ry
- Consenti a closestPair (Qx, Qy) di essere punti p1 e q1
- Consenti a closestPair (Rx, Ry) di essere p2, q2
- Lascia che il delta sia il minimo di dist (p1, q1) e dist (p2, q2)
- Questo è lo sfortunato caso, lascia p3, q3 essere il più vicinoSplitPair (Px, Py, delta)
- Restituisce il miglior risultato
Ora, il chiarimento che voglio è relativo al passaggio 5. Dovrei dire questo in anticipo, che quello che sto suggerendo, è a malapena qualsiasi miglioramento, ma se sei ancora interessato, leggi avanti.
Il prof R dice che poiché i punti sono già ordinati nelle direzioni X e Y, per trovare la migliore coppia nel passaggio 5, è necessario iterare su punti nella striscia di larghezza 2 * delta, iniziando dal basso verso l'alto, e nel ciclo interno abbiamo bisogno solo di 7 comparazioni. Questo può essere migliorato con uno solo?
Come penso sia possibile sembrare un po 'difficile da spiegare in testo semplice, quindi ho disegnato un diagramma e l'ho scritto su carta e l'ho caricato qui:
Poiché nessun altro è venuto fuori, sono abbastanza sicuro che ci sia un errore nella mia linea di pensiero. Ma ora ho pensato a questo per ORE, e dovevo solo postare questo. È tutto ciò che è nella mia testa.
Qualcuno può indicare dove sto andando male?