Considerando questo pseudo-codice di un bubblesort:
FOR i := 0 TO arraylength(list) STEP 1
switched := false
FOR j := 0 TO arraylength(list)-(i+1) STEP 1
IF list[j] > list[j + 1] THEN
switch(list,j,j+1)
switched := true
ENDIF
NEXT
IF switched = false THEN
break
ENDIF
NEXT
Quali sarebbero le idee di base che dovrei tenere a mente per valutare la complessità temporale media? Ho già compiuto il calcolo dei casi peggiori e migliori, ma sono bloccato a deliberare su come valutare la complessità media del ciclo interno, per formare l'equazione.
L'equazione del caso peggiore è:
in cui il sigma interno rappresenta il ciclo interno e il sigma esterno rappresenta il ciclo esterno. Penso che dovrei cambiare entrambi i sigmi a causa della clausola "if-then-break", che potrebbe influenzare il sigma esterno ma anche a causa della clausola if nel ciclo interno, che influenzerà le azioni eseguite durante un ciclo (4 azioni + 1 confronto se vero, altrimenti solo 1 confronto).
Per chiarimenti sul termine tempo medio: questo algoritmo di ordinamento richiederà tempi diversi su elenchi diversi (della stessa lunghezza), poiché l'algoritmo potrebbe richiedere più o meno passaggi attraverso / all'interno dei loop fino a quando l'elenco è completamente in ordine. Cerco di trovare un modo matematico (non statistico) per valutare la media di quei round necessari.
Per questo mi aspetto che qualsiasi ordine abbia la stessa possibilità.