<?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/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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</id>
	<title>Алгоритм Пейли построения матрицы Адамара - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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;action=history"/>
	<updated>2026-10-22T23:38:19Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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=22606&amp;oldid=prev</id>
		<title>Chernyavskiy: /* Литература */</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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=22606&amp;oldid=prev"/>
		<updated>2017-05-03T20:50:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Литература&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 20:50, 3 мая 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l277&quot;&gt;Строка 277:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 277:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Литература ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Литература ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Категория:Статьи в работе]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Chernyavskiy</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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=22599&amp;oldid=prev</id>
		<title>Chernyavskiy: /* Свойства и структура алгоритма */</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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=22599&amp;oldid=prev"/>
		<updated>2017-05-03T18:59:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Свойства и структура алгоритма&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 18:59, 3 мая 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l48&quot;&gt;Строка 48:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 48:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Предполагается, что существуют матрицы Адамара порядка 1, 2 и всех порядков n, кратных 4, хотя это до сих пор еще не было доказано. Нет универсального алгоритма построения матрицы Адамара произвольного размера, но известно большое число методов для различных частных случаев, и наименьший порядок, для которого матрица Адамара еще не построена, равен 268 (на 1977 г.). &amp;lt;ref name=&amp;quot;rt2&amp;quot;&amp;gt;Мак-Вильямс Ф. Дж., Слоэн Н. Дж. А. Теория кодов, исправляющих ошибки: Пер. с англ. — М: Связь, 1979. — c. 52-57&amp;lt;/ref&amp;gt; М&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Предполагается, что существуют матрицы Адамара порядка 1, 2 и всех порядков n, кратных 4, хотя это до сих пор еще не было доказано. Нет универсального алгоритма построения матрицы Адамара произвольного размера, но известно большое число методов для различных частных случаев, и наименьший порядок, для которого матрица Адамара еще не построена, равен 268 (на 1977 г.). &amp;lt;ref name=&amp;quot;rt2&amp;quot;&amp;gt;Мак-Вильямс Ф. Дж., Слоэн Н. Дж. А. Теория кодов, исправляющих ошибки: Пер. с англ. — М: Связь, 1979. — c. 52-57&amp;lt;/ref&amp;gt; М&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В данном описании рассматривается метод Пейли,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;В данном описании рассматривается метод Пейли, &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;основанный на теоретико-числовых принципах и позволяющий строить матрицы Адамара порядка &amp;lt;math&amp;gt;n=p+1&amp;lt;/math&amp;gt;, кратного 4, где p-простое число.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Математическое описание алгоритма ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Математическое описание алгоритма ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Chernyavskiy</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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=22598&amp;oldid=prev</id>
		<title>Chernyavskiy: /* Общее описание алгоритма */</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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=22598&amp;oldid=prev"/>
		<updated>2017-05-03T18:58:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Общее описание алгоритма&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 18:58, 3 мая 2017&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Строка 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Предполагается, что существуют матрицы Адамара порядка 1, 2 и всех порядков n, кратных 4, хотя это до сих пор еще не было доказано. Нет универсального алгоритма построения матрицы Адамара произвольного размера, но известно большое число методов для различных частных случаев, и наименьший порядок, для которого матрица Адамара еще не построена, равен 268 (на 1977 г.). &amp;lt;ref name=&quot;rt2&quot;&amp;gt;Мак-Вильямс Ф. Дж., Слоэн Н. Дж. А. Теория кодов, исправляющих ошибки: Пер. с англ. — М: Связь, 1979. — c. 52-57&amp;lt;/ref&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Мы приведем &lt;/del&gt;метод &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;построения &lt;/del&gt;Пейли, &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;который важен для теории кодирования. &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Предполагается, что существуют матрицы Адамара порядка 1, 2 и всех порядков n, кратных 4, хотя это до сих пор еще не было доказано. Нет универсального алгоритма построения матрицы Адамара произвольного размера, но известно большое число методов для различных частных случаев, и наименьший порядок, для которого матрица Адамара еще не построена, равен 268 (на 1977 г.). &amp;lt;ref name=&quot;rt2&quot;&amp;gt;Мак-Вильямс Ф. Дж., Слоэн Н. Дж. А. Теория кодов, исправляющих ошибки: Пер. с англ. — М: Связь, 1979. — c. 52-57&amp;lt;/ref&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;М&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;В данном описании рассматривается &lt;/ins&gt;метод Пейли,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Математическое описание алгоритма ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Математическое описание алгоритма ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Chernyavskiy</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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=22597&amp;oldid=prev</id>
		<title>Chernyavskiy: Новая страница: « {{algorithm | name              = Алгоритм Пейли построение матрицы Адамара | serial_complexity = &lt;math&gt;O(n^2)&lt;/math&gt; | pf_h…»</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D0%B9%D0%BB%D0%B8_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%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=22597&amp;oldid=prev"/>
		<updated>2017-05-03T18:42:42Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: « {{algorithm | name              = Алгоритм Пейли построение матрицы Адамара | serial_complexity = &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; | pf_h…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&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(1)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(n^2)&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;
&lt;br /&gt;
Основные авторы описания: [[Участник:Nikita|Иванов Н.В.]] (Разделы 1.1,1.7,1.9,1.10,2.4,2.7), [[Участник:Tsyganov Nikita|Цыганов Н.И.]] (Разделы 1.2,1.3,1.4,1.5,1.6,1.7,1.8,2.4), [[Участник:Chernyavskiy|А.Ю.Чернявский]] (проверка, редактирование),  [[Участник:Sleo|С.Н.Леоненков]] (предварительня проверка), &lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Матрицы Адамара были введены в математический обиход в конце прошлого века и играют важную роль в алгебре и комбинаторике. Они находят широкое применение в теории кодирования (коды, исправляющие ошибки), теории планирования многофакторных экспериментов (блок-схемы) и других областях математики.&amp;lt;ref name=&amp;quot;rt&amp;quot;&amp;gt;http://cyberleninka.ru/article/n/matritsy-adamara-nechetnogo-poryadka.pdf&amp;lt;/ref&amp;gt; Сравнительно недавно (в 1960 г.) было замечено, что эти матрицы могут быть использованы для построения кодов с большим кодовым расстоянием.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Матрицей Адамара порядка n&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; называется &amp;lt;math&amp;gt;n*n&amp;lt;/math&amp;gt; матрица &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;, элементами которой являются +1 и −1 такая, что &amp;lt;math&amp;gt;H H^T = n E_n&amp;lt;/math&amp;gt;, &lt;br /&gt;
где &amp;lt;math&amp;gt;E_n&amp;lt;/math&amp;gt; - единичная матрица размера n.&lt;br /&gt;
&lt;br /&gt;
Матрица Адамара обладает следующими &amp;#039;&amp;#039;свойствами&amp;#039;&amp;#039;:&lt;br /&gt;
* Различные строки матрицы ортогональны&lt;br /&gt;
* Скалярное произведение любой строки саму на себя равно n&lt;br /&gt;
* Умножение любой строки или столбца на -1 переводит H в другую матрицу Адамара&lt;br /&gt;
* Если все элементы первой строки и первого столбца равны +1, то матрица Адамара называется нормализованной&lt;br /&gt;
&lt;br /&gt;
Ниже показаны примеры нормализованных матриц Адамара порядка 1,2 и 4, причем нормализованность матриц сохраняется при перестановке любых строк и столбцов, кроме первых:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H_1 = (1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;,&lt;br /&gt;
H_2 =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp;  1\\&lt;br /&gt;
1 &amp;amp; -1\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;,&lt;br /&gt;
&amp;lt;math&amp;gt;,&lt;br /&gt;
H_4 =&lt;br /&gt;
\begin{pmatrix}&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;
1 &amp;amp; -1 &amp;amp; -1 &amp;amp; 1\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предполагается, что существуют матрицы Адамара порядка 1, 2 и всех порядков n, кратных 4, хотя это до сих пор еще не было доказано. Нет универсального алгоритма построения матрицы Адамара произвольного размера, но известно большое число методов для различных частных случаев, и наименьший порядок, для которого матрица Адамара еще не построена, равен 268 (на 1977 г.). &amp;lt;ref name=&amp;quot;rt2&amp;quot;&amp;gt;Мак-Вильямс Ф. Дж., Слоэн Н. Дж. А. Теория кодов, исправляющих ошибки: Пер. с англ. — М: Связь, 1979. — c. 52-57&amp;lt;/ref&amp;gt; Мы приведем метод построения Пейли, который важен для теории кодирования. &lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Для решения поставленной задачи будем использовать метод Пейли.&lt;br /&gt;
Это построение дает матрицы Адамара любого порядка &amp;lt;math&amp;gt;n=p+1&amp;lt;/math&amp;gt;, кратного 4, где p-простое число.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Определение.&amp;#039;&amp;#039;&amp;#039; Пусть p-простое число. Ненулевые квадраты чисел, приведенные по модулю p, называются квадратичными вычетами по модулю p или просто вычетами по модулю p. &lt;br /&gt;
&lt;br /&gt;
Чтобы найти все вычеты по модулю p, достаточно рассмотреть квадраты чисел от &amp;lt;math&amp;gt;1^2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;(p-1)^2&amp;lt;/math&amp;gt;. Но если учесть, что &amp;lt;math&amp;gt;(p-a)^2 &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;mod &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; p = (-a)^2 &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; mod &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; p = a^2 &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;mod&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; p&amp;lt;/math&amp;gt;, то достаточно рассмотреть лишь числа &amp;lt;math&amp;gt;1^2&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;mod&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;p, 2^2&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;mod&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;p, ... , (\frac{p-1}{2})^2&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; mod &amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;X(i)&amp;lt;/math&amp;gt;, называемая символом Лежандра, определяется на целых числах следующим образом:&lt;br /&gt;
* &amp;lt;math&amp;gt;X(i)=0&amp;lt;/math&amp;gt;, если i кратно p;&lt;br /&gt;
* &amp;lt;math&amp;gt;X(i)=1&amp;lt;/math&amp;gt;, если остаток от деления i на p является квадратным вычетом по модулю p;&lt;br /&gt;
* &amp;lt;math&amp;gt;X(i)=-1&amp;lt;/math&amp;gt;, если остаток от деления i на p является невычетом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Теперь мы построим матрицу Джекобстола &amp;lt;math&amp;gt;Q=(q_{ij})&amp;lt;/math&amp;gt;. Она представляет собой &amp;lt;math&amp;gt;(p*p)&amp;lt;/math&amp;gt;-матрицу, строки и столбцы которой пронумерованы числами 0,1,..., p-1, а элементы &amp;lt;math&amp;gt;q_{ij}=X(j-i)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть теперь &amp;lt;math&amp;gt;&lt;br /&gt;
H =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
1 &amp;amp;  1\\&lt;br /&gt;
1^T &amp;amp; Q-I\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Все элементы главной диагонали этой матрицы, кроме элемента &amp;lt;math&amp;gt;h_{00}&amp;lt;/math&amp;gt;, равны &amp;lt;math&amp;gt;X(0)-1=-1&amp;lt;/math&amp;gt;. Нетрудно заметить, что данная матрица состоит только лишь из элементов 1 и -1.&lt;br /&gt;
&lt;br /&gt;
Доказано, что такая матрица &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; представляет собой нормализованную матрицу Адамара порядка p+1, которую называют матрицей типа Пейли.&amp;lt;ref name=&amp;quot;rt3&amp;quot;&amp;gt;http://tc.nsu.ru/uploads/codingtheory.pdf&amp;lt;/ref&amp;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&amp;gt;0&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делится на 4;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; - простое число.&lt;br /&gt;
&lt;br /&gt;
Вспомогательные данные: &lt;br /&gt;
&lt;br /&gt;
* Число &amp;lt;math&amp;gt;p=n-1&amp;lt;/math&amp;gt;;&lt;br /&gt;
* Вектор квадратичных вычетов (по модулю &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;) &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; (элементы &amp;lt;math&amp;gt;r_i&amp;lt;/math&amp;gt;) размера &amp;lt;math&amp;gt;2p&amp;lt;/math&amp;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;h_{ij}&amp;lt;/math&amp;gt;) размера &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;. Индексация строчек и столбцов идёт с нуля. &lt;br /&gt;
&lt;br /&gt;
Алгоритм:&lt;br /&gt;
:1. Строится вектор квадратичных вычетов &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
:: Первые &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; элементов вектора &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;i=0,1,...,p-1&amp;lt;/math&amp;gt;) определяются следующим образом:&lt;br /&gt;
::: &amp;lt;math&amp;gt;r_i=1&amp;lt;/math&amp;gt;, если &amp;lt;math&amp;gt;i \in \{1^2&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;mod&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;p, 2^2&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;mod&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;p, ... , (\frac{p-1}{2})^2&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; mod&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; p\}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i=0,1,...,p-1&amp;lt;/math&amp;gt;, то есть если &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; является квадратичным вычетом по модулю &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;;&lt;br /&gt;
::: &amp;lt;math&amp;gt;r_i=-1&amp;lt;/math&amp;gt;, иначе.&lt;br /&gt;
::Вторые &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; элементов (&amp;lt;math&amp;gt;i=p,1,...,2p-1&amp;lt;/math&amp;gt;) являются копией первых &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; элементов:&lt;br /&gt;
:::&amp;lt;math&amp;gt;r_i=r_{i-p}, i=p,1,...,2p-1.&amp;lt;/math&amp;gt;&lt;br /&gt;
:2. Строится матрица Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;.&lt;br /&gt;
::Элементы матрицы Адамара &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; находятся следующим образом:&lt;br /&gt;
::: &amp;lt;math&amp;gt;h_{0j}=1, j=0,1, ... ,n-1;&amp;lt;/math&amp;gt;&lt;br /&gt;
::: &amp;lt;math&amp;gt;h_{i0}=1, i=1,2, ... ,n-1;&amp;lt;/math&amp;gt;&lt;br /&gt;
::: &amp;lt;math&amp;gt;h_{ij}=r_{j-i+p}, i=1,2, ... ,n-1, j=1,2, ... ,n-1.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит из &amp;lt;math&amp;gt;(n-1) \times (n-1)&amp;lt;/math&amp;gt; операций присваивания следующего вида:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;h_{ij}=r_{j-i+p},&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; i=1,2, ... ,n-1, j=1,2, ... ,n-1.&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;
Приведем процедуру на языке С++, реализующую описанный алгоритм. На вход процедуре подается порядок матрицы &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; и ссылка на заполняемую матрицу &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt;. Считаем, что &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; положительно, делится на &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; - простое число, а размер матрицы &amp;lt;math&amp;gt;result&amp;lt;/math&amp;gt; равен &amp;lt;math&amp;gt;n \times n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void buildHadamardMatrix(int n, vector&amp;lt; vector&amp;lt;int&amp;gt; &amp;gt; &amp;amp; result)&lt;br /&gt;
{&lt;br /&gt;
    // 1) matrix size changing&lt;br /&gt;
    result.resize(n);&lt;br /&gt;
    for (int i=0; i&amp;lt;n; i++) {&lt;br /&gt;
        result[i].resize(n);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // 2) residue array building&lt;br /&gt;
    int p=n-1;&lt;br /&gt;
    vector&amp;lt;int&amp;gt; residues;&lt;br /&gt;
    residues.resize(2*p);&lt;br /&gt;
    for (int i=0; i&amp;lt;p; i++) {&lt;br /&gt;
        residues[i] = -1;&lt;br /&gt;
    }&lt;br /&gt;
    for (int i=1; i&amp;lt;= (p-1)/2; i++) {&lt;br /&gt;
        residues[i*i % p] = 1;&lt;br /&gt;
    }&lt;br /&gt;
    for (int i=p; i&amp;lt;2*p; i++) {&lt;br /&gt;
        residues[i] = residues[i-p];&lt;br /&gt;
    }&lt;br /&gt;
    // 3) Paley matrix building&lt;br /&gt;
    // first line filling&lt;br /&gt;
    for (int j=0; j&amp;lt;n; j++) {&lt;br /&gt;
        result[0][j] = 1;&lt;br /&gt;
    }&lt;br /&gt;
    // first column filling&lt;br /&gt;
    for (int i=1; i&amp;lt;n; i++) {&lt;br /&gt;
        result[i][0] = 1;&lt;br /&gt;
    }&lt;br /&gt;
    // others&lt;br /&gt;
    for (int i=1; i&amp;lt;n; i++) {&lt;br /&gt;
        for (int j=1; j&amp;lt;n; j++) {&lt;br /&gt;
            result[i][j] = residues[j-i+p];&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&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;
Основными операциями алгоритма являются:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{n}{2}-2&amp;lt;/math&amp;gt; операций умножения;&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{n}{2}-2&amp;lt;/math&amp;gt; операций взятия остатка;&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2+\frac{5}{2}n-3&amp;lt;/math&amp;gt; операций присваивания.&lt;br /&gt;
&lt;br /&gt;
Из чего следует, что алгоритм имеет квадратичную последовательную сложность.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
Информационный граф алгоритма можно представить в виде четырёх последовательных блоков. Первый блок содержит &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; параллельных ветвей, второй блок - &amp;lt;math&amp;gt;\frac{n}{2}-1&amp;lt;/math&amp;gt; параллельных ветвей, третий - &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; и четвёртый - &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:i_graph2.png|600px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
Каждая вершина из &amp;lt;math&amp;gt;A_1-A_{n-1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_1-C_{n-1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;D_1-D_{n^2}&amp;lt;/math&amp;gt; соответствует операции присваивания, каждая вершина из &amp;lt;math&amp;gt;B_1-B_{\frac{n}{2}-1}&amp;lt;/math&amp;gt; соответствует трём последовательным операциям: умножения, взятия остатка по модулю и присваивания, а вершины, окрашенные серым, представляют собой промежуточные точки синхронизации.&lt;br /&gt;
&lt;br /&gt;
[[Файл:i_graph3.jpg|600px|thumb|center|Информационный граф для n=4.]]&lt;br /&gt;
На рисунке приведен информационный граф алгоритма для случая n=4. Вершины графа соответствуют следующим строчкам кода:&lt;br /&gt;
&lt;br /&gt;
a. residues[i] = -1;&lt;br /&gt;
&lt;br /&gt;
b. residues[i*i%p] = 1;&lt;br /&gt;
&lt;br /&gt;
c. residues[i] = residues[i-p];&lt;br /&gt;
&lt;br /&gt;
d. result[0][j] = 1;&lt;br /&gt;
&lt;br /&gt;
e. result[i][0] = 1;&lt;br /&gt;
&lt;br /&gt;
f. result[i][j] = residues[i-j+p];&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как видно из информационного графа алгоритма, в параллельном варианте необходимо последовательно выполнить следующие блоки:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; операций присваивания;&lt;br /&gt;
* &amp;lt;math&amp;gt;\frac{n}{2}-1&amp;lt;/math&amp;gt; участков, состоящих из трёх операций: умножения, взятия остатка и присваивания;&lt;br /&gt;
* &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; операций присваивания;&lt;br /&gt;
* &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; операций присваивания.&lt;br /&gt;
&lt;br /&gt;
Из этого можно сделать вывод, что высота ярусно-параллельной формы информационного графа равняется 6 (присваивание, умножение, взятие остатка, присваивание, присваивание, присваивание). Ширина ярусно-параллельной формы равняется &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt;, что означает, что при использовании &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; процессоров матрица Адамара будет строиться за 6 операций.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Входные данные:&amp;#039;&amp;#039;&amp;#039; число &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;n&amp;lt;/math&amp;gt;:&lt;br /&gt;
* &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - натуральное;&lt;br /&gt;
* &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делится на 4;&lt;br /&gt;
* &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; - простое.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Объем входных данных:&amp;#039;&amp;#039;&amp;#039; 1 (число &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Выходные данные:&amp;#039;&amp;#039;&amp;#039; построенная матрица Адамара &amp;lt;math&amp;gt;H_n&amp;lt;/math&amp;gt; (её элементы &amp;lt;math&amp;gt;h_{ij}&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Объем выходных данных:&amp;#039;&amp;#039;&amp;#039; &amp;lt;math&amp;gt;n^2&amp;lt;/math&amp;gt; (количество элементов матрицы Адамара размера &amp;lt;math&amp;gt;n*n&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности в случае неограниченных ресурсов является квадратичным. &lt;br /&gt;
&lt;br /&gt;
Вычислительная мощность алгоритма является постоянной (&amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Алгоритм является полностью детерминированным. &lt;br /&gt;
&lt;br /&gt;
Для вершин &amp;lt;math&amp;gt;A_1-A_{n-1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B_1-B_{\frac{n}{2}-1}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C_1-C_{n-1}&amp;lt;/math&amp;gt; информационного графа степени исхода являются линейными, что означает, что при возможности на этапе реализации необходимо позаботиться об эффективном доступе к элементам массива &amp;quot;&amp;lt;math&amp;gt;residues&amp;lt;/math&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Исследование масштабируемости параллельной реализации алгоритма построения матрицы Адамара проводилось на суперкомпьютере «Ломоносов». Для этого была исследована собственная реализация алгоритма с использованием средств MPI. В ходе исследования  было произведено множество запусков программы с различными значениями параметра &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; (размер матрицы Адамара) и числом процессоров.&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма:&lt;br /&gt;
*число процессоров (p): [2,64] с шагом 2;&lt;br /&gt;
*размер матрицы: простые числа в диапазоне [4,10000].&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
*минимальная эффективность реализации 0.0000036% при n=4, p=2;&lt;br /&gt;
*максимальная эффективность реализации 0.333426% при n=948, p=2.&lt;br /&gt;
&lt;br /&gt;
Ниже представлены графики времени работы, производительности и эффективности данной реализации алгоритма построения матрицы Адамара в зависимости от изменяемых параметров запуска.&lt;br /&gt;
[[Файл:time_graph1.png|500px|thumb|center|Время работы параллельного алгоритма в зависимости от размерности системы и числа процессоров.]]&lt;br /&gt;
[[Файл:perform_graph1.png|500px|thumb|center|Изменение производительности параллельного алгоритма в зависимости от размерности системы и числа процессоров.]]&lt;br /&gt;
[[Файл:efficiency_graph1.png|500px|thumb|center|Эффективность работы параллельного алгоритма в зависимости от размерности системы и числа процессоров.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/snikersman/Hadamard Исследованная параллельная реализация на языке C++]&lt;br /&gt;
&lt;br /&gt;
Построим оценки масштабируемости, используя полученные результаты:&lt;br /&gt;
*По размерности задачи. Увеличение размерности задачи приводит к увеличению производительности.&lt;br /&gt;
*По числу процессоров. С ростом числа процессоров растет производительность, но при малых размерностях задачи этот рост незначителен. Это связано с дополнительными издержками по записи в участок памяти каждого процессора вспомогательного массива вычетов, а также с обменом информации между процессорами.&lt;br /&gt;
*По двум направлениям. При увеличении как числа процессоров, так и размерности задачи, производительность увеличивается. Причем чем больше используется процессоров, тем сильнее увеличивается производительность при увеличении размерности.&lt;br /&gt;
&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] (вносятся дополнительные ограничения, когда n, или n/12, или n/20 являются степенями по основанию 2)&lt;br /&gt;
* [http://r-survey.r-forge.r-project.org/survey/html/hadamard.html R]&lt;br /&gt;
* [https://reference.wolframcloud.com/cloudplatform/ref/HadamardMatrix.html Wolfram Mathematica]&lt;br /&gt;
* [http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.linalg.hadamard.html SciPy для Python]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Chernyavskiy</name></author>
	</entry>
</feed>