powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
25 сообщений из 31, страница 1 из 2
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38686284
Есть ли какой-то простой и известный способ генерации случайного регулярного графа степени 2 , 2-регулярного графа, но состоящего из 1 цикла, а не из разрозненных?
Т.е. есть ли что-то лучше, чем:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
unsigned graph[n];
unsigned i, y, x, old_x = 0;

for(i = 0; i < n; ++i) graph[i] = MAX_VAL;

for(i = 0; i < n; ++i) {
  x = rand()*rand() % n;
  for(y = 0; y < n && graph[x] != MAX_VAL; ++i)
    x = (x+1) % n;
  graph[old_x] = x;
  old_x = x;
}
 



P.S.
Т.е. нужно сгенерировать такой граф, чтобы в итоге можно было его обойти полностью таким способом:
Код: plaintext
1.
2.
3.
4.
unsigned i, x = 0;
for(i = 0; i < n; ++i) {
 x = graph[x];
}


и мы бы прошли по всем элементам без исключения.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38686726
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы из постановки убрал фразу "случайного". Иначе это какая-то забавная игра получается.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38686780
maytonЯ-бы из постановки убрал фразу "случайного". Иначе это какая-то забавная игра получается.
Но нужен то именно случайный, для тестов random-read :)
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38686843
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-регулярный граф,

если посмотреть по ссылке то 0-регулярный генерить легко. Это просто вершины.
1 -регулярный требует чётного числа вершин. Тоже легко. 2-х регулярный
- количество вершин кратно 3.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38686891
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-регулярный граф,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TForm1.Button9Click(Sender: TObject);
const
  n= 10;
var
  g: array[0..n-1] of integer;
  i, j, t: integer;
begin;
  g[0]:=high(g);
  for i:=high(g) downto low(g)+1 do g[i]:=i-1;
  for i:=high(g) downto low(g)+1 do begin;
    j:=Random(i+1);
    t:=g[i]; g[i]:=g[j]; g[j]:=t;
    end;
  Memo1.Lines.Text:='';
  for i:=high(g) downto low(g) do Memo1.Lines.Add(IntToStr(g[i]));
  end;
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38686927
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не так понял условия, вот правильный код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TForm1.Button9Click(Sender: TObject);
const
  n= 4;
var
  g: array[0..n-1] of integer;
  i, j, t: integer;
begin;
  g[0]:=0;
  for i:=low(g)+1 to high(g) do begin;
    j:=Random(i);
    t:=g[j]; g[j]:=i; g[i]:=t;
    end;
  Memo1.Lines.Text:='';
  for i:=low(g) to high(g) do Memo1.Lines.Add(Format('%d %d',[i,g[i]]));
  end;
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38687024
mayton2-регулярный граф,

если посмотреть по ссылке то 0-регулярный генерить легко. Это просто вершины.
1 -регулярный требует чётного числа вершин. Тоже легко. 2-х регулярный
- количество вершин кратно 3.
Это вы по картинке посмотрели? В стиле найдите закономерности
Немножко не так, изображенные 3 вершины в каждом цикле это просто случайность.
2-регулярный граф ничего не говорит про количество вершин, он говорит лишь, что из каждой вершины исходит по 2 ребра.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38687027
Aleksandr Sharahovне так понял условия, вот правильный код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TForm1.Button9Click(Sender: TObject);
const
  n= 4;
var
  g: array[0..n-1] of integer;
  i, j, t: integer;
begin;
  g[0]:=0;
  for i:=low(g)+1 to high(g) do begin;
    j:=Random(i);
    t:=g[j]; g[j]:=i; g[i]:=t;
    end;
  Memo1.Lines.Text:='';
  for i:=low(g) to high(g) do Memo1.Lines.Add(Format('%d %d',[i,g[i]]));
  end;


Это вы генерируете множество циклов графов по 3 вершины? mayton немного не правильно сказал, там не обязательно по 3 вершины.
И по первоначальному условию должен быть 1 цикл.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38687049
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2-регулярный граф,

Генерируется 1 цикл.

P.S. Можно обойтись без промежуточного присваивания значения переменной t.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38688580
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то я не понял сложности вопроса. Ну например на php самый простой способ, это создать массив и n последовательных элементов и потом его перемешать (не совсем понял принцип прохода по вершинам во втором цикле, но предложенный вариант сработает):
Код: php
1.
2.
$arr = range(0, 99);
shuffle($arr);



На выходе в $arr нужная последовательность.

P.S. на любом другом языке думаю всё ровно так же... на питоне точно... в С++ смотрю есть метод random_shuffle, не знаю то же ли делает, но думаю то же.
В чём сложность то? :)
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38688646
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Я так и сделал сначала, но это не гарантирует,
что полученная будет содержать ровно 1 цикл.
Во втором решении я это учел.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38688656
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovПрограмёр,

Я так и сделал сначала, но это не гарантирует,
что полученная будет содержать ровно 1 цикл.
Во втором решении я это учел.

а... ну да... я бы сказал так, может получиться так, что мы получим несколько незамкнутых графов (когда в graph[x] будет записано само значение x)

суть - надо убедиться, что номер каждого элемента не соответствует его значению. Если соответствует - перемешать вручную (ну то есть вызвать random, убедиться, что выпало значение отличное от значения меняемого элемента и поменять местами этот элемент и элемент под выпавшим номером).

Мне что-то показалось что твой вариант по теории вероятности даст неодинаковые вероятности для разных элементов оказаться на некотором месте. Но похоже я ошибся) сижу, считаю
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689047
Фотография Рэт-нагфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr SharahovПрограмёр,

Я так и сделал сначала, но это не гарантирует,
что полученная будет содержать ровно 1 цикл.
Во втором решении я это учел.
ну вы блин даете
Как это "не гарантирует"?
Номера вершин: 1, 2, 3, 4, 5
Перемешали: 4, 1, 5, 3, 2
Вот вам и граф с одним циклом: 4 - 1 - 5 - 3 - 2 - 4
Вы уже такую хрень пишете, что прямо не знаю
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689052
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рэт-нагфикAleksandr SharahovПрограмёр,

Я так и сделал сначала, но это не гарантирует,
что полученная будет содержать ровно 1 цикл.
Во втором решении я это учел.
ну вы блин даете
Как это "не гарантирует"?
Номера вершин: 1, 2, 3, 4, 5
Перемешали: 4, 1, 5, 3, 2
Вот вам и граф с одним циклом: 4 - 1 - 5 - 3 - 2 - 4
Вы уже такую хрень пишете, что прямо не знаю

Рандомное перемешивание не гарантирует, что все элементы окажутся не на своих местах. Потому возможен вариант 4 - 1 - 3 - 2 - 5. В таком случае получается незамкнутый граф (и никакого цикла там не будет). Надо убедиться, что ни одно число не осталось на своём месте. Впрочем я об этом уже написал ))
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689057
Фотография Рэт-нагфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

с чего он вдруг незамкнутый?
Мы же автоматом начало массива смыкаем с его концом.

> Надо убедиться, что ни одно число не осталось на своём месте.

Что такое это "свое место"? Вы хоть сами понимаете о чем пишете?
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689107
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рэт-нагфикAleksandr SharahovПрограмёр,

Я так и сделал сначала, но это не гарантирует,
что полученная будет содержать ровно 1 цикл.
Во втором решении я это учел.
ну вы блин даете
Как это "не гарантирует"?
Номера вершин: 1, 2, 3, 4, 5
Перемешали: 4, 1, 5, 3, 2
Вот вам и граф с одним циклом: 4 - 1 - 5 - 3 - 2 - 4
Вы уже такую хрень пишете, что прямо не знаю

Уважаемый Рэт-нагфик,
вероятно, вам как человеку, хорошо знакомому с программированием и, надеюсь,
элементарной логикой, хорошо известно, что один положительный пример
ничего не доказывает, в то время как один отрицательный пример опровергает доказательство.

Поэтому, если вас не затруднит, пожалуйста, точно укажите,
где, по-вашему, написана хрень, и докажите, что это хрень.

P.S. Простое перемешивание, которое, как я понимаю, вы предлагаете,
автору не подходит, т.к. при этом вполне может получиться граф,
у которого каждая вершина не связана ни с одной другой.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689131
Фотография Рэт-нагфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

вот даже не знаю что и сказать.
Есть граф, кольцо из вершин 1-2-3-4-5-1
Берем любую случайную перестановку из пяти чисел 1,2,3,4,5
и получаем "новый" граф, с пятью вершинами, просто пере-называя вершины.
По "форме" это будет новый граф, но по сути, есно, тот же самый.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689144
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рэт-нагфикAleksandr Sharahov,

вот даже не знаю что и сказать.
Есть граф, кольцо из вершин 1-2-3-4-5-1
Берем любую случайную перестановку из пяти чисел 1,2,3,4,5
и получаем "новый" граф, с пятью вершинами, просто пере-называя вершины.
По "форме" это будет новый граф, но по сути, есно, тот же самый.

Во-первых, вы не ответили на вопрос относительно вашей хрени.

Во-вторых, вы описали ваш алгоритм на пальцах.
Теперь попробуйте дать чуть более строгое описание,
чем вы это обычно делаете в другом форуме.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689207
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рэт-нагфикAleksandr Sharahov,

