<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Katemeron</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Katemeron"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Katemeron"/>
	<updated>2026-10-23T01:36:15Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17756</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17756"/>
		<updated>2016-11-16T17:36:03Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
Вычислительная мощность алгоритма равна суммарному объему входных и выходных данных: &amp;lt;math&amp;gt;N^2 + 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на [http://cluster2.inm.ras.ru кластере ИВМ].&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации 0,016%;&lt;br /&gt;
*	максимальная эффективность реализации 92%.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессоров: &lt;br /&gt;
[[Файл:EQP8kY4D9E0.jpg|thumb|center|700px|Рисунок 2. Масштабируемость по числу процессоров. По оси ОХ отложено количество процессоров, по оси ОУ - величина производительности для разного размера матрицы.]]&lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
[[Файл:PmIAoJaqnO8.jpg|thumb|center|700px|Рисунок 3. Масштабируемость по размеру задачи. По оси ОХ отложена размерность матрицы, по оси ОУ - величина производительности для разного количества процессоров]]&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:Khm.jpg|thumb|center|700px|Рисунок 4. Масштабируемость по двум направлениям. По ОХ - количество процессоров, по ОУ - размерность матрицы, по OZ - величина производительности при изменении в двух направлениях.]]&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 5. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/1ga1fp26nztt65n/hadamard_2.c?dl=0 Исследованная реализация на языке C]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17753</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17753"/>
		<updated>2016-11-16T17:30:08Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
Вычислительная мощность алгоритма равна суммарному объему входных и выходных данных: &amp;lt;math&amp;gt;N^2 + 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на [http://cluster2.inm.ras.ru кластере ИВМ].&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации 0,016%;&lt;br /&gt;
*	максимальная эффективность реализации 92%.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
[[Файл:EQP8kY4D9E0.jpg|thumb|center|700px|Рисунок 2. Масштабируемость по числу процессов.]]&lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
[[Файл:PmIAoJaqnO8.jpg|thumb|center|700px|Рисунок 3. Масштабируемость по размеру задачи.]]&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:Khm.jpg|thumb|center|700px|Рисунок 4. Масштабируемость по двум направлениям.]]&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 5. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/1ga1fp26nztt65n/hadamard_2.c?dl=0 Исследованная реализация на языке C]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17752</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17752"/>
		<updated>2016-11-16T17:11:06Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
Вычислительная мощность алгоритма равна суммарному объему входных и выходных данных: &amp;lt;math&amp;gt;N^2 + 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации 0,016%;&lt;br /&gt;
*	максимальная эффективность реализации 92%.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
[[Файл:EQP8kY4D9E0.jpg|thumb|center|700px|Рисунок 2. Масштабируемость по числу процессов.]]&lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
[[Файл:PmIAoJaqnO8.jpg|thumb|center|700px|Рисунок 3. Масштабируемость по размеру задачи.]]&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:Khm.jpg|thumb|center|700px|Рисунок 4. Масштабируемость по двум направлениям.]]&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 5. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
[https://www.dropbox.com/s/1ga1fp26nztt65n/hadamard_2.c?dl=0 Исследованная реализация на языке C]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17492</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17492"/>
		<updated>2016-11-15T21:33:20Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
Вычислительная мощность алгоритма равна суммарному объему входных и выходных данных: &amp;lt;math&amp;gt;N^2 + 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации 0,016%;&lt;br /&gt;
*	максимальная эффективность реализации 92%.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
[[Файл:EQP8kY4D9E0.jpg|thumb|center|700px|Рисунок 2. Масштабируемость по числу процессов.]]&lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
[[Файл:PmIAoJaqnO8.jpg|thumb|center|700px|Рисунок 3. Масштабируемость по размеру задачи.]]&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:Khm.jpg|thumb|center|700px|Рисунок 4. Масштабируемость по двум направлениям.]]&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 5. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17483</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17483"/>
		<updated>2016-11-15T21:19:06Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
