Algorithm 具有奇怪循环重复的唯一置换

Algorithm 具有奇怪循环重复的唯一置换,algorithm,matlab,permutation,perms,Algorithm,Matlab,Permutation,Perms,我有一些像这样的字符串: 'RRSSTT' 'RRRSSSTTT' 'RRRRSSSSTTTT' etc... 我需要提取具有此属性的所有唯一置换: “RRSSTT”RRTTSS';'SSRRTT';'SSTTRR';'TTRRSS';'TTSSRR'都是相同的字符串,并且 “RSTRST”RTSRTS';'TSRTSR';'TRSTRS';'SRTSRT';'STRSTR'都是相同的字符串 使用命令perms我获得所有排列(若字符串有6个元素,则排列为720)。 使用upermsscr

我有一些像这样的字符串:

'RRSSTT'
'RRRSSSTTT'
'RRRRSSSSTTTT'
 etc...
我需要提取具有此属性的所有唯一置换:

  • “RRSSTT”RRTTSS';'SSRRTT';'SSTTRR';'TTRRSS';'TTSSRR'都是相同的字符串,并且
  • “RSTRST”RTSRTS';'TSRTSR';'TRSTRS';'SRTSRT';'STRSTR'都是相同的字符串
使用命令
perms
我获得所有排列(若字符串有6个元素,则排列为720)。 使用
uperms
script,我获得所有唯一的排列(如果字符串有6个元素,则排列为90)。我在mathworks()上找到了
uperm

在这里之前,所有这些都是可行的,但我需要编写/找到一个生成具有上述特殊属性的置换的其他算法。 如果字符串为“RRSSTT”,则所需的排列必须为15

有人已经面临这个问题,可以帮助我吗

------编辑------

有15根等效管柱,例如:

Group 1:          Group 6:        Group 11:

'RSTTSR'         'RSTSTR'         'RSSTRT'
'SRTTRS'         'SRTRTS'         'STSRRT'
'STRRTS'         'STRTRS'         'RSRTTS'
'RTSSTR'         'TRSRST'         'STTRSR'
'TRSSRT'         'TSRSRT'         'TRRSTS'
'TSRRST'         'RTSTSR'         'TRTSSR'

Group 2:          Group 7:        Group 12:

'RSTRST'         'RSSRTT'         'RSSTTR'
'SRTSRT'         'SSTRRT'         'SRRTTS'
'STRSTR'         'RRSTTS'         'STTRRS'
'RTSRTS'         'STTSRR'         'TRRSST'
'TRSTRS'         'TRRTSS'         'TSSRRT'
'TSRTSR'         'TTRSSR'         'RTTSSR'

Group 3:          Group 8:        Group 13:

'RSTSRT'         'SRRSTT'         'SRSTTR'
'STRSRT'         'SSRTTR'         'SRRTST'
'RSTRTS'         'RRTSST'         'RTRSST'
'STRTSR'         'TSSTRR'         'TSSRTR'
'TRSRTS'         'RTTRSS'         'TSTRRS'
'TRSTSR'         'TTSRRS'         'RTTSRS'

Group 4:          Group 9:        Group 14:

'SRTRST'         'RSRSTT'         'RRSSTT'
'SRTSTR'         'SSRTRT'         'SSRRTT'
'RTSRST'         'STSTRR'         'SSTTRR'
'TSRSTR'         'RRTSTS'         'RRTTSS'
'RTSTRS'         'TRTRSS'         'TTRRSS'
'TSRTRS'         'TTSRSR'         'TTSSRR'

Group 5:          Group 10:        Group 15:

'STRRST'         'SRSRTT'         'SRSTRT'
'RSTTRS'         'SSTRTR'         'RSRTST'
'SRTTSR'         'RRSTST'         'STSRTR'
'RTSSRT'         'TSTSRR'         'RTRSTS'
'TRSSTR'         'RTRTSS'         'TSTRSR'
'TSRRTS'         'TTRSRS'         'TRTSRS'
我需要为每个组返回一个字符串,我更喜欢以R作为第一个字母的字符串。 对不起,换了符号

-----编辑1-----

我会尽力解释原因

str1='RSTRST' 

它们是等价的

你必须在STR1中考虑“R”,用“S”代替“R”,用“T”代替“S”,最后用“R”代替“T”。一个组中的所有字符串都是正确的,但在每个组中,所有字符串都是等效的,我只需要从每个组中提取一个字符串


正如比克所说,字符替换规则并不总是有效的,我需要找到合适的角色。

我想现在我理解了你的代码,这将解决问题:

  • 使用
    uperm
    生成包含所有可能解决方案的集合
  • 对于
    uperm
    返回的每个解决方案,调用
    [a]=unique(解决方案,'stable')
    ,并仅在返回
    RST
    时(或任何固定订单)接受它

我真的不知道您想要保留哪些排列。您能列出允许的
'aabbcc'
排列吗?或者告诉我们你用什么规则来获得排列?@bicker我添加了一些例子,很抱歉改变了符号。我不明白这四组的意思。对于一个输入示例,您能给出您期望的所有15种排列吗?以及一些不应包括在原因中的示例(例如,不包括ABC,因为CDE已经包括在内)@Daniel尽快我将完成所有其他组您的组不一致。组中的某些排列是同一组中其他字符串的字符替换,其他排列是循环旋转。您需要告诉我们您使用什么规则来选择组(或更正您的示例)。例如,在第7组中:
'RSSRTT'
'RRSTTS'
'TRRTSS'
。这三个字符串怎么可能相互关联?谢谢,我正在尝试使用它,我很快会告诉你一些事情。我已经尝试过了,但我认为这不是正确的方法。试着观察第3组,有两个字符串
唯一(解决方案,'stable')
返回
RST
。相反,在第8组中,没有返回
RST
的字符串。也许字符串之间没有明显的相关性,我只能模拟物理问题对这些字符串进行分组@达涅利刚刚意识到我对你们的团队有错误的理解,因为。为什么RSTSRT和RSTRT是一样的?我本以为他们会分成不同的小组。
str2='STRSTR'