Angenommen, ich habe eine ansteigende Sequenz von Ganzzahlen ohne Vorzeichen C[i]
. Wenn sie zunehmen, werden sie wahrscheinlich immer mehr Bits einnehmen. Ich suche nach einer effizienten Bedingung, basierend auf zwei aufeinander folgenden Elementen der Sequenz C[i]
und C[i+1]
(Vergangenheit und Zukunft sind nicht beobachtbar), die wahr entweder genau oder ungefähr einmal für jedes Mal evaluieren wird, wenn die Anzahl der erforderlichen Bits zunimmt .Effiziente Bedingung für zunehmende Größe in Bits
Eine offensichtliche (aber langsam) Wahl der bedingt ist:
if (ceil(log(C[i+1])) > ceil(log(C[i]))) ...
und ebenfalls alles, was die Anzahl von führenden Null-Bits mit speziellem CPU-Opcodes (viel besser, aber immer noch nicht gut) berechnet.
Ich vermute, es kann eine schöne Lösung mit einem Ausdruck nur bitweise oder und bitweise und auf die Werte C[i+1]
und C[i]
. Irgendwelche Gedanken?
möglich Duplikat [Finden höchstwertige Bit (am weitesten links), die in einem Bit-Array gesetzt] (http://stackoverflow.com/questions/2589096/find-most-significant -Bit-ganz links-das-ist-ist-in-einem-Bit-Array gesetzt) – kennytm
Bitte nicht als Dublette kennzeichnen! Ich frage nach einem Problem, das weniger allgemein ist und möglicherweise eine bessere Lösung hat. –