2010-10-22 6 views
5

je suit tâche:algorithme pour trouver les lignes bracketing un point

Dans le programme, nous devons tracer des lignes sur un écran peu cartographié. Un tableau de n paires de réels (ai,bi) a défini les lignes nyi = ai*x + bi. Les lignes ont été commandés dans le x -interval [0, 1] dans le sens où yi < yi+1 pour toutes les valeurs de i entre 0 et n-2 et pour toutes les valeurs de x dans [0, 1]

moins formellement, les lignes ne touchent pas la verticale dalle. Étant donné un point (x,y), où 0 < x < 1, nous voulons déterminer deux lignes qui encadrent le point.

Comment pouvons-nous résoudre ce problème rapidement?

Répondre

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); 
} 

Il existe cependant un léger accrochage. Voir l'image suivante:

alt text

Voulez-vous dire que le point F est "entre crochets" par les deux lignes [0,1] x [0,1] ?? Quelle est la bonne réponse dans ce cas?

+0

Peut-être qu'une recherche binaire serait plus rapide? – Dialecticus

+1

@Dialecticus J'ai peut-être mal compris le PO ("Comment pouvons-nous résoudre ce problème rapidement?"). Si le "rapidement" signifie O (logn) vous avez raison, si "rapidement" signifie en une seule instruction, la boucle "while" ci-dessus fera l'affaire. Jamais vu "rapidement" avant utilisé dans ce contexte :) –

Questions connexes