вот даже не знаю что и сказать.
Есть граф, кольцо из вершин 1-2-3-4-5-1
Берем любую случайную перестановку из пяти чисел 1,2,3,4,5
и получаем "новый" граф, с пятью вершинами, просто пере-называя вершины.
По "форме" это будет новый граф, но по сути, есно, тот же самый.

Что значит "переназываем вершины"? У вершин графа нету названия, есть только номера. В данном случае число, записанное в элементе массива указывает связь между данной вершиной, и той, номер которой записан. То есть graph[2] = 4 - значит, что вторая вершина связана с четвёртой.

а теперь представим, мы запустили алгоритм СЛУЧАЙНОЙ перестановки чисел в массиве, и на выход (вероятность мала, но всё же) получили тот же ряд - 1,2,3,4,5. Это значит, что первая вершина связана с первой (сама с собой), вторая со второй и т.д. В итоге получаем граф без рёбер (то есть ни одна вершина не связана с какой либо другой).


P.S. из слов "переназываем", я понимаю, что ты представляешь себе запись не так как автор. Потому в принципе ты тоже прав. Ты себе представляешь, что первый элемент массива связан со вторым, второй с третьим и т.д. Потому, перераспределив номера в массиве по новой мы получаем граф с теми же параметрами, но с другим списком связей. Автору же нужно, что бы в каждом элементе лежал не его собственный номер, а именно номер той вершины, с которой существует связь (опять же, если в элемента 2 лежит число 4, значит из 2 можно проследовать в 4).
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689285
Фотография Рэт-нагфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрАвтору же нужно, что бы в каждом элементе лежал не его собственный номер, а именно номер той вершины, с которой существует связь (опять же, если в элемента 2 лежит число 4, значит из 2 можно проследовать в 4).
да, при таком подходе граф, в общем случае, распадется на несколько несвязных компонент.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689457
Фотография Рэт-нагфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все коды , что выше, - нормально и правильно,
но лично я делал бы вот как (мне просто так проще):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[2, 3, 4, 5, 1]

shuffle([1, 2, 3, 4, 5]) -> [4, 1, 5, 3, 2]

4 1
1 5
5 3    <- массив N x 2, N = 5;
3 2
2 4

[5, 4, 2, 1, 3] <- сюда собрали ризалт шаффла;



все операции здесь однопроходные
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689494
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рэт-нагфикВсе коды , что выше, - нормально и правильно,


Могли бы просто в своем непревзойденном стиле сказать,
вы раньше уже такую хрень написали, что прямо не знаете.

Рэт-нагфикно лично я делал бы вот как (мне просто так проще):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[2, 3, 4, 5, 1]

shuffle([1, 2, 3, 4, 5]) -> [4, 1, 5, 3, 2]

4 1
1 5
5 3    <- массив N x 2, N = 5;
3 2
2 4

[5, 4, 2, 1, 3] <- сюда собрали ризалт шаффла;



все операции здесь однопроходные

Это все еще не алгоритм, но уже кое-что, что можно обсудить:
1. Очевидно, вы используете больше памяти, чем требуется для решения задачи.
2. Совершенно непонятно, чем, по-вашему, все эти "однопроходные операции"
проще одного цикла из двух операторов?
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689542
Фотография Рэт-нагфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov2. Совершенно непонятно, чем, по-вашему, все эти "однопроходные операции" проще одного цикла из двух операторов?
Ничем не проще, просто так мне проще.
К тому же, это будет работать быстрее, но это не критично.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689558
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рэт-нагфикAleksandr Sharahov2. Совершенно непонятно, чем, по-вашему, все эти "однопроходные операции" проще одного цикла из двух операторов?
Ничем не проще, просто так мне проще.
К тому же, это будет работать быстрее, но это не критично.

Хотите сказать, что ваш код быстрее этого, или просто вы так думаете?

Код: pascal
1.
2.
3.
4.
  for i:=low(g)+1 to high(g) do begin;
    j:=Random(i);
    g[i]:=g[j]; g[j]:=i; 
    end;



Хотелось бы, наконец, увидеть ваш супербыстрый код.
...
Рейтинг: 0 / 0
Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
    #38689561
Фотография Рэт-нагфик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov,

тут собсно и не должно быть никакого алгоритма.
Шаффлом мы переименовываем вершины, а дальше уже и делать-то больше нечего.
Был стартовый массив [2, 3, 4, 5, 1]
Потом сделали:

shuffle([1, 2, 3, 4, 5]) -> [4, 1, 5, 3, 2]

Вершина №1 теперь получает имя №4, а №2 - имя №1 и т.д.

Разве трудно, зная эти новые имена, получить ответ, в виде:

[5, 4, 2, 1, 3]
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Есть ли простой и известный способ генерации 2-регулярного графа состоящего из 1 цикла?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]