加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 将字符串分解并重新排列为所有可能的组合

发布时间:2020-12-16 01:45:21 所属栏目:百科 来源:网络整理
导读:我想分解并重新排列一个字符串到所有可能的组合 说我有一个字符串:ABCDEF 我想将其分解并输出所有可能的组合 组合(6,6)= 1 ABCDEF 组合(6,5)= 6 BCDEFACDEFABDEFABCEFABCDFABCDE 组合(6,4)= 15 BCDEACDEABDEABCE............etc. 组合(6,3)= 20 BCDACD...et
我想分解并重新排列一个字符串到所有可能的组合

说我有一个字符串:ABCDEF

我想将其分解并输出所有可能的组合

组合(6,6)= 1

ABCDEF

组合(6,5)= 6

BCDEF
ACDEF
ABDEF
ABCEF
ABCDF
ABCDE

组合(6,4)= 15

BCDE
ACDE
ABDE
ABCE
....
....
....
etc.

组合(6,3)= 20

BCD
ACD
...
etc.

组合(6,2)= 15
????公元前
????AB
????等等

但是,ouptut也必须按字母顺序排列.

我该怎么做?

谢谢!任何帮助将不胜感激!

解决方法

您可以从Knuth Volume 4,Fascicle 3获得算法(实际上是其中一些),但您必须将其从数学符号转换为C#.

更新:当我更多地考虑这个问题时,分册2(生成排列)实际上更有帮助.您可以从http://www-cs-faculty.stanford.edu/~knuth/fasc2b.ps.gz免费下载它,但您需要使用gunzip和PostScript预览器来阅读它.生成字符串“ABCDE”的子集是很容易的部分.将其转换为数组{‘A’,’B’,’C’,’D’,’E’},运行从0到2 ^ N-1的for循环,其中N是数组长度,并处理每个值作为你要保留的元素的位掩码.因此00001,00010,00011,…给你“A”,“B”,“AB”,……

困难的部分是生成每个子集的所有排列,因此你得到“ABC”,“BAC”,“CAB”等.强力算法(如在其他答案之一中)将起作用但如果非常慢,如果字符串很长. Knuth有一些快速算法,如果首先对原始字符串进行排序,其中一些将按字母顺序生成排列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读