26个字母组合算法--急



------
想实现如下内容:
  有a-z 26个字母,如何实现所有字母的组合。产生的位数为1到26
  产生结果为:
  a,b,..z
  ab....az
  ba....bz
  abc...abz 
  abcdefg..a----abca。。Z
求算法。
 
------
说具体点
------
把26个字母放到数组中

------
26个字母A-Z的组合算法,产生的位数就有1位,最多26位字母组成啊。
目的是生成所有的英文单词。(不区分大小写)
------
引用 3 楼 hejiwang 的回复:
26个字母A-Z的组合算法,产生的位数就有1位,最多26位字母组成啊。
目的是生成所有的英文单词。(不区分大小写)

------
26进制。
------
26次内嵌循环。

------
引用楼主 hejiwang 的帖子:
想实现如下内容: 
  有a-z 26个字母,如何实现所有字母的组合。产生的位数为1到26 
  产生结果为: 
a,b,..z
ab....az
ba....bz
abc...abz
abcdefg..a----abca。。Z
求算法。 
  

------
这个循环是26^26,普通的计算机够呛的。。。
------
LZ的意思是每个字母只能出现一次?
26+25+24+23+……+3+2+1个。
------
引用 3 楼 hejiwang 的回复:
26个字母A-Z的组合算法,产生的位数就有1位,最多26位字母组成啊。 
目的是生成所有的英文单词。(不区分大小写)

------
是全排列吗?全排列是26!个结果。

一辈子输出都输出不完的。
------
厉害
------
你想把所有英语单词组合出来吗。..
------
mark
------
看来楼主的意思要把所有的字母组合排列出来。
------
很稀奇的想法。学习~
------
不行吧,要26个字母的排列组合,
不用想啦,根本不可能能全部列出来

组合个数(这里只列26个全用上的组合)
26*25*24*23......5*4*3*2种组合
------
11个字母的全排列组合就为
39916800,

我机子不敢跑15个字母以上,
------
a~z 看作是一个2进制的26位。

从1开始+1,
比如加到
0000..0010011
那么组合就是eba即abe

最后的组合肯定是111.....111
a...z
------
引用 23 楼 csrwgs 的回复:
a~z 看作是一个2进制的26位。

从1开始+1,
比如加到
0000..0010011
那么组合就是eba即abe

最后的组合肯定是111.....111
a...z

------
我是伸手党 来学习的
------
题目描述不够清楚吧..
------
别算,,以现在最好的计算机来算,,都要100年,,,早就有人提过了
------
递归就行
------
百度面试题,直接用a-z表示26进制
由26进制转换到10进制即可得出值!!!!
------
哦,看错了,呵呵。
这个貌似需要递归,呵呵。
------
建议看看刘慈欣的<诗云>


------
fsdfsdfsdfsdf
------
thanks!!!!
------
呵呵,递归
------
路过学习!
------
up
------
百度面试题,直接用a-z表示26进制 
由26进制转换到10进制即可得出值!!!!
------
学习一下
------
用回溯法遍历解空间就可以了.
------
不错,有创意的算法
------
天文级计算量,你的机器要哭了,可能这辈子也算不完了
------
26个字母全排列?
吃饱了没事干,无解
------
mark
------
mark
------
d
------
注意看Excel表的列号,就是LZ说的这个意思哦!
我写了个算法,任意给出个列号,能生成对应的数值.
------
mark
------
厉害,想点好的算法。。。。。。。兴许可能。。。。。
------
up
------
引用 5 楼 wuyi8808 的回复:
26进制。

------
其实我也想问下的
------
关于自定义全排列和全组合看我这里的解答
http://topic.csdn.net/u/20081015/09/524c5d5f-d4c8-4715-bfbb-c8076d921fa5.html
------
很新奇的想法,
------
算法..........学习下.
------
这纯粹是个排列组合的数学问题啊!
找本数学书,看看关于排列的公式,就可以了。
------
Mark!
------
好像描述的不够清楚呀
------
引用楼主 hejiwang 的帖子:
想实现如下内容:
有a-z 26个字母,如何实现所有字母的组合。产生的位数为1到26
产生结果为:
a,b,..z
ab....az
ba....bz
abc...abz
abcdefg..a----abca。。Z
求算法。


