Verständnis eines median-Algorithmus Auswahl?

Ich bin derzeit lernen algorithmen in meiner Freizeit, aber habe folgende Frage während des Studiums Kapitel 3 wählen Sie () - algorithmen.

Ich verstehe, dass ich kann verwenden Sie die select () - Algorithmus zu finden, der median Anzahl (n/2-th kleinste Zahl) wenn ich mit einem array aus n zahlen.

1), aber dies ist das bit, die ich bin kämpfen, um Sie zu verstehen. Ein = [3, 7, 5, 1, 4, 2, 6, 2]. nehme an, dass das array. was ist Inhalt des Arrays nach jedem Aufruf von Partition(), und die Parameter in jedem rekursiven Aufruf von Select().

kann jemand erklären, wie arbeiten Sie dieses bitte heraus?

nachfolgend ist der pseudo-code für die 2-algorithmen.

Select(A, p, r, k) {
    /* return k-th smallest number in A[p..r] */
    if (p==r) return A[p] /* base case */
    q := Partition(A,p,r)
    len := q – p + 1
    if (k == len) return A[q]
    else if (k<len) return Select(A,p,q-1,k)
    else return Select(A,q+1,r,k-len)
}

und der zweite code ist

Partition(A, p, r) { /* partition A[p..r] */
    x := A[r] /* pivot */
    i := p-1
    for j := p to r-1 {
        if (A[j] <= x) {
            i++
            swap(A[i], A[j])
        }
    }
    swap(A[i+1], A[r])
    return i+1
}

Dem Buch, das ich verwende, ist aufgerufen Die Ableitung von Algorithmen von Anne Kaldewaij.

InformationsquelleAutor | 2012-03-05
Schreibe einen Kommentar