"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment pouvons-nous trouver des doublons dans un tableau de nombres de 0 à n-1 dans le temps O(n) et l'espace O(1) ?

Comment pouvons-nous trouver des doublons dans un tableau de nombres de 0 à n-1 dans le temps O(n) et l'espace O(1) ?

Publié le 2024-11-08
Parcourir:893

How can we find duplicates in an array of numbers from 0 to n-1 in O(n) time and O(1) space?

Recherche de doublons dans le temps O(n) et l'espace O(1) : une explication approfondie

Le problème posé consiste à identifier les doublons éléments dans un tableau contenant des nombres allant de 0 à n-1. Le défi consiste à y parvenir efficacement, dans une complexité temporelle O(n) et en utilisant uniquement un espace mémoire constant (O(1)).

La solution présentée utilise une technique ingénieuse qui ne nécessite aucune table de hachage ni aucune autre donnée supplémentaire. structures. Au lieu de cela, il exploite les valeurs du tableau lui-même pour identifier et marquer les éléments en double.

  1. Permutation du tableau :

    La boucle interne permute le tableau basé sur la logique suivante :

    while A[A[i]] != A[i]
        swap(A[i], A[A[i]])
    end while

    Cette étape de permutation garantit que si un élément x existe dans le tableau, au moins une de ses instances sera positionnée à A[x]. Ceci est crucial pour les étapes suivantes.

  2. Identification des doublons :

    La boucle externe inspecte chaque élément A[i] :

    for i := 0 to n - 1
        if A[i] != i then
            print A[i]
        end if
    end for

    Si A[i] != i, cela signifie que i n'est pas présent à sa juste place dans le tableau. Par conséquent, il s'agit d'un élément en double et il est imprimé.

  3. Analyse de complexité temporelle :

    La technique s'exécute en temps O(n). . La boucle imbriquée a une boucle externe qui itère n fois et une boucle interne qui effectue au plus n - 1 itérations (car chaque échange rapproche un élément de sa position correcte). Ainsi, le nombre total d'itérations est limité par n*(n - 1), qui est O(n^2), mais peut être simplifié en O(n) car n*(n - 1) = n^2 - n = n(n - 1) = n*n - n

  4. Complexité spatiale Analyse :

    L'algorithme utilise uniquement un espace constant, indépendant de la taille de l'entrée. L'idée clé est que l'espace utilisé pour les permutations est déjà présent dans le tableau d'entrée. Aucune structure de stockage supplémentaire n'est requise.

  5. Remarques supplémentaires :

    • L'algorithme suppose que le tableau contient des entiers de 0 à n - 1.
    • La complexité temporelle reste la même, même en présence de doublons.
    • L'algorithme est efficace pour les petites et moyennes entreprises. tableaux. Pour les grands tableaux, des approches alternatives utilisant des structures de données telles que des tables de hachage peuvent être plus adaptées.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3