Implementierung von C lower_bound
Basiert auf der folgenden definition gefunden hier
Gibt einen iterator zeigt auf das
erste element in der sortierten Palette
[first,last), die nicht zu vergleichen
weniger als Wert. Der Vergleich ist
mit einer operator< für die
erste version, oder comp für die zweite.
Was wäre die C gleichwertige Umsetzung von lower_bound(). Ich verstehe, dass es wäre eine Modifikation der binären Suche, aber kann nicht scheinen, um ganz lokalisieren der genauen Umsetzung.
int lower_bound(int a[], int lowIndex, int upperIndex, int e);
Beispiel:
int a[]= {2,2, 2, 7 };
lower_bound(a, 0, 1,2) would return 0 --> upperIndex is one beyond the last inclusive index as is the case with C++ signature.
lower_bound(a, 0, 2,1) would return 0.
lower_bound(a, 0, 3,6) would return 3;
lower_bound(a, 0, 4,6) would return 3;
Mein versuchter code ist unten angegeben:
int low_bound(int low, int high, int e)
{
if ( low < 0) return 0;
if (low>=high )
{
if ( e <= a[low] ) return low;
return low+1;
}
int mid=(low+high)/2;
if ( e> a[mid])
return low_bound(mid+1,high,e);
return low_bound(low,mid,e);
}
InformationsquelleAutor der Frage Shamim Hafiz | 2011-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
lower_bound
ist fast wie ein übliche binäre Suche, außer:Ja, es ist wirklich so einfach. 🙂
InformationsquelleAutor der Antwort Chris Jester-Young
Hier sind die äquivalenten Implementierungen von
upper_bound
undlower_bound
. Dieser Algorithmus ist O(log(n)) im schlechtesten Fall, im Gegensatz zu den akzeptierte Antwort, die wird O(n) im schlimmsten Fall.Beachten Sie, dass hier
high
index festgelegt istn
stattn - 1
. Diese Funktionen zurückkehren können, ein index, ein jenseits der Grenzen des Arrays. I. e., es wird wieder die Größe des Arrays, wenn der Suchbegriff nicht gefunden, und es ist größer als alle Elemente des Arrays.Den tatsächlichen C++ - Implementierung funktioniert auch für alle anderen Container. Sie finden es hier.
InformationsquelleAutor der Antwort manish_s
Den
lower_bound
undupper_bound
Funktionen in python würde wie folgt implementiert werden:InformationsquelleAutor der Antwort Pirooz
Ich weiß, dass dies ein sehr Alter post. Allerdings arbeitete ich an einem problem und ich stieß auf dieses post. Hinzufügen möchte ich, dass mein iterative version für das problem ist eine Erweiterung der letzten Antwort. Ich überprüfte diese mit der test-Fälle, die ich denken konnte. Ich angehängt habe mein code in C#.
Dieser code war die Arbeit für alle reicht. Jedoch sollte der Bereich sein, in dem der erste index auf den letzten index+1. Wenn das array der Größe N und in Anbetracht Bereich [0,N] der Suchraum wird innerhalb von [0,N). Ich weiß, dass ist ziemlich offensichtlich, aber es hat mir geholfen, die überprüfung einige Grenzfälle.
Hier ist ein test case, die ich verwendet habe:
Bedenkt, Suche element 2:
Bedenkt, Suche element 5:
Angesichts gesuchten element als 1:
Bedenkt, Suche element 5:
InformationsquelleAutor der Antwort K.G aka Confused_Coder
InformationsquelleAutor der Antwort mszlazak