Si k est la taille des bits des entiers, alors vous pouvez calculer le temps Max en O(nk) .
Fondamentalement, le problème est, étant donné n , k entiers Si , trouver i,j tels que Si⊕Sj est maximum.
Vous traitez chaque comme une chaîne binaire (en regardant la représentation binaire) et créez un trie à partir de ces chaînes. Cela prend du temps .SiO(nk)
Maintenant, pour chaque , vous essayez de parcourir le complément de dans le trie que vous avez créé (en prenant la meilleure branche à chaque étape en gros), en trouvant un tel que est maximum.SjSjj′Sj⊕Sj′
Faites cela pour chaque , et vous trouverez la réponse en temps .jO(nk)
Puisque vos entiers sont bornés, cet algorithme pour max est fondamentalement linéaire, tout comme l'algorithme pour min obtenu par tri (car le tri peut être effectué en temps linéaire).
Soit dit en passant, s'il n'y avait pas de limites, vous pouvez réduire la distinction des éléments à la version min.