Der Unterschied zwischen basic binären Suche für die Obere Grenze und untere Grenze?

In dem Artikel http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binarysearch-Methode, bespricht die Autorin die binäre Suche. Er macht einen Unterschied zwischen der Suche nach dem niedrigsten Wert, wo etwas wahr ist, und der höchste Wert, wo etwas falsch ist.
Das array durchsucht werden, sieht etwas aus wie:

false false false true true

Ich bin neugierig, warum diese beiden Fälle sind unterschiedlich. Warum können Sie nicht einfach finden, die niedrigsten Wert, welcher true ist, dann subtrahieren eines zu finden, der höchste Wert, der falsch ist?

Edit2: Ok, also verstehe ich das untere vs. Obere Schranke. Nun, ich habe Schwierigkeiten zu verstehen, bei der Suche für die kleinste Ganzzahl, die größer oder gleich der Abfrage, warum können wir nicht einfach ändern if(mid>query) zu if(mid>=query) haben und es tun untere statt Obere Schranke.

Edit: Hier ist was in dem Artikel hieß es:

"Jetzt bekommen wir endlich den code implementiert die binäre Suche wie beschrieben in diesem und dem vorherigen Abschnitt:

binary_search(lo, hi, p):
   while lo < hi:
      mid = lo + (hi-lo)/2
      if p(mid) == true:
         hi = mid
      else:
         lo = mid+1

   if p(lo) == false:
      complain                //p(x) is false for all x in S!

   return lo         //lo is the least x for which p(x) is true

...

Wenn wir wollten, um die letzten x, für die p(x) ist falsch, wir würden ausdenken (mit einer ähnlichen Begründung wie oben), so etwas wie:

binary_search(lo, hi, p):
   while lo < hi:
      mid = lo + (hi-lo+1)/2    //note: division truncates
      if p(mid) == true:
         hi = mid-1
      else:
         lo = mid

   if p(lo) == true:
      complain                //p(x) is true for all x in S!

   return lo         //lo is the greatest x for which p(x) is false

."

Gut, im vorausgesetzt, dass die binäre Suche impliziert der Satz in etwa so aussieht wie falsch .... false true ... true egal, was
Der Artikel im bezieht, impliziert, dass dies der Fall ist, wenn wir uns binäre Suche; ich glaube, das ist auch eine Notwendigkeit für die binäre Suche, um auch auf die situation.
sicher, aber konnte Sie leicht überprüfen, mit wie if(lo==0&&works(lo)==true)return false?

InformationsquelleAutor John Targaryen | 2015-02-08

Schreibe einen Kommentar