奇怪的循环重复的唯一排列

时间:2016-01-29 16:22:41

标签: algorithm matlab permutation perms

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

'RRSSTT'
'RRRSSSTTT'
'RRRRSSSSTTTT'
 etc...

我需要使用此属性提取所有唯一排列:

  • ' RRSSTT' ; ' RRTTSS' ; ' SSRRTT' ; ' SSTTRR' ; ' TTRRSS' ; ' TTSSRR'都是相同的字符串,
  • ' RSTRST' ; ' RTSRTS' ; ' TSRTSR' ; ' TRSTRS' ; ' SRTSRT' ; '的strstr'都是一样的字符串。

使用命令perms,我获得所有排列(如果字符串有6个元素,则排列为720)。 使用uperms脚本,我获得所有唯一的排列(如果字符串有6个元素,排列是90)。我在mathworks(http://www.mathworks.com/matlabcentral/fileexchange/27321-unique-random-permutations)上找到了uperm

直到这里一切正常,但我需要编写/找到一个其他算法来生成具有上述特殊属性的排列。 如果字符串是' RRSSTT'期望的排列必须是15。

有人已经遇到过这个问题,可以帮助我吗?

------ ------ EDIT

有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' 

str2='STRSTR' 

是等价的。

你必须考虑' R'在str1中用' S替换它,替换' S'用' T'最后' T'与' R'。组中的所有字符串都是正确的,但在每个组中,所有字符串都是等效的,我需要从每个组中只取一个字符串。

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

1 个答案:

答案 0 :(得分:1)

我认为现在我理解了你的代码,这可以解决它:

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