Параллельный алгоритм нахождения максимума за времени с использованием процессоров

11

Мы были представлены в классе с алгоритмом нахождения максимума в массиве параллельно в временной сложности с компьютерами.O(1)n2

Алгоритм был:

Дан массив A длины n:

  1. Создайте массив флагов B длиной n и инициализируйте его нулями с компьютерами.n
  2. Сравните каждые 2 элемента и напишите 1 в B по минимальному индексу с компьютерами.n2
  3. найти индекс с 0 в A с компьютеров.n

Лектор дразнил нас, что это можно сделать с компьютерами и с сложностью времени.nlognlogn

После долгих раздумий я не мог понять, как это сделать. Любая идея?

Гил
источник

Ответы:

9

Разделите ваш исходный массив на блоков длины . Поместите каждый процессор, отвечающий за каждый блок, и найдите максимум, используя обычный алгоритм во времени . Теперь нам нужно вычислить максимум массива длины . Соедините элементы в пару и вычислите попарные максимумы, чтобы уменьшить размер массива вдвое. Повторите это раз, чтобы найти максимум всего массива.n/lognlognlognn/lognlogn

Эта же идея также показывает, что вы можете вычислить максимум параллельно в постоянное время, используя компьютеров для каждого . (Упражнение.)n1+ϵϵ>0

Юваль Фильмус
источник
Цель состояла в том, чтобы найти максимум за время , а не заO(1)O(logn)
NightRa
Возьмите на себя обязательство доказать нижнюю границу для числа компьютеров, умноженных на временную сложность. Ω(n)
Юваль Фильмус