------
如过是将26个字母进行全排列那是26!个 如果字母可以重复使用的话 将是26的26次方 真够难的
------
排列与组合
26*25*24*23*22*21*20*19*18*17*16*15*14*13*12*11*10*9*8*7*6*5*4*3*2
------
403291461126605635584000000
这么多种哦~你怎么写程序列出来哦~死咯~
------
还要可以重复~楼主~你这是强人所难啊~
------
每个字母应该是不允许有重复的那种排序吧.
------
数组的子集个数 = 2 的 [数组长度] 次方个集合 - 1
采用位映射算法,即将数组影射为位举个例子
数组:a b c d e f
全集:1 1 1 1 1 1
空集:0 0 0 0 0 0
那么子集即从1至二进制数字111111(即数字63)里的所有数字的二进制01对应关系,0表示非数组元素,1在二进制里的位置对应数组中元素的位置,例如:
星号表示未对应数组元素位置
数字 二进制 子集
1 000001 * * * * * f
2 000010 * * * * e *
3 000011 * * * * e f
4 000100 * * * d * *
5 000101 * * * d * f
......
63 111111 a b c d e f

------
正经来算,个数应当有

26^26 + 26^25 + 26^24........ + 26^2 + 26^1 约定于 6.4 * 10^36

种组合。

感觉这种组合没什么意义,不知道为什么总长度定为26,也许有比26更长的单词,或者最长的单词也就10多位,没必要弄26呀!

这种组合的意义在于:

用硬盘存下,需要6.4 * 10^24 T,数据量相当于6.4 * 10^20个Google(10000T以内),比当前全球的数据加在一起还多。(还不能用unicode)
用计算机算,假设每秒可计算10亿次(富裕一点),需要6.4 * 10^27,秒,全球计算机(假设有60亿台)都帮你算,需要10^18秒,约等于300亿年。(计算复杂度还得是o(n))
存这么多的数据得用磁盘阵列吧,如果用便宜的IDE阵列,用超前的2T的硬盘作阵列,硬盘的厚度按照0.5cm算(够薄吧!),摸着嫦娥绝对没有问题,碰着太阳也没问题。
换一种正方体硬盘来存假设硬盘尺寸为(2 * 2 * 2cm),容量为1T(这硬盘很小巧吧!),不管散热,都排在一起,需要边长为3700KM的一个立方体阵列柜。
------
感觉题目没说明白,学过概率的都能算出来有多少种组合吧。。
------
两种没有什么区别!
------
我只有一句话:受不了!

有想法的话还不如考虑如何把键盘上的百十个键全排列一下——破解密码!

那样的话,又有个新问题,使用全世界的计算机联合运算需要多长时间?
------
别算了。用26进制是最好的方法,但若要排列26个字母(包含26)以下的字符串其数量是26的25次方,这个可是N个天文数字。算了一下是2.3677383000796758887679516493847e+35,假设全球有10亿台电脑,每台电脑CPU性能为10G,自加1只需1周期,所有电脑同时计算,这样遍历速度可达10^19次/秒。但仍然需要23677383000796758.88767951649384秒;6577050833554.6552465776434705111个小时;274043784731.4439686074018112713天;750804889.67518895508877208567478年;7508048.8967518895508877208567478个世纪!
------
楼上的,强!
------
這個問題用在EXCEL中列的數字轉字母
------
 
 
  呵呵,让楼主见鬼去吧
