<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896706</guid>
        <pubDate>Sun, 12 Nov 2023 15:05:16 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896706</link>
        <description><![CDATA[prografix: Я реализовал свой алгоритм из сообщения №9, и хотя, как показывает пример <strong class='tag-b'>Majestio</strong>, он не всегда будет оптимальным, всё же на практике показал хороший результат.<br>
А теперь о том для чего это нужно. <br>
Иногда мне приходится решать задачи с большим числом неизвестных методом наименьших квадратов. Получается система уравнений с симметричной и разреженной матрицей А с сотнями или тысячами строками ( столбцами ). Я решаю её путём LDLt разложения. Здесь L - это нижняя треугольная матрица, D - диагональная матрица, а Lt - это транспонированная матрица L. Этот метод асимптотически быстрее метода Гаусса в 2 раза. Я обнаружил, что лидирующие нули матрицы А сохраняются в матрице L, а значит эти элементы можно не вычислять. Если А сильно разрежена, то получается большая экономия в вычислениях. Поэтому я сделал специальную модификацию метода LDLt разложения, в которую поступает информация о матрице А без лидирующих нулей и вычисляется матрица L тоже без них. Назовём его, для примера, specLDLt. Понятно, что чем больше лидирующих нулей, тем быстрее будут вычисления, а этого можно добиться переставив неизвестные и уравнения. Обозначим алгоритм получения максимума лидирующих нулей через maxNull.<br>
Мои опыты на реальных данных показали, что если число неизвестных меньше 200, то применение maxNull+specLDLt даёт небольшое ускорение, либо даже замедление по сравнению с просто specLDLt. С увеличением числа неизвестных эффективность предобработки растёт и для 1500 неизвестных сочетание maxNull+specLDLt было в 10 раз быстрее, чем просто specLDLt. А если сравнивать с обычным LDLt или методом Гаусса, то там разница в сотни раз.<br>
Интересно, что тут встретились задачи из дискретной (maxNull) и непрерывной математики (specLDLt).]]></description>
        <author>prografix</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896668</guid>
        <pubDate>Thu, 09 Nov 2023 16:33:25 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896668</link>
        <description><![CDATA[prografix: <strong class='tag-b'>Majestio</strong><br>
Очень интересный и неожиданный пример&#33;]]></description>
        <author>prografix</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896614</guid>
        <pubDate>Wed, 08 Nov 2023 17:57:32 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896614</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=437623&view=findpost&p=3896529'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2023-11-06T14:02:20+00:00">06.11.23, 14:02</time></span><div class='quote '>Но я очень не уверен, что это &quot;финальный&quot; вариант алгоритма, а не частное решение для данных из моего примера. Тут х3 </div></div><br>
Да, алгоритм ошибочный&#33; И вот я придумал пример это подтверждающий:<br>
<br>
<br>
<span class="tag-font" data-value="Courier" style="font-family:Courier">1 0 0 0 0<br>
0 1 1 1 1<br>
0 1 1 1 1<br>
0 1 1 1 1<br>
1 0 0 0 0</span><br>
<br>
Т.е. если первый столбец берём с большим числом нулей - ничего путного не выйдет. Увы  :no:]]></description>
        <author>Majestio</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896529</guid>
        <pubDate>Mon, 06 Nov 2023 14:02:20 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896529</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=437623&view=findpost&p=3896526'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>prografix &#064; <time class="tag-quote__quoted-time" datetime="2023-11-06T05:22:05+00:00">06.11.23, 05:22</time></span><div class='quote '>Спасибо. Значит ли это, что эту задачу уже кто-то решал?</div></div><br>
