Быстрое преобразование Уолша – Адамара

редактировать
Быстрое преобразование Уолша – Адамара, примененное к вектору длиной 8 Алгоритм разделения и владения для вычисления преобразования Адамара Пример для входного вектора (1, 0, 1, 0, 0, 1, 1, 0)

В вычислительной математике Адамар приказал быстрое преобразование Уолша – Адамара (FWHT h) - это эффективный алгоритм для вычисления преобразования Уолша – Адамара (WHT). Наивная реализация WHT порядка n = 2 m {\ displaystyle n = 2 ^ {m}}n = 2 ^ {m} будет иметь вычислительную сложность O (n 2 {\ displaystyle n ^ {2}}n ^ {2} ). FWHT h требует только n log ⁡ n {\ displaystyle n \ log n}n \ log n дополнений или вычитания.

FWHT h - это алгоритм разделения и владения, который рекурсивно разбивает WHT размера n {\ displaystyle n}n на два меньших WHT размером n / 2 {\ displaystyle n / 2}n / 2 . Эта реализация следует рекурсивному определению 2 m × 2 m {\ displaystyle 2 ^ {m} \ times 2 ^ {m}}{\ displaystyle 2 ^ {m} \ times 2 ^ {m}} матрица Адамара H m {\ displaystyle H_ {m}}H_ {m} :

H m = 1 2 (H m - 1 час м - 1 час м - 1 - час м - 1). {\ Displaystyle H_ {m} = {\ frac {1} {\ sqrt {2}}} {\ begin {pmatrix} H_ {m-1} H_ {m-1} \\ H_ {m-1} - H_ {m-1} \ end {pmatrix}}.}{\ displaystyle H_ {m} = {\ frac {1} {\ sqrt {2}}} {\ begin {pmatrix} H_ {m-1} H_ {m- 1} \\ H_ {m-1} - H_ {m-1} \ end {pmatrix}}.}

1/2 {\ displaystyle 1 / {\ sqrt {2 }}}1 / {\ sqrt {2}} коэффициенты нормализации для каждого этапа могут быть сгруппированы вместе или даже опущены.

последовательность упорядочена, a Также известное как упорядоченное по Уолшу быстрое преобразование Уолша – Адамара, FWHT w, получается путем вычисления FWHT h, как указано выше, и последующего переупорядочивания выходных данных.

Простая быстрая нерекурсивная реализация преобразования Уолша-Адамара следует из разложения матрицы преобразования Адамара как H m = A m {\ displaystyle H_ {m} = A ^ {m}}{\ displaystyle H_ {m} = A ^ {m}} , где A - это m-й корень из H m {\ displaystyle H_ {m}}H_ {m} .

Содержание
  • 1 Пример кода Python
  • 2 См. Также
  • 3 Ссылки
  • 4 Внешние ссылки
Пример кода Python
def fwht (a) ->None: "" "Быстрое преобразование Уолша – Адамара на месте массива a." "" H = 1, а h < len(a): for i in range(0, len(a), h * 2): for j in range(i, i + h): x = a[j] y = a[j + h] a[j] = x + y a[j + h] = x - y h *= 2
См. Также
Ссылки
Внешние ссылки

.

Последняя правка сделана 2021-05-20 11:29:04
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте