<?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=9768&amp;view=findpost&amp;p=590167</guid>
        <pubDate>Tue, 25 Jan 2005 17:35:46 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=590167</link>
        <description><![CDATA[Vitar: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=9768&view=findpost&p=93970'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>S.Yu.Gubanov &#064; <time class="tag-quote__quoted-time" datetime="2002-11-21T10:25:37+03:00">21.11.02, 07:25</time></span><div class='quote '>Слова &quot;одинаковые&quot; и &quot;изоморфные&quot;, кстати, синонимы, только одно русское, а другое вражеское. Так вопрос-то, собственно, в чем? Понять какие графы считаются изоморфными друг другу, или как написать программу, которая проверит одинаковы два графа или нет?</div></div><br>
Не правда, у изоморфных вершины могут быть пронумерованны по другому.]]></description>
        <author>Vitar</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93978</guid>
        <pubDate>Sat, 23 Nov 2002 08:19:44 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93978</link>
        <description><![CDATA[volatile: Ну вот, смотри:<br>Тот граф, о котором я говорил выше - это четыре вершины: A,B,C,D и пять стрелок: A-&gt;B, B-&gt;C, C-&gt;D, D-&gt;A, A-&gt;C<br><br>А преставлял я вершины - B&lt;-&gt;C<br><br>Переставлял не в самом графе, а в его представлении. При этом, матрица инцидентности меняется - меняются местами строки B и C и, <strong class='tag-b'>одновременно</strong> столбцы B и C.<br><br>Таким образом, если ты имеешь два графа (с одинаковым количеством вершин), заданных матрицами инцидентности, то достаточно перебрать все возможные перестановки вершин <strong class='tag-b'>второго</strong> графа (разумеется, при каждой перестановке соответствующим способом меняя матрицу) - если ни в одном случае матрицы не совпадут - значит графы неизоморфны.<br><br>Посколько сравнивать придётся матрицы n*n, а всего перестановок n!, то разумно будет сократить количество тех перестановок, которые имеют смысл. Как это сделать?<br><br>Возьмём граф и разобъём его вершины на группы - факторизуем по парам (Inc,Out) (где Inc - количество входящих рёбер, т.е. количество единиц в соответствующем столбце, а Out - количество исходящих рёбер, т.е. количество единиц в соответствующеё строке)<br>Для указанного примера, имеем:<br><br>A (1,2)<br>B (1,1)<br>C (2,1)<br>D (1,1)<br><br>Получаем три группы вершин: {A}, {B,D}, {C}<br> <br>Так вот, вместо 24 (4!) перестановок, достаточно просто отсортировать вершины в обоих графах по соответствующим парам (например, сначала по Inc, потом по Out), и разумных перестановок будет только 2=1!*2!*1! (т.е. произведение факториалов мощностей групп вершин).<br><br>Впрочем, это к вопросу об оптимизации (а то уж очень медленный алгоритм получался!)<br><br>Можно ещё подумать о том - как представлять матрицы таким образом, чтобы сравнение двух матриц и перестановка строк и столбцов были бы побыстрее. (Например, если ограничиться графами с количеством вершин &lt;6, то матрицы можно представлять просто одним 32-битным числом, а перестановки осуществлять с помощью битовых операций - они достаточно быстры).<br><br>Вопросы?]]></description>
        <author>volatile</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93977</guid>
        <pubDate>Fri, 22 Nov 2002 21:44:51 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93977</link>
        <description><![CDATA[Nikita: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Faust, 23.11.02, 00:37:55</span><div class='quote '>Так понятно?</div></div> Плохо, но в суть я въехал уже. А не можешь как-нибудь попроще? Ну типа взять два графа и показать? Я даже не понял в какой последовательности и какие строки и столбцы ты переставил \%( Ну вот такой я. Странно только почему - на лекции вроде все в инст хожу. =)<br>]]></description>
        <author>Nikita</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93976</guid>
        <pubDate>Fri, 22 Nov 2002 21:37:55 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93976</link>
        <description><![CDATA[volatile: Пусть имеем четырёхугольник ABCD с диагональю AC (точнее A-&gt;B-&gt;C-&gt;D-&gt;A, A-&gt;C)<br>Тогда, в этой последовательности (ABCD) матрица выглядит так: (буквы написаны для удобства)<br>   A B C D<br>A 0 1 1 0<br>B 0 0 1 0<br>C 0 0 0 1<br>D 1 0 0 0<br><br>в последовательности ACBD имеем<br><br>   A C B D<br>A 0 1 1 0<br>C 0 0 0 1<br>B 0 1 0 0 <br>D 1 0 0 0<br><br>т.е. переставляются ОДНОВРЕМЕННО соответствующие строки и столбцы.<br>Так понятно?<br><br>Примечание: в моём варианте, наличие ребра X-&gt;Y соответствует 1 в строке X и столбце Y]]></description>
        <author>volatile</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93975</guid>
        <pubDate>Fri, 22 Nov 2002 21:12:49 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93975</link>
        <description><![CDATA[Nikita: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Faust, 22.11.02, 00:32:03</span><div class='quote '>Кстати, о матрице инцидентности - фактически, графы будут изоморфны тогда и только тогда, когда из одной матрицы можно получить другую перестановкой (перенумерацией) вершин. Фактически, алгоритм тот же, но представление графов другое.</div></div>Можешь на примере показать как вот именно это делается, потому что первый способ слишком сильный. А нам вроде как говорили про этот. Просто там каким образом перестанавливать все - не понимаю.<br>]]></description>
        <author>Nikita</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93974</guid>
        <pubDate>Thu, 21 Nov 2002 22:36:12 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93974</link>
        <description><![CDATA[_Axis_: Мда, не повезло тебе немного . Дело в том, что была у меня в свое время курсовая, по графам, где в частности была проверка на изоморфность. Как раз на паскале. Но вот только во время летнего апгрейда, потерялась она вместе со всеми другими моими старенькими програмками. &nbsp;А жаль... :-/]]></description>
        <author>_Axis_</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93973</guid>
        <pubDate>Thu, 21 Nov 2002 21:32:03 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93973</link>
        <description><![CDATA[volatile: Кстати, о матрице инцидентности - фактически, графы будут изоморфны тогда и только тогда, когда из одной матрицы можно получить другую перестановкой (перенумерацией) вершин. Фактически, алгоритм тот же, но представление графов другое.]]></description>
        <author>volatile</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93972</guid>
        <pubDate>Thu, 21 Nov 2002 21:24:10 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93972</link>
        <description><![CDATA[volatile: Для начала, предположим, что графы маленькие - а то с этим алгоритмом программа до конца века не закончит.<br>Во-вторых, позволю себе воспользоваться С++ - Паскаль я начал подзабывать (read-only ;))<br><br>Итак, предположим, что речь идёт об некрашеных орграфах (крашеные получатся небольшой модификацией) - более или менее общая формулировка.<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">&#60;br&#62;class CNode //вершина графа&#60;br&#62;{&#60;br&#62;    int IncomingCount; //количество входящих рёбер&#60;br&#62;    int OutgoingCount; //количество исходящих рёбер&#60;br&#62;    CNode** IncomingNodes;//массив ссылок на &quot;входящие вершины&quot;&#60;br&#62;    CNode** OutgoingNodes;//массив ссылок на &quot;исходящие вершины&quot;&#60;br&#62;}&#60;br&#62;&#60;br&#62;class CGraph //собственно граф&#60;br&#62;{&#60;br&#62;    int Count;//количество вершин графа&#60;br&#62;    CNode** Items;//собственно вершины&#60;br&#62;}&#60;br&#62;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br><br>Очевидно, что графы с разным количеством вершин не могут быть изоморфны.<br><br>По сути, нам нужно, зафиксировав порядок вершин (в массиве)  первого графа (например, отсортировав по количеству вершин), переставлять вершины второго до тех пор, пока мы не получим искомый изоморфизм. Перебор упрощается тем, что изоморфными могут быть только вершины одного веса (с одинаковой схемой количества входящих и исходящих ребёр). Примитивный изоморфизм можно проверять, например, с помощью матрицы инцидентности.<br><br>Вопросы есть?]]></description>
        <author>volatile</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93971</guid>
        <pubDate>Thu, 21 Nov 2002 14:34:25 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93971</link>
        <description><![CDATA[Nikita: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>S.Yu.Gubanov, 21.11.02, 10:25:37</span><div class='quote '>Слова &quot;одинаковые&quot; и &quot;изоморфные&quot;, кстати, синонимы, только одно русское, а другое вражеское. Так вопрос-то, собственно, в чем? Понять какие графы считаются изоморфными друг другу, или как написать программу, которая проверит одинаковы два графа или нет? </div></div> Нда. Для моего препода смысл один - доказать ему, что я понял это. А как я понял - это уже он будет смотреть. Да, надо написать программку на паскале. Ну и понять, что же такое 2 изоморфоных графа. То есть ЧТО это - я знаю. Алгоритм нужен сам для программки. Просто списывать не хочу у других. Полгруппы уже защитили одну и ту же прогу, поменяв цвета и манеру вывода. А толк списывать - если сам не разобрался? Вот... может кто поможет \%)]]></description>
        <author>Nikita</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93970</guid>
        <pubDate>Thu, 21 Nov 2002 07:25:37 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93970</link>
        <description><![CDATA[S.Yu.Gubanov: Слова &quot;одинаковые&quot; и &quot;изоморфные&quot;, кстати, синонимы, только одно русское, а другое вражеское. Так вопрос-то, собственно, в чем? Понять какие графы считаются изоморфными друг другу, или как написать программу, которая проверит одинаковы два графа или нет?]]></description>
        <author>S.Yu.Gubanov</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93969</guid>
        <pubDate>Wed, 20 Nov 2002 23:47:44 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93969</link>
        <description><![CDATA[Nikita: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>DEiL, 20.11.02, 23:53:38</span><div class='quote '>1) биекция, действует из одной группы\поля\кольца в другое<br>2) сопряжена с бинарными операциями в группе\кольце\поле -<br>пример - F(a*b) = F(a)*F(b)<br>(* - это не умножение, это б.о.) <br>вот =)</div></div> Ого. Хоть кто-то знает. Так у нас надо графы проверять \%( Гадость. А можно на примере? Кстати - Биекция не может действовать из одной группы в другую, а наоборот - нет \%) Это, по определению биекции. А вот со вторым я немного запутался. Это как?<br>]]></description>
        <author>Nikita</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93968</guid>
        <pubDate>Wed, 20 Nov 2002 20:53:38 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93968</link>
        <description><![CDATA[DEiL: хм.. честно говоря, не знаю что есть изоморфизм относительно графов (или чего там), но вот относительно групп\колец\полей - это пожалуйста :)<br>функция F есть изоморфизм, если она:<br>1) биекция, действует из одной группы\поля\кольца в другое<br>2) сопряжена с бинарными операциями в группе\кольце\поле -<br>пример - F(a*b) = F(a)*F(b)<br>(* - это не умножение, это б.о.) <br><br>вот =)]]></description>
        <author>DEiL</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93967</guid>
        <pubDate>Wed, 20 Nov 2002 18:10:27 +0000</pubDate>
        <title>Изоморфизм - штука сильная +)</title>
        <link>https://forum.sources.ru/index.php?showtopic=9768&amp;view=findpost&amp;p=93967</link>
        <description><![CDATA[Nikita: Да простят модераторы за спам... Народ... Я тут все в Web да в Web. Тут задачку в инсте дали, написать на Pascal програмку, которая проверяет - являются ли 2 графи изоморфными или нет. Если у кого есть ссылка или кто знает как что-то подобное делать - давайте с радостью. Еще хочется посомтреть на алгоритм работы (ну это уже если модератор решит переместить - пусть перемещает тему в &quot;Алгоритмы&quot;). Данные я как хотел вводить - число вершин первого, число вершин второго. А потом - заполнять двумерный массив n*n символами 1 или 0. 1 - если присутствует путь и 0 - если нет. Графы направленные. Очень благодарен буду.]]></description>
        <author>Nikita</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	