Algorithmique

Mina -  
 Mina -
Bonjour,
Quelqu'un pourrais m'aider à résoudre ce question.
J'ai un tableau trié de [1..n] entiers distincts, ll manque un et un seul entier dans le tableau. je dois trouver un algorithme en O(log n) qui trouve l 'entier manquant.

Merci d'avance

1 réponse

  1. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut, il ne manque qu'un seul et unique entier dans ce tableau trié? Les entiers, il sont consécutifs de 1?
    Si c'est le cas ça peut se faire en O(n); voilà une idée de comment faire:
    tableau = [1, 2, 3, ... , n]
    Pour i de 0 à longueur (tableau)-1:
    Si tableau[i]+1 != tableau[i+1] Alors
    // Discontinuité
    Afficher "Il manque l'entier" + (tableau[i]+1)
    FinSi
    FinPour
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Mina : "je dois trouver un algorithme en O(log n)"
      gravgun : "ça peut se faire en O(n)"

      Oups ^^'

      Pour faire du O(log n) tu as la recherche par dichotomie.

      Cependant la question de gravgun est pertinente, qu'est-ce que tu entends par "ll manque un et un seul entier dans le tableau". Les entiers existent en nombre infinis, alors quel est le sous ensemble que tu manipules ?
      0
    2. ElementW Messages postés 5690 Statut Contributeur 1 293
       
      J'maitrise pas trop la notation O(x), et de l'algo j'en mange pas trop ^^
      M'enfin j'ai dit que c'était une "idée" hein :)
      0
    3. Mina
       
      Merci pour la réponse mais je cherche un algorithme en O(log n )
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020 > Mina
       
      Alors réponds à notre question, quel est le sous ensemble que tu manipules ?

      Si tu as par exemple tous les entiers entre 1 et n (sauf celui qui manque) tu sais déjà où chaque entier doit se placer. Par dichotomie tu regardes à partir de quand c'est décalé.

      En gros :

      j = n/2
      k = n/2

      Tant Que j != 1

      j = j/2

      Si tab[k] == k
      k = k-j
      Sinon
      k = k+j
      Fin Si

      Fin Tant Que

      Afficher "Il manque" k
      0
    5. Mina
       
      gravgun thnx pour l'idée KX thnx for you too.
      l ensemble est de [1..n], par exemple si j ai un tableau qui contient : 0 1 2 3 4 6 7 l'algorithme doit retourner 5.
      Avec la dichotomie ça me semble pas mal comme idée mais je trouve pas comment je pourrais faire exactement.....
      Par exemple , utilisant la même tableau , si je dévisse le tableau en deux je trouve que m=3 et t[m]=3 si je fais la comparaison
      je trouve que t[m-1]+1 = t[m]
      t[m+1] -1= t[m]
      donc je vais me déplacer ou après ??!!!!
      0