Vai al contenuto principale
← OlimpiApp Olimpico

Informatica · Ordinamento

Permutazioni che massimizzano gli scambi dell'heapsort (n=8)

Il seguente heapsort ordina in senso crescente un array $A$, prima costruendo uno max-heap e poi estraendo ripetutamente il massimo:

# sift_down(A, start, end): fa scendere A[start] scambiandolo col figlio
# maggiore finché non è più piccolo di un figlio; ogni scambio A[i] con A[j]
# conta come UNO scambio

for start from n//2 - 1 down to 0:
    sift_down(A, start, n-1)          # costruzione dello heap iniziale

for end from n-1 down to 1:
    swap(A[0], A[end])                # sposta il massimo in fondo: 1 scambio
    sift_down(A, 0, end-1)

Per quanti array (permutazioni di $\{1,\ldots,8\}$) usati come array di partenza, il numero totale di scambi (costruzione più estrazione) raggiunge il valore massimo possibile su tutta l'esecuzione?

La tua risposta

Vanno bene sia 3,14 sia 3.14.