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


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)
Юваль Фильмус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.