Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 18.05.2021
Сообщений: 2

Написать программу разложения произвольной подстановки в циклы

18.05.2021, 21:08. Показов 1403. Ответов 10

Студворк — интернет-сервис помощи студентам
Доброго времени суток, нужно реализовать программу разложения произвольной подставки в циклы
Даны подстановки:

u =
(1 2 3 4 5 6 7 8)
(3 8 1 2 4 5 6 7)

v =
(1 2 3 4 5 6 7 8)
(2 1 4 3 5 8 7 6)

w =
(1 2 3 4 5 6 7 8)
(2 7 1 3 8 4 5 6)

Их разложить в циклы:

u = (13)(287654)
v = (12)(34)(5)(68)(7)
w - ?

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

То есть на входе мы получаем готовую строку произвольной подстановки чисел, программа обрабатывает её, на выходе получаем цикл.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2021, 21:08
Ответы с готовыми решениями:

Задача разложения подстановки на циклы
Доброго времени суток! Изучаю Си, требуется решить такую задачу: 1. Дана подстановка, например: 2 3 4 5 6 7 8 9 4 7 5 2 3 8 6...

Алгоритм разложения подстановки на циклы
Нужна программа или же сам алгоритм или ссылки где вообще об этом можно почитать , просто не могу не чего найти , буду очень благодарен за...

Пример разложения подстановки в произведение транспозиций
Объясните пожалуйста откуда берётся часть выделенная красным.

10
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
18.05.2021, 21:41
w = (12758643)
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
19.05.2021, 10:30
Python
1
print(*(k + ' = ' + (lambda s:(lambda permutation:(lambda n:(lambda visited:'(' + ')('.join(' '.join(map(str,(dfs:=lambda i, r:r if visited[i] else (lambda actions:dfs(permutation[i], r))([r.append(i), visited.pop(i), visited.insert(i, True)]))(i, []))) for i in range(1, n) if not visited[i]) + ')')([False] * n))(len(permutation)))([0] + [int(x) for x in s.strip('()').split()]))(v) for k, v in {'u': '(3 8 1 2 4 5 6 7)', 'v': '(2 1 4 3 5 8 7 6)', 'w': '(2 7 1 3 8 4 5 6)'}.items()), sep='\n')
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
19.05.2021, 10:53
rebzik07, что конкретно не получается?
0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
19.05.2021, 10:58
Чуть быстрее:
Python
1
print(*(k + ' = ' + (lambda s:(lambda permutation:(lambda n:(lambda visited:'(' + ')('.join(' '.join(map(str,(dfs:=lambda i, r:r if i in visited else (lambda actions:dfs(permutation[i], r))([r.append(i), visited.add(i)]))(i, []))) for i in range(1, n) if i not in visited) + ')')(set()))(len(permutation)))([0] + [int(x) for x in s.strip('()').split()]))(v) for k, v in {'u': '(3 8 1 2 4 5 6 7)', 'v': '(2 1 4 3 5 8 7 6)', 'w': '(2 7 1 3 8 4 5 6)'}.items()), sep='\n')
Добавлено через 1 минуту
Цитата Сообщение от dondublon Посмотреть сообщение
rebzik07, что конкретно не получается?
Тоже хотел бы знать. Вроде задача не особо сложная.
0
0 / 0 / 0
Регистрация: 18.05.2021
Сообщений: 2
19.05.2021, 11:20  [ТС]
Проблема была в том, что изначально не было задумки, как возможно реализовать данную программу.
Принцип понятен, задание выполнено, а программы - нет.
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
19.05.2021, 11:28
А какая тут задумка?!
Словами опишите алгоритм, а потом тоже самое на яп.
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
19.05.2021, 11:51
Да, кстати, это называется перестановки, а не подстановки.
Ну вообще да, тут ничего сложного.
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,759
19.05.2021, 12:29
dondublon, разные авторы по комбинаторике и теории групп по разному называют, кто-то подстановки, кто-то перестановки.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38173 / 21108 / 4307
Регистрация: 12.02.2012
Сообщений: 34,707
Записей в блоге: 14
19.05.2021, 13:36
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def decomp_cycle(subst):
    r=""
    tmp=list(subst)
    n=len(tmp)
    while True:
        for i in range(n):
            if tmp[i] != ' ':
                p=i
                c="("+str(p+1)
                while True:
                    k=int(tmp[p])
                    tmp[p]=' '
                    p=k-1
                    if k==i+1:
                        break
                    c=c+str(k)
                c=c+")"
                r=r+c
        else:
            return r
 
print(decomp_cycle("38124567"))
print(decomp_cycle("21435876")) 
print(decomp_cycle("27138456"))
Вывод:

(13)(287654)
(12)(34)(5)(68)(7)
(12758643)
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
19.05.2021, 13:42

Не по теме:

тогда и я оставлю свой вариант)


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def f(s):
    *a, = map(int, s.split())
    v = set()
    #v = [0]*(len(a)+1)
    res = ''
    for i in range(1, len(a)+1):
        p = i
        tmp = []
        while p not in v:
            tmp.append(str(p))
            v.add(p)
            p = a[p-1]
        if tmp:
            res += '('+' '.join(tmp)+')'
            #res += '('+''.join(tmp)+')'
    return res
 
 
print(f('3 8 1 2 4 5 6 7'))
print(f('2 1 4 3 5 8 7 6'))
print(f('2 7 1 3 8 4 5 6'))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2021, 13:42
Помогаю со студенческими работами здесь

Написать программу шифрования и дешифрования методом подстановки
Написать программу шифрования и дешифрования методом подстановки!!!

Написать программу разложения функции в ряд Маклорена
Нужна помощь(очень желательно, чтобы Вы смогли описать в двух-трех словах код) в написании программы на C, которая должна раскладывать ф-ию...

Написать программу разложения (x+y) в степени n по формуле бинома Ньютона
Написать программу разложения (x+y) в степени n по формуле бинома Ньютона. Число n вводится с клавиатуры.

Написать программу, вычисляющую функцию методом разложения в ряд
при выполнении программы число "n" получается слишком большим, прошу помощи #include <iostream> #include <cmath> ...

Написать программу вычисляющую sin X по формуле разложения в степенной ряд
• Написать программу вычисляющую sin X по формуле разложения в степенной ряд Добавлено через 1 минуту Проще говоря нужна помощь с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru