2010-10-22 21 views
5

Ho seguente attività:algoritmo per trovare le linee di bracketing un certo punto

Nel programma dovremmo tracciare linee su un display po 'mappata. Una serie di coppie di valori reali (ai,bi) ha definito le righe nyi = ai*x + bi. Le linee sono state ordinate nel x -interval [0, 1] nel senso che yi < yi+1 per tutti i valori di i tra 0 e n-2 e per tutti i valori di x in [0, 1]

Meno formale, le linee non toccano in verticale lastra. Dato un punto (x,y), dove 0 < x < 1, vogliamo determinare due linee che corrispondono al punto.

Come possiamo risolvere questo problema rapidamente?

risposta

1
Function bracket(Real x, Real y, Array a[1..n],b[1..n] of Reals): Returns void 
{ 
    Integer i = 1; 

    While (i<=n && (a[i] * x + b[i]) <= y, i++) 

    If (i==1 || i == n+1) 
         { Print("Not bracket exists"); 
         Exit() 
         } 
    If (a[i] * x + b[i]) == y) 
         { Print("Point lies on line",i); 
         Exit() 
         } 
    Print("Point between lines ", i-1, " and ", i); 
} 

C'è, tuttavia, una leggera presa. Vedere la seguente immagine:

alt text

direbbe che punto F è "parentesi" dalle due linee in [0,1] x [0,1] ?? Qual è la risposta corretta in questo caso?

+0

Forse una ricerca binaria sarebbe più veloce? – Dialecticus

+1

@Dialecticus Forse ho frainteso l'OP in ("Come possiamo risolvere questo problema rapidamente?"). Se "rapidamente" significa O (logn) hai ragione, se "velocemente" significa in una sola istruzione, il ciclo "while" sopra farà. Mai visto "rapidamente" prima di essere utilizzato in questo contesto :) –

Problemi correlati