2012-04-10 5 views
2

a. immer eine
b. nicht mehr als n
c. einige feste Nummer
d. nicht mehr als 3Wie viele Anweisungen werden für eine O (1) -Operation in einer Liste mit n Elementen ausgeführt?

Ich wählte "nicht mehr als n", aber mein Lehrer sagte mir, dass es falsch ist. Sie gab nicht den Grund, warum es falsch war, und wenn es falsch ist, was ist die Antwort darauf?

+2

b war die einfachste Antwort als möglicher Kandidat Antwort zu beseitigen. Das würde bedeuten, dass eine Operation auf einer leeren Liste (sagen wir mal nach ihrer Größe) in nicht mehr als 0 Anweisungen ausgeführt würde ... was natürlich unmöglich ist – Robin

+0

@Robin, das davon ausgeht, dass 'nach seiner Größe fragen' ist O (1) Operation. –

+0

@KirkBroadhurst korrekt. Aber es spielt keine Rolle, welche Methode es ist. Etwas, das in nicht mehr als 0 Schritten ausgeführt wird, kann einfach nichts tun. – Robin

Antwort

5

Die richtige Antwort ist c. eine feste Nummer. Die Idee ist, dass die Operation unabhängig von der Anzahl der Elemente immer die gleiche Zeit benötigt. See constant time

+2

Hrrrrrm. _O (1) _ impliziert, dass die Operation _atmost_ einige konstante Zeit, was nur bedeutet, dass es eine konstante obere Grenze gibt - es ist nicht notwendigerweise immer genau die gleiche Anzahl von Operationen. Ich würde sagen, dass keiner von diesen ziemlich genau ist, aber heck, d) kommt dem Geist der Dinge näher. –

+0

Vereinbaren Sie mit Louis - "* höchstens * einige konstante Zeit". Ein schönes Beispiel für ein O (1), das keine konstante Zeit hat, finden Sie unter @emory-Antwort unten. –

0

Einige feste Zahl.

O(1) bedeutet konstante Zeit oder es bedeutet, dass die Ausführungszeit nicht von der Größe der Eingabe abhängt (obwohl es länger dauern kann, bis das Ende des Universums ausgeführt wird).

+0

Unter http://stackoverflow.com/a/10097498/348975 finden Sie ein Beispiel für eine O (1) -Funktion, deren Ausführungszeit von der Größe der Eingabe abhängt. – emory

0

Einige feste Zahl wäre die richtige Antwort. Sie können eine Funktion haben n-1 oder n + 1 Operationen und b)/d) wäre erfüllt, wäre aber immer noch in O (n) Zeit. O (1) Zeit erfordert, dass es eine feste Zahl C gibt, so dass die Funktion in C-Operationen unabhängig von n ausgeführt wird.

Es sollte ein Algorithmen-Tag statt ein Java-Tag sein: P

7

Die Antwort ist keines von ihnen. Die folgende Methode ist O (1).

  1. Klar ist es nicht immer einer.
  2. Es ist manchmal mehr als n.
  3. Offensichtlich ist es keine feste Zahl.
  4. Es ist immer mehr als drei.

//

public void run (List of size n) 
{ 
    for (int i = 0 ; i < 100 + (n % 100) ; i ++) 
    { 
      step () ; 
    } 
} 
+0

Schöne Antwort; Beachten Sie, dass dies nicht Θ (1) ist (nicht in konstanter Zeit/feste Zahl), aber seine * obere Grenze * ist eine feste Zahl - in diesem Fall 199 Iterationen. –

+1

Dies ist ein großartiges Gegenbeispiel. Es mag schön sein zu bemerken, dass (C) als die richtige Antwort gedacht ist und warum, obwohl es einige Ausnahmen gibt. –

+1

@KirkBroadhurst, Die obere Grenze ist eine konstante Anzahl von Operationen und die untere Grenze ist eine konstante Anzahl von Operationen, daher ist der Algorithmus Θ (1). Es kommt vor, dass die beiden Konstanten nicht gleich sind, aber das ist nicht notwendig für die Definition von Θ (1): f (n) = Θ (g (n)) wenn g (n) * k1 <= f (n) <= g (n) * k2 für einige positive k1 und k2. (Quelle: http://en.wikipedia.org/wiki/Big_O_notation#Family_of_Bachmann.E2.80.93Landau_notations) –