L'algorithme naïf pour déterminer partir de :ABUNE
Pour , déterminez la valeur de en comparant chaque à pour
et en comptant ceux qui satisfont .B ( k ) A ( i ) A ( k ) i = 1 , … , k A ( i ) < A ( k )k = 1 , … , nB ( k )A ( i )A ( k )i = 1 , … , kA ( i ) < A ( k )
Cet algorithme compare à tous les autres ( fois), à autres, etc. donc le nombre total de comparaisons est . Mais ce n'est pas le mieux que nous puissions faire. Par exemple, en regardant , nous n'avons pas à faire de comparaisons! car il s'agit des premiers nombres naturels, et il est garanti (quelle que soit la permutation) que les nombres naturels inférieurs seront là. Et ? Au lieu de vérifier à , nous pourrions simplement vérifier . C'est:n - 1 A ( 2 ) n - 2 ( n - 1 ) ( n - 2 )A ( 1 )n - 1A ( 2 )n - 2 B(n)B(n)=A(n)-1nn-1B(n-1)A(1)A(n-2)A(n)( n - 1 ) ( n - 2 )2B ( n )B ( n ) = A ( n ) - 1 nn−1B(n−1)A(1)A(n−2)A(n)
Pour , utilisez l'algorithme ci-dessus; pour
utilisez l'algorithme inverse: déterminez en le définissant initialement sur puis en soustrayant pour chaque entrée pour inférieur à . k=nk=1,…,n2B(k)A(n)-11A(i)i=k+1,…,nA(k)k=n2,…,nB(k)A(n)−11A(i)i=k+1,…,nA(k)
Cela prendrait étapes, qui est toujours . Notez également qu'en construisant partir de , si alors . O(n2)ABB(n)=A(n)-1A(n)=B(n)+12×(n2−1)(n2−2)2=(n−2)(n−4)4O(n2)ABB(n)=A(n)−1A(n)=B(n)+1
Mais maintenant pour plus de finesse. Si nous avons droit à un espace supplémentaire ou à un tri sur place, nous pouvons trier les chiffres en les comparant. Par exemple:
∣∣∣∣ASB8904803701407332219166655∣∣∣∣
Au lieu de les vérifier tous (ou de les vérifier dans l'ordre), nous pourrions utiliser la recherche binaire pour déterminer chaque . Cependant, le tri prend encore du temps .B(k)O(nlogn)