Вычислительная мощность алгоритма равна суммарному объему входных и выходных данных: &amp;lt;math&amp;gt;N^2 + 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации 0,016%;&lt;br /&gt;
*	максимальная эффективность реализации 92%.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
[[Файл:EQP8kY4D9E0.jpg|thumb|center|700px|Рисунок 2. Масштабируемость по числу процессов.]]&lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
[[Файл:PmIAoJaqnO8.jpg|thumb|center|700px|Рисунок 3. Масштабируемость по размеру задачи.]]&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:Khm.jpg|thumb|center|700px|Рисунок 4. Масштабируемость по двум направлениям.]]&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 5. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17482</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17482"/>
		<updated>2016-11-15T21:17:02Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
Вычислительная мощность алгоритма равна суммарному объему входных и выходных данных: &amp;lt;math&amp;gt;N^2 + 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации 0,016%;&lt;br /&gt;
*	максимальная эффективность реализации 92%.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
[[Файл:EQP8kY4D9E0.jpg|thumb|center|700px|Рисунок 2. Масштабируемость по числу процессов.]]&lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
[[Файл:PmIAoJaqnO8.jpg|thumb|center|700px|Рисунок 3. Масштабируемость по размеру задачи.]]&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 5. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17389</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17389"/>
		<updated>2016-11-15T19:27:42Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
Вычислительная мощность алгоритма равна суммарному объему входных и выходных данных: &amp;lt;math&amp;gt;N^2 + 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации 0,016%;&lt;br /&gt;
*	максимальная эффективность реализации 92%.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 2. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17108</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17108"/>
		<updated>2016-11-14T18:55:20Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
