Traitez le plus petit ou l'élément le plus grand, selon lequel est plus proche (en valeur, pas l'index) de l'élément de départ, puis traitez simplement les éléments restants vers la droite ou vers la gauche (selon que nous avons traité le plus petit ou le plus grand élément ).
Alors, donné 4,9,10,11,19
commençant par 10
:
La distance de 10
au plus petit élément 4
est 6, la distance de 10
au plus grand élément 19
est 9, alors passez à 4
.
Traitez ensuite les éléments restants dans l'ordre trié - 9, 11, 19
.
Cela nous donne 10 -> 4 -> 9 -> 11 -> 19
, qui coûte 6 + 5 + 2 + 8 = 21
.
Cela peut être fait dans O(n)
.
Noter:
Il convient de noter que tant que nous nous déplaçons d'abord vers le côté le plus proche, puis vers l'autre côté (quel que soit les éléments que nous traitons quand, tant que nous ne changeons pas de direction plus d'une fois), nous obtiendrons un résultat optimal .
C'est pourquoi 10 -> 9 -> 4 -> 11 -> 19
donne aussi 21
.