Algorithme parallèle pour trouver le temps maximum en utilisant processeurs

11

Nous avons été présentés en classe avec un algorithme pour trouver le maximum dans un tableau en parallèle en complexité temporelle avec ordinateurs.O(1)n2

L'algorithme était:

Étant donné un tableau A de longueur n:

  1. Créez un tableau d'indicateurs B de longueur n et initialisez-le avec des zéros avec ordinateurs.n
  2. Comparez tous les 2 éléments et écrivez 1 en B à l'index du minimum avec ordinateurs.n2
  3. trouver l'index avec le 0 dans A avec ordinateurs.n

Le conférencier nous a dit que cela pouvait être fait avec des ordinateurs et avec une complexité temporelle .nlognlogn

Après beaucoup de réflexion, je ne savais pas comment le faire. Une idée?

Gil
la source

Réponses:

9

Divisez votre baie d'origine en blocs de longueur . Mettez chaque processeur en charge de chaque bloc, et trouvez le maximum en utilisant l'algorithme habituel dans le temps . Nous devons maintenant calculer le maximum d'un tableau de longueur . Associez les éléments et calculez les maxima par paire pour réduire de moitié la taille du tableau. Répétez-le fois pour trouver le maximum de l'ensemble de la baie.n/lognlognlognn/lognlogn

La même idée montre également que vous pouvez calculer le maximum en parallèle en temps constant en utilisant ordinateurs pour chaque . (Exercice.)n1+ϵϵ>0

Yuval Filmus
la source
Le but était de trouver un maximum en temps , pasO(1)O(logn)
NightRa
Prenez la décision de prouver une limite inférieure de pour le nombre d'ordinateurs multiplié par la complexité temporelle. Ω(n)
Yuval Filmus