Не уверен, думаю ChatGPT это решает на основе большого множества частных алгоритмов. <br>
И его решения не всегда бывают оптимальными, а иногда и вовсе бывают неправильными.<br>
Но, как отправную точку - использовать можно часто.<br>
<br>
Кстати, вот ещё вариант перестановки (но это чисто вручную)<br>
<br>
Было:<br>
<br>
<span class="tag-font" data-value="Courier" style="font-family:Courier"><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">A B C D</span></strong> <br>
1 0 1 0 <br>
1 0 0 0 <br>
0 1 1 0 <br>
1 0 1 1 <br>
</span><br>
Стало:<br>
<br>
<span class="tag-font" data-value="Courier" style="font-family:Courier"><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">D B C A</span></strong><br>
0 0 1 1<br>
0 0 0 1<br>
0 1 1 0<br>
1 0 1 1<br>
</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2023-11-06T14:25:25+00:00">06.11.23, 14:25</time></span></span><br>
Да, примерно твой алгоритм. Выбираются столбцы с максимальным числом нулей и ставятся от начала. Если очередной столбец имеет столько нулей, что и некоторые &quot;неиспользованные&quot; - из них выбирается тот, который больше прибавляет к общей сумме лидирующих нулей. Так получился мой вариант. Но я очень не уверен, что это &quot;финальный&quot; вариант алгоритма, а не частное решение для данных из моего примера. Тут х3  :-?]]></description>
        <author>Majestio</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896526</guid>
        <pubDate>Mon, 06 Nov 2023 05:22:05 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896526</link>
        <description><![CDATA[prografix: <strong class='tag-b'>Majestio</strong><br>
Спасибо. Значит ли это, что эту задачу уже кто-то решал?<br>
Я придумал более оптимальный алгоритм.<br>
Вначале выбираем столбец с минимальным числом единиц и делаем его первым. Если их несколько, то какой-то из них.<br>
Далее строки в которых были единицы игнорируем. Находим столбец с минимальным числом единиц без учёта этих строк и делаем его следующим. И так далее.<br>
Для исходной матрицы из поста выше получим:<br>
0 0 1 1<br>
0 0 0 1<br>
1 0 1 0<br>
0 1 1 1<br>
Ответ получился лучше. У него два последних столбца переставлены по сравнению с результирующей матрицей из поста выше.]]></description>
        <author>prografix</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896525</guid>
        <pubDate>Sun, 05 Nov 2023 14:31:17 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896525</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=437623&view=findpost&p=3896524'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>prografix &#064; <time class="tag-quote__quoted-time" datetime="2023-11-05T10:02:22+00:00">05.11.23, 10:02</time></span><div class='quote '>Понятно, что можно сделать полный перебор всех перестановок столбцов, но нужен более быстрый алгоритм.</div></div><br>
Посмотри <a class='tag-url' href='https://onlinegdb.com/vqrNq8Iqs' target='_blank'>ответ ChatGPT</a>, может быть поможет  ;) <br>
 <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;vector&#62;</div><div class="code_line">#include &#60;algorithm&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">// Функция для подсчета суммы лидирующих нулей в строке</div><div class="code_line">int countLeadingZeros(const vector&#60;int&#62;&amp; row) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int count = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = 0; i &#60; row.size(); i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (row[i] == 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;count++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;} else {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return count;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// Функция для перестановки столбцов в матрице</div><div class="code_line">void permuteColumns(vector&#60;vector&#60;int&#62;&#62;&amp; matrix) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Создаем вектор пар (сумма лидирующих нулей, индекс столбца)</div><div class="code_line">&nbsp;&nbsp; &nbsp;vector&#60;pair&#60;int, int&#62;&#62; sums;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = 0; i &#60; matrix[0].size(); i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int sum = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (int j = 0; j &#60; matrix.size(); j++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sum += countLeadingZeros(matrix[j]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sums.push_back(make_pair(sum, i));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Переставляем столбцы в порядке убывания суммы лидирующих нулей</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sort(sums.rbegin(), sums.rend());</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (int i = 0; i &#60; matrix.size(); i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for (int j = 0; j &#60; matrix[0].size(); j++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;swap(matrix[i][j], matrix[i][sums[j].second]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Пример матрицы 4x4</div><div class="code_line">&nbsp;&nbsp; &nbsp;vector&#60;vector&#60;int&#62;&#62; matrix = {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{1, 0, 1, 0},</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{1, 0, 0, 0},</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{0, 1, 1, 0},</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{1, 0, 1, 1}</div><div class="code_line">&nbsp;&nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Вывод исходной матрицы</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; &quot;Исходная матрица:&quot; &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = 0; i &#60; matrix.size(); i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (int j = 0; j &#60; matrix[0].size(); j++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; matrix[i][j] &#60;&#60; &quot; &quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Перестановка столбцов</div><div class="code_line">&nbsp;&nbsp; &nbsp;permuteColumns(matrix);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Вывод результирующей матрицы</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; &quot;Результирующая матрица:&quot; &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (int i = 0; i &#60; matrix.size(); i++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for (int j = 0; j &#60; matrix[0].size(); j++) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; matrix[i][j] &#60;&#60; &quot; &quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;cout &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Исходная матрица:</div><div class="code_line">1 0 1 0 </div><div class="code_line">1 0 0 0 </div><div class="code_line">0 1 1 0 </div><div class="code_line">1 0 1 1 </div><div class="code_line">Результирующая матрица:</div><div class="code_line">0 0 1 1 </div><div class="code_line">0 0 1 0 </div><div class="code_line">1 0 0 1 </div><div class="code_line">0 1 1 1</div></ol></div></div></div></div>]]></description>
        <author>Majestio</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896524</guid>
        <pubDate>Sun, 05 Nov 2023 10:02:22 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3896524</link>
        <description><![CDATA[prografix: Я так и не понял, как должен работать алгоритм, который предложил <strong class='tag-b'>Akina</strong>, но придумал, как упростить постановку задачи.<br>
Дана квадратная матрица с нулями и единицами. Нужно переставить у неё столбцы так, чтобы сумма лидирующих нулей по всем строкам была максимальной. <br>
Лидирующие нули - это нули до первой единицы.<br>
Например, в строке 10101 лидирующих нулей - ноль, в строке 00101 лидирующих нулей - два.<br>
Понятно, что можно сделать полный перебор всех перестановок столбцов, но нужен более быстрый алгоритм.]]></description>
        <author>prografix</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894636</guid>
        <pubDate>Tue, 05 Sep 2023 17:17:52 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894636</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=437623&view=findpost&p=3894605'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>prografix &#064; <time class="tag-quote__quoted-time" datetime="2023-09-05T09:22:02+00:00">05.09.23, 09:22</time></span><div class='quote '>У первой строки первый элемент ненулевой.</div></div><br>