------
我是新手对这样的问题根本没有思路
------
显然,无良楼主想玩死所有人啊!等下我用我的小霸王调试下!我的内存才56B..估计够了吧
------
不懂得
------
强呀
------
26的1次方为:26
第1次时,26个字母的组合有:26
26的2次方为:676
第2次时,26个字母的组合有:702
26的3次方为:17576
第3次时,26个字母的组合有:18278
26的4次方为:456976
第4次时,26个字母的组合有:475254
26的5次方为:11881376
第5次时,26个字母的组合有:12356630
26的6次方为:308915776
第6次时,26个字母的组合有:321272406
26的7次方为:8031810176
第7次时,26个字母的组合有:8353082582
26的8次方为:208827064576
第8次时,26个字母的组合有:217180147158
26的9次方为:5429503678976
第9次时,26个字母的组合有:5646683826134
26的10次方为:141167095653376
第10次时,26个字母的组合有:146813779479510
26的11次方为:3.67034448698778E+15
第11次时,26个字母的组合有:3.81715826646729E+15
26的12次方为:9.54289566616822E+16
第12次时,26个字母的组合有:9.92461149281495E+16
26的13次方为:2.48115287320374E+18
第13次时,26个字母的组合有:2.58039898813189E+18
26的14次方为:6.45099747032972E+19
第14次时,26个字母的组合有:6.7090373691429E+19
26的15次方为:1.67725934228573E+21
第15次时,26个字母的组合有:1.74434971597716E+21
26的16次方为:4.36087428994289E+22
第16次时,26个字母的组合有:4.5353092615406E+22
26的17次方为:1.13382731538515E+24
第17次时,26个字母的组合有:1.17918040800056E+24
26的18次方为:2.94795102000139E+25
第18次时,26个字母的组合有:3.06586906080145E+25
26的19次方为:7.66467265200362E+26
第19次时,26个字母的组合有:7.97125955808376E+26
26的20次方为:1.99281488952094E+28
第20次时,26个字母的组合有:2.07252748510178E+28
26的21次方为:5.18131871275445E+29
第21次时,26个字母的组合有:5.38857146126462E+29
26的22次方为:1.34714286531616E+31
第22次时,26个字母的组合有:1.4010285799288E+31
26的23次方为:3.50257144982201E+32
第23次时,26个字母的组合有:3.64267430781489E+32
26的24次方为:9.10668576953722E+33
第24次时,26个字母的组合有:9.4709532003187E+33
26的25次方为:2.36773830007968E+35
第25次时,26个字母的组合有:2.46244783208286E+35
26的26次方为:6.15611958020716E+36
第26次时,26个字母的组合有:6.40236436341544E+36

------
楼主的意思是 26个字母, 1个字母到26个字母无顺序的排列。。。不是26!那么简单。。。。

很多呀,

1个字母:26
2个字母:26*26
...
26个字母:26的26次方。。。。。。

最后结果应该是所有种类之和: 26+26*26+26*26*26+...+26的26次方

-。-
------
路过
------
现在达不到这种要求,但将来的人类一定会实现的

 人类的智慧
------
把26个字母放在组里
然后以26进制(如a~z),从a数到zzzzzzzzzzzzzzzzzzzzzzzzzz就ok了.


如下,代码仅供参考.应该可以重构.
char list[25];
memset(list,0,26);
string pf = 0;
while(1)
{
  for(int a = 0 ;a < 26;a++)
  {
  for(int b = 0 ;b < 26;b++)
  { .
  .
  .
  共26层
  //最内层
  for(int z = 0; z < 26; z++)
  {
  if(list[25] < 123)
  {
  list[25]++ ; 
  printf(list);
  }
  }
  if(list[1] < 123)
  {
  list[1]++ ; 
  printf(list);
  }

  .
  .
  if(list[1] < 123)
  {
  list[1]++ ; 
  printf(list);
  }

  }
   
  if(list[0] < 123)
  {
  list[0]++ ; 
  printf(list);
  }
  }
}
------
提供一种思路吧。定义循环{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,}之后就可以用for来实现了
C#学的不多。在清华大学出版的C++教科书中有个关于{win,lose,pin}这样类似的例子
------
呵呵 学习的

------
26进制依次+1递增
这样应该就可以出LZ要的那个排列了

不过要全部排列出来那个量也太大了把

就单单全部是26个字母的排列就是26!

我的机器就不敢出运行了

那位有简单的想法
------
没算完, 电脑就完玩了....
------
没搞懂是排列还是组合啊,可以参考下组合数学里的算法
------
同感,题目没有说清楚,说的是组合,但是下面给的貌似又有顺序,到底有没有顺序,不清不楚,

看来是p26,1+p26,2+....+p26,26这么多种可能了,如果用26个嵌套循环从1层到26层的,就是最简单的思路了,只要实现就行了吧,貌似又没提别的要求

感觉递归也可以,回朔也可以
------
18楼的不错 嘿嘿 都是高手
桂ICP备07017180号