24、算法探索:Johnson - Trotter 与蜘蛛旋转算法解析

算法探索:Johnson - Trotter 与蜘蛛旋转算法解析

1. Johnson - Trotter 算法介绍

Johnson - Trotter 算法是一种用于生成给定列表所有排列的方法,其特点是从一个排列到下一个排列的转换通过相邻元素的单次换位来实现。我们的目标是计算该算法的无循环版本,主要思路是利用广义蛇形积 boxall 的无循环程序。

2. 递归公式

对于长度大于 1 的列表,其转换是根据长度为 n - 1 的列表的转换递归定义的。给列表元素从 0 到 n - 1 标记位置,列表表示为 xs ++ [x] 。首先进行向下运行 [n - 1, n - 2, ..., 1] ,其中转换 i 表示“交换位置 i 和位置 i - 1 的元素”,这会将 x 从最后位置移动到第一个位置。例如,对字符串 “abcd” 应用转换 [3, 2, 1] 会得到三个排列 “abdc”、“adbc” 和 “dabc”。

接下来,假设生成 xs 排列的转换为 [j1, j2, ...] ,对当前排列 [x] ++ xs 应用转换 j1 + 1 (因为 xs 现在相对于 x 向右移动了一个位置),

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值