我昨天想到个题目 来考考大家{更新公布算法了)

我昨天想到个题目 来考考大家{更新公布算法了)

昨天坐车的时候想到的,觉得有点意思
26个字母 有关

26个字母总共能组成多少个单词?
用python来设计这个程序
就是我想知道26 个字母能组成多少个单词,单个的字母也算一个单词
比aaa bbb什么的也算单词,总共有多少组合肯定不是无限的(前提是比如说6个单词 那么这个单词最后有6个字母组成 )
我自己没那么多经历去研究 只研究出一个简单的版的如下
简单的就是用过的字母不允许重复
也就是不允许 如同aa bb aab bbc之类的 一个单词的字母不允许重复

我自己只知道用过的字母不能重复的算法
比如说
1个字母 a
1种
2个字母 ab
有4种  2+1+1
3个字母abc
15种 6+4+4+1
4个字母 abcd
46种24+15+6+1
你知道我是怎么计算出来的吗 我知道算法但我不知道怎么用python 来表示
我现在公布下
算法分成两块
一块是计算n个的字母(字母个数必须为n)不重复的情况下有多少种组合
假设 a是有多少个字母 s=结果
a=1 s1=1
a=2 s2=s1X2
a=3 s3=s2X3
a=4 s4=s3X4
...以此类推 上面你看的1,2,6,24就是这么得出来的
第二快是计算n个字母在不重复情况下(允许包含所有的字母个数)有多少种组合
算法= 第一块的算法+他上一级的算法+加上对比上一级新增加的字母*N+1(代表他本身)
也就是S4+S3+N*(N-1)+N

以上就是最终算法,我是不会用python表示而已,这个是简单版本的还有高难度的留给大神去研究吧 研究简单的就搞死我了
当然你看看可能会觉得很简单 但是自己去思考也是有难度的呵呵

这个跟python有关?
你的单词中是不是字母不能重复?
排列组合通常都递归
没意思的题啊。


QUOTE:
原帖由 Lonki 于 2009-2-3 19:01 发表
排列组合通常都递归

是么?教科书上都是那么讲的还有斐波那契数列。递归真的是好的方法么?

解决点实际问题。


QUOTE:
原帖由 luffy.deng 于 2009-2-3 20:26 发表

是么?教科书上都是那么讲的还有斐波那契数列。递归真的是好的方法么?

数列 和 排列组合 还是有点距离的吧 -___-

递归追求代码简洁易懂, 递推追求高效,  具体问题具体分析 :>


QUOTE:
原帖由 Lonki 于 2009-2-4 13:59 发表



数列 和 排列组合 还是有点距离的吧 -___-

递归追求代码简洁易懂, 递推追求高效,  具体问题具体分析 :>

我宁可用循环,递归是能不用就尽量不用,毕竟递归的空间、时间开销还是很大的。


QUOTE:
原帖由 luffy.deng 于 2009-2-4 14:28 发表


我宁可用循环,递归是能不用就尽量不用,毕竟递归的空间、时间开销还是很大的。

还是那句话, 具体问题具体分析。
只要控制好数据规模, 递归的空间开销(保存栈)通常都是完全可以接受的。
你说的循环, 无非就是自己模拟堆栈的方式(回溯)。

就拿LZ这个题来说,输入包含若干字母的list/tuple,  返回全排列(每个排列中每个字母限用一次)
比如输入a b c则返回abc acb bac bca cab cba
你贴下循环的code吧