Он на главной диагонали.]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894605</guid>
        <pubDate>Tue, 05 Sep 2023 09:22:02 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894605</link>
        <description><![CDATA[prografix: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=437623&view=findpost&p=3894574'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Akina &#064; <time class="tag-quote__quoted-time" datetime="2023-09-04T15:06:39+00:00">04.09.23, 15:06</time></span><div class='quote '>Ну тут обычная пошаговая оптимизация.<br>
Просто берём и опускаем все строки, у которых единичный элемент начинается раньше, чем у нижележащей.</div></div><br>
Не понял идею. У первой строки первый элемент ненулевой. Но это не значит, что её надо опускать.]]></description>
        <author>prografix</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894574</guid>
        <pubDate>Mon, 04 Sep 2023 15:06:39 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894574</link>
        <description><![CDATA[Akina: Ну тут обычная пошаговая оптимизация.<br>Просто берём и опускаем все строки, у которых единичный элемент начинается раньше, чем у нижележащей.<br>То есть в данном случае - сначала опускаем строку 4, меняя её со строкой 5, получаем <br>х000x<br>0х000<br>00х00<br>000х0<br>х000x<br>Закончив с горизонталями, делаем то же с вертикалями. Т.е. меняем вертикали 1 и 4, получаем<br>х0000<br>0х000<br>00х00<br>000хх<br>000хх]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894550</guid>
        <pubDate>Mon, 04 Sep 2023 09:50:35 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894550</link>
        <description><![CDATA[prografix: Матрица квадратная.<br>Пример.<br>Было:<br>х00х0<br>0х000<br>00х00<br>х00х0<br>0000х<br>Меняем местами первую и последнюю строки и столбцы.<br>Стало:<br>х0000<br>0х000<br>00х00<br>000хх<br>000хх<br><br>Ненулевые элементы приближены к главной диагонали.]]></description>
        <author>prografix</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894537</guid>
        <pubDate>Mon, 04 Sep 2023 07:59:35 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894537</link>
        <description><![CDATA[Akina: Как я понимаю, матрица квадратная, верно?<br>Думаю, если выложить пример (скажем, матрицу 5х5) с решением, будет проще понять суть происходящего...]]></description>
        <author>Akina</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894535</guid>
        <pubDate>Mon, 04 Sep 2023 06:36:27 +0000</pubDate>
        <title>Симметричные разреженные матрицы</title>
        <link>https://forum.sources.ru/index.php?showtopic=437623&amp;view=findpost&amp;p=3894535</link>
        <description><![CDATA[prografix: Дана симметричная разреженная матрица. Если переставить i-ую и j-ую строку, а также i-й и j-й столбец, то матрица останется симметричной. Нужно при помощи таких перестановок собрать ненулевые элементы матрицы возле главной диагонали. Пусть m[i] - это номер первого ненулевого элемента i-й строки. Тогда нужно максимизировать сумму m[i] по всем строкам.]]></description>
        <author>prografix</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	