В вычислительной математике преобразование Уолша–Адамара, упорядоченное по Адамару ( FWHT h ), является эффективным алгоритмом для вычисления преобразования Уолша–Адамара (WHT). Наивная реализация WHT порядка имела бы вычислительную сложность O ( ) . FWHT h требует только сложений или вычитаний.
FWHT h — это алгоритм «разделяй и властвуй» , который рекурсивно разбивает WHT размером на два меньших WHT размером . [1] Эта реализация следует рекурсивному определению матрицы Адамара :
Коэффициенты нормализации для каждого этапа могут быть сгруппированы или даже опущены.
Упорядоченное по последовательности , также известное как упорядоченное по Уолшу, быстрое преобразование Уолша–Адамара, FWHT w , получается путем вычисления FWHT h, как указано выше, и последующей перестановки выходных данных.
Простая быстрая нерекурсивная реализация преобразования Уолша–Адамара следует из разложения матрицы преобразования Адамара как , где A — корень степени m из . [2]
def fwht ( a ) -> None : """Быстрое преобразование Уолша–Адамара на месте для массива a.""" h = 1 while h < len ( a ): # выполнить FWHT 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 # нормализовать и увеличить a /= math . sqrt ( 2 ) h *= 2