Вычислительная мощность алгоритма равна суммарному объему входных и выходных данных: &amp;lt;math&amp;gt;N^2 + 1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 2. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17104</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17104"/>
		<updated>2016-11-14T18:49:30Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 2. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17103</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17103"/>
		<updated>2016-11-14T18:49:03Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17102</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17102"/>
		<updated>2016-11-14T18:47:44Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.|thumb|center|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17100</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17100"/>
		<updated>2016-11-14T18:42:24Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[file:111.jpeg|border|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17099</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17099"/>
		<updated>2016-11-14T18:41:59Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[Файл:111.jpeg|border|500px|Рисунок 1. Граф отображает шаг, стрелками показаны пересылки данных, в узлах происходит операция присвоения значений и инверсия.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17097</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17097"/>
		<updated>2016-11-14T18:28:33Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
[[Файл:111.jpeg|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17096</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17096"/>
		<updated>2016-11-14T18:17:55Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:111.jpeg|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17095</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17095"/>
		<updated>2016-11-14T18:16:36Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:111.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17094</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17094"/>
		<updated>2016-11-14T18:15:17Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17092</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17092"/>
		<updated>2016-11-14T18:12:57Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17080</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17080"/>
		<updated>2016-11-14T16:54:18Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:untitled.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17079</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17079"/>
		<updated>2016-11-14T16:53:20Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
[[Файл:Example.jpg|thumb|center|700px|Рисунок 8. Параллельная реализация построения матрицы Адамара. Изменение производительности в зависимости от числа процессоров и размера матрицы.]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17078</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17078"/>
		<updated>2016-11-14T16:50:35Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17073</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17073"/>
		<updated>2016-11-14T16:35:13Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
Не смотря на существование недоказанной гипотезы, что существует алгоритм, способный построить матрицы Адамара, размера кратного 4, данный алгоритм вычисляет только матрицы размера степени 2.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17055</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17055"/>
		<updated>2016-11-14T15:40:56Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики производительности и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17052</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17052"/>
		<updated>2016-11-14T15:32:58Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1:32];&lt;br /&gt;
*	размер матрицы [32: 16384].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики [[Глоссарий#Производительность|производительности]] и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17028</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17028"/>
		<updated>2016-11-14T13:59:54Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [] с шагом ;&lt;br /&gt;
*	размер матрицы [].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики [[Глоссарий#Производительность|производительности]] и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации построения матрицы Адамара:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17006</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=17006"/>
		<updated>2016-11-14T12:55:36Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [] с шагом ;&lt;br /&gt;
*	размер матрицы [].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон [[Глоссарий#Эффективность реализации|эффективности реализации]] алгоритма:&lt;br /&gt;
&lt;br /&gt;
*	минимальная эффективность реализации ;&lt;br /&gt;
*	максимальная эффективность реализации .&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики [[Глоссарий#Производительность|производительности]] и эффективности выбранной реализации построения Матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости выбранной реализации разложения Холецкого:&lt;br /&gt;
*	По числу процессов: &lt;br /&gt;
*	По размеру задачи:&lt;br /&gt;
*	По двум направлениям:&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=15138</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=15138"/>
		<updated>2016-10-31T15:34:42Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
Предложенный алгоритм является рекурсивным и описывает получение матриц Адамара только порядка степени 2. На каждом следующем шаге алгоритма, новая матрица составляется из матрицы, полученной на предыдущем этапе, путем заполнения соответствующих блоков.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14499</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14499"/>
		<updated>2016-10-28T13:53:30Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14497</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14497"/>
		<updated>2016-10-28T13:52:37Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14495</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14495"/>
		<updated>2016-10-28T13:52:07Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14494</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14494"/>
		<updated>2016-10-28T13:51:42Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;2^m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14490</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14490"/>
		<updated>2016-10-28T13:49:50Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_N&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14489</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14489"/>
		<updated>2016-10-28T13:47:37Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_m&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2m}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2m} = \begin{bmatrix}&lt;br /&gt;
         H_m &amp;amp; H_m \\&lt;br /&gt;
         H_m &amp;amp; -H_m&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данным алгоритм описывает получение матриц Адамара только порядка степени 2, то есть &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; связаны соотношением &amp;lt;math&amp;gt;N = 2^m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Получение матрицы порядка &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; состоит из следующих &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; шагов:&lt;br /&gt;
&lt;br /&gt;
Шаг 1: &amp;lt;math&amp;gt;H_1 = (1);&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 2: &amp;lt;math&amp;gt;H_2 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &lt;br /&gt;
\end{pmatrix};&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаг 3: &amp;lt;math&amp;gt;H_3 = &lt;br /&gt;
\begin{pmatrix} 1 &amp;amp; 1 &amp;amp; 1 &amp;amp; 1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; 1 &amp;amp;- 1 &amp;amp; -1&lt;br /&gt;
\\1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1&lt;br /&gt;
\end{pmatrix}.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Шаг &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;: искомая матрица &amp;lt;math&amp;gt;H_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14474</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14474"/>
		<updated>2016-10-28T13:35:26Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Объем входных данных: 1.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14467</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14467"/>
		<updated>2016-10-28T13:31:09Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14466</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14466"/>
		<updated>2016-10-28T13:30:39Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Построение матрицы Адамара&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14452</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14452"/>
		<updated>2016-10-28T13:19:56Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14451</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14451"/>
		<updated>2016-10-28T13:19:36Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара&lt;br /&gt;
&amp;lt;math&amp;gt;H_{1,1} = 1&amp;lt;/math&amp;gt;;&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;;&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14443</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14443"/>
		<updated>2016-10-28T13:11:20Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений матрицы Адамара.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14438</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14438"/>
		<updated>2016-10-28T13:09:55Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14435</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14435"/>
		<updated>2016-10-28T13:08:21Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14434</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14434"/>
		<updated>2016-10-28T13:08:04Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/ PYTHON]&lt;br /&gt;
&lt;br /&gt;
Реализация WOLFRAM&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html WOLFRAM]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по [https://gist.github.com/guitarkitten/3937264 ссылке].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14433</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14433"/>
		<updated>2016-10-28T13:07:09Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;MATLAB&#039;&#039;&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com MATLAB]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;PYTHON&#039;&#039;&lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;WOLFRAM&#039;&#039;&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по ссылке[https://gist.github.com/guitarkitten/3937264].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14425</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14425"/>
		<updated>2016-10-28T13:02:59Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;MATLAB&#039;&#039;&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;PYTHON&#039;&#039;&lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;WOLFRAM&#039;&#039;&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по ссылке[https://gist.github.com/guitarkitten/3937264].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14422</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14422"/>
		<updated>2016-10-28T13:02:07Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Особенности реализации последовательного алгоритма===&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;MATLAB&#039;&#039;&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;PYTHON&#039;&#039;&lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;WOLFRAM&#039;&#039;&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по ссылке[https://gist.github.com/guitarkitten/3937264].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14419</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14419"/>
		<updated>2016-10-28T13:01:05Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
=== Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;MATLAB&#039;&#039;&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;PYTHON&#039;&#039;&lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;WOLFRAM&#039;&#039;&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по ссылке[https://gist.github.com/guitarkitten/3937264].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14418</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14418"/>
		<updated>2016-10-28T12:59:34Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Основной автор статьи: Маркова Е.А. 615 гр.&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
===1.1 Общее описание алгоритма===&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
===1.2 Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 1.3 Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
=== 1.4 Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
===1.5 Схема реализации последовательного алгоритма===&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===1.6 Последовательная сложность алгоритма===&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===1.7 Информационный граф===&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
===1.8 Ресурс параллелизма алгоритма===&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
===1.9 Входные и выходные данные алгоритма===&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===1.10 Свойства алгоритма===&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===2.7 Существующие реализации алгоритма===&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;MATLAB&#039;&#039;&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;PYTHON&#039;&#039;&lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;WOLFRAM&#039;&#039;&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по ссылке[https://gist.github.com/guitarkitten/3937264].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14414</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14414"/>
		<updated>2016-10-28T12:53:28Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Программная реализация алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&#039;&#039;&#039;1.1 Общее описание алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.2 Математическое описание алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.3 Вычислительное ядро алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.4 Макроструктура алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.5 Схема реализации последовательного алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.6 Последовательная сложность алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.7 Информационный граф&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.8 Ресурс параллелизма алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.9 Входные и выходные данные алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.10 Свойства алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.7 Существующие реализации алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;MATLAB&#039;&#039;&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;PYTHON&#039;&#039;&lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;WOLFRAM&#039;&#039;&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html]&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по ссылке[https://gist.github.com/guitarkitten/3937264].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14411</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14411"/>
		<updated>2016-10-28T12:53:06Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Программная реализация алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&#039;&#039;&#039;1.1 Общее описание алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.2 Математическое описание алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.3 Вычислительное ядро алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.4 Макроструктура алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.5 Схема реализации последовательного алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.6 Последовательная сложность алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.7 Информационный граф&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.8 Ресурс параллелизма алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.9 Входные и выходные данные алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.10 Свойства алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.7 Существующие реализации алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;MATLAB&#039;&#039;&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;PYTHON&#039;&#039;&lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;WOLFRAM&#039;&#039;&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по ссылке[https://gist.github.com/guitarkitten/3937264].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14409</id>
		<title>Участник:Маркова Екатерина/Построение матрицы Адамара</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0_%D0%95%D0%BA%D0%B0%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B0/%D0%9F%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B_%D0%90%D0%B4%D0%B0%D0%BC%D0%B0%D1%80%D0%B0&amp;diff=14409"/>
		<updated>2016-10-28T12:52:47Z</updated>

		<summary type="html">&lt;p&gt;Katemeron: /* Программная реализация алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&#039;&#039;&#039;1.1 Общее описание алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; - это квадратная матрица размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;, составленная из чисел &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-1&amp;lt;/math&amp;gt;, столбцы которой ортогональны, так что справедливо соотношение:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H*H^T = N*E_N&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - это единичная матрица размера &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;. Матрицы Адамара применяются в различных областях, включая комбинаторику, численный анализ, обработку сигналов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.2 Математическое описание алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица Адамара порядка &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;-H_N&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; матрица с противоположными элементами. Тогда матрица &amp;lt;math&amp;gt;H_{2N}&amp;lt;/math&amp;gt; получается следующим образом:&lt;br /&gt;
&amp;lt;math&amp;gt;H_{2N} = \begin{bmatrix}&lt;br /&gt;
         H_N &amp;amp; H_N \\&lt;br /&gt;
         H_N &amp;amp; -H_N&lt;br /&gt;
      \end{bmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.3 Вычислительное ядро алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро рекурсивного алгоритма состоит из  &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений и .&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.4 Макроструктура алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Алгоритм не использует в качестве составных частей другие алгоритмы. Как это было описано в вычислительном ядре, в пустые блоки дублируются со сменой или без смены знака значения первого блока матрицы. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.5 Схема реализации последовательного алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В описанном  виде алгоритм представляет из себя примитивное дублирование элементов матрицы, полученной на предыдущем этапе, в пустующие блоки новой матрицы.&lt;br /&gt;
&lt;br /&gt;
Сначала заполняется правый верхний блок матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{i(j - \frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = 1..\frac{N}{2}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
затем левый нижний блок&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})j}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1.. \frac{N}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Последним заполняется нижний правый блок матрицы&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_{ij} = H_{(i-\frac{N}{2})(j-\frac{N}{2})}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;i = \frac{N}{2}+1..N &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = \frac{N}{2}+1..N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.6 Последовательная сложность алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Для заполнения  матрицы &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; размера &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt; необходимо &amp;lt;math&amp;gt;\;N^2\;&amp;lt;/math&amp;gt;  присвоений значений. Из чего можно сделать вывод, что рекурсивный метод построения матрицы Адамара является алгоритмом с &#039;&#039;квадратичной сложностью&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.7 Информационный граф&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Зависимость данных для матрицы размерностью &amp;lt;math&amp;gt;4*4&amp;lt;/math&amp;gt; можно увидеть на рис.1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Pic_hadamard.png|border|500px|Some text]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.8 Ресурс параллелизма алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Логически алгоритм можно разделить на три части, которые на каждом шаге выполняются независимо.&lt;br /&gt;
Внутри каждой части происходит &amp;lt;math&amp;gt;2^{2N}-2^{2(N-1)}&amp;lt;/math&amp;gt; независимых присвоений, где &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - номер шага алгоритма, причем размерность матрицы на шаге &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt;. При этом необходимо ждать завершения предыдущего шага, то есть необходимы синхронизирующие блокировки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.9 Входные и выходные данные алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Входные данные: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - размерность матрицы.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: матрица размером &amp;lt;math&amp;gt;N\times N&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объем выходных данных: &amp;lt;math&amp;gt; N^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.10 Свойства алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Алгоритм полностью детерминирован.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.7 Существующие реализации алгоритма&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;MATLAB&#039;&#039;&lt;br /&gt;
[https://www.mathworks.com/help/matlab/ref/hadamard.html?requestedDomain=www.mathworks.com]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;&#039;PYTHON&#039;&#039;&#039;&lt;br /&gt;
[http://pydoc.net/Python/rogues/0.3.0/rogues.matrices.hadamard/]&lt;br /&gt;
&lt;br /&gt;
Реализация &#039;&#039;&#039;WOLFRAM&#039;&#039;&#039;&lt;br /&gt;
[https://reference.wolfram.com/language/ref/HadamardMatrix.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На языке &#039;&#039;Java&#039;&#039; реализован класс &#039;&#039;Hadamard&#039;&#039; не входящий в стандарт языка. С кодом можно ознакомиться по ссылке[https://gist.github.com/guitarkitten/3937264].&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Мак-Вильямс Ф., Слоэн Н. — &amp;quot;Теория кодов, исправляющих ошибки&amp;quot; (1979)&lt;br /&gt;
&lt;br /&gt;
2. Кронберг, Ю.И. Ожигов, А.Ю. Чернявский — &amp;quot;Алгебраический аппарат квантовой информатики 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
3. М. Н. Аршинов, Л. Е. Садовский — &amp;quot;Коды и математика&amp;quot; (1983)&lt;/div&gt;</summary>
		<author><name>Katemeron</name></author>
	</entry>
</feed>