0 0

一个算法问题5

完成一个方法,返回一种排列组合的所有字符串结果的数目。排列组合的规则如下:

1)排列组合的的字符串由a~z 26个小写字母组成;

2)方法入参为每个字符串长度;

3)每个字符串中的后一个字符的字母顺序要大于前一个字符; 例如:abc 合法;bac、aac 不合法;

这个问题没有头绪,递归好像不好实现,望大家答疑解惑!

2014年8月20日 13:59

7个答案 按时间排序 按投票排序

0 0

采纳的答案

aac不行,说明不能重复
1~26个不重复
x=1,y=26
x=2,y=25+24+...+1
x=3,y=(24+23+...+1)+(23+22+...+1)+...(2+1)+1
...
x=26,y=1
两种思路,第一种不递归
用一个list,然后用循环把所有可能的字符串
例如x=4,则是aaaa,aaab,...baaa,baab,...zzzz全都枚举,并进行你上述的规则校验,校验通过就判断list中是否有了,没有就放进去,最后list的size就是结果。
第二种,递归
假设x=3,第一个字母有a~z(y和z经过校验不可以),然后取第二个字母,取第三个字母,每次取出字母都要符合你的规则,取完回到取第一个字母,依次,直到第一个字母取不出(假设字母是1~26,如果x=20,那么7也就是g是最后能取出的,h就取不出了)则递归结束,每取完一遍用计数器+1,递归完成时,计数器的数字就是结果。

2014年8月20日 16:30
0 0

上面的公式没写对。应该是这个

[url]http://baike.baidu.com/picture/2104972/2104972/0/6c63514aa4a6e77409f7efff?fr=lemma&ct=single [/url]

2014年8月21日 12:09
0 0

你只要的是数目,所以就是一个数学的排序组合问题。
可以这样理解:长度为N时结果就是从26个字母中取出N个不同字母的组合情况。因为按规则3来看N个不同字母最后的排列只能是一种情况“按字母大小排序”。

所以题目可以改为:
从26个小写字母中取出N个字母,然后按字母顺序进行排列。一共有多少种情况。
答案就是A(26,N)。26是下标,N是上标。根据数学公式,结果为
         26*(26-1)*(26-2)*...*(26-N)
A(26,N)=------------------------------
             (N*(N-1)*(N-2)*..*1

2014年8月21日 12:05
0 0

这是数学问题,应该可以推出一个公式。跟算法没有关系。

2014年8月21日 11:55
0 0

这个就是base36,换句话说就是36进制的数字
0,1,2.。。。9,a....z(z意思就是36)
各种语言基本都内置多进制支持,除了显式支持的2进制,8进制,16进制,基本都支持到62进制(0-9,a-z,A-Z)。
比如Integer.pareseInt(string,进制)-->Java里面

这样,你这个问题就是转换为下面的问题了:

输入给你一个多位数字,由几个单个数字构成

求由这几个数字构成的所有数字,要求高位比低位数字大。

这就是一个很简单的循环就能搞定的问题了。

求出所有数字后,转换为相应字符串即可。

2014年8月21日 10:19
0 0

我是这样认为的:

这个问题的本质实际上是树的路径遍历,原因是可以将问题结果作为树根,第一层为结果,第二层为所有可能的字母,第三层为对于每个可能的字母,顺序大于该字母的字母作为子节点.而树的高度+1则为字符串长度。比如假设只有abc三个字母 结果(a,b,c) ==> a(bc),b(c),c(NULL) 第二层 ==> ab(c) bc(NULL)。

使用递归的方式,显然是能够解决问题的,不再赘述,但是效率较低。 众所周知,树的路径遍历问题实际上是可以转化为循环方式的,方法如下:

使用一个队列,取名为Q;

第一步:ROOT ==> Q 作为初始化;
第二部:取Q的第一个元素(Q删除),取名为E
    情况1:队列为空:结束程序;
    情况2:sizeOf(E)即E包含的字母个数 = 输入长度+1  --------输出E
    情况3:否则罗列所有大于Q的字母X, (E+X) ==>Q (E+X的目的是为了记住路径内容);
第三部:GOTO 第二步

也可以使用栈,区别是使用队列为广度遍历的方式,使用栈为深度遍历的方式,与递归比较类似。

2014年8月21日 10:01
0 0

这个应该是归结为一个数学问题吧?类似C(n, i)的结果?例如a,b,c,d,e中选择三个字符组成你所说的组合,其实最终的所有满足条件的组合数为:C(5,3)= (5*4*3)/(3*2*1) = 10.
不知道理解有误否。

2014年8月20日 18:35

相关推荐

    贪心算法之最优合并问题.zip

    也就是说,如果一个问题的最优解包含子问题的最优解,那么贪心算法才可能适用于这个问题。对于最优合并问题,可能需要分析合并操作是否满足这个性质,并进行相应的证明。 在实际应用中,贪心算法的性能可以通过时间...

    动态规划,分治算法,概率算法,模拟退火算法,搜索算法,贪婪算法,网上matlab,遗传算法,组合算法

    2. **分治算法**:分治策略是将一个大问题分解为两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。典型的分治算法包括快速排序、归并排序和大数乘法等。 3. **...

    算法导论大作业:股票买卖最佳时期系列问题 南开大学 算法导论源码.zip

    算法导论大作业:股票买卖最佳时期系列问题 南开大学 算法导论源码算法导论大作业:股票买卖最佳时期系列问题 南开大学 算法导论源码算法导论大作业:股票买卖最佳时期系列问题 南开大学 算法导论源码算法导论大作业...

    贪婪算法和最小路径算法解决TSP问题matlab源代码

    城市旅行商问题(Traveling Salesman Problem,简称TSP)是一个经典的组合优化问题,它询问一个旅行商如何访问n个城市,每个城市仅访问一次,并返回起点,使得总旅行距离最短。这个问题是NP完全问题,没有已知的...

    tsp问题贪心算法求解

    这是一个著名的NP完全问题,意味着没有已知的多项式时间算法可以解决所有规模的实例。 **C程序实现** 在提供的文件列表中,`tsp.c`很可能是旅行商问题的C语言实现。C语言是一种通用的、面向过程的编程语言,适用于...

    经典问题算法解法汇总

    "最优分解问题参考答案.cpp"可能涉及到的是如何将一个大问题分解成若干个小问题,然后找到最优的组合。这可能是贪心算法、动态规划或者分治策略的实例。这些方法经常用于解决最优化问题,例如最小生成树问题(如Prim...

    用贪心算法解单源最短路径问题

    贪心算法解决单源最短路径问题的基本思想是分步求出最短路径,每一步产生一个到达新目的顶点的最短路径。下一步所能达到的目的顶点通过贪婪准则选取,即选择路径最短的目的顶点。设置顶点集合S,并不断作贪心选择来...

    matlab 遗传算法 一维下料问题

    1. **初始化种群**:随机生成一定数量的个体,每个个体表示一种可能的切割方案,长度表示材料的总长度,每个切割位置可以看作一个基因位点。 2. **计算适应度**:根据一维下料问题的需求,设计适应度函数。例如,...

    求解指派问题的JV算法

    JV算法,全称是Jonker-Volgenant算法,是求解指派问题的一个高效算法。该算法是由C.J.M. Jonker和A.C.M. Volgenant在1987年提出,专门针对完全对称的指派问题设计。相较于经典的Kuhn-Munkres(KM,也称为匈牙利)...

    遗传算法解决车间调度问题

    在实际生产中,JSP并不总是要求得到精确解,因此有研究者使用近似算法在适当的时间内得到一个可接受的近似最优解来求解此问题,实际的计算表明,好的近似算法通常能在可接受的时间内得到与精确解相差甚小的近似解,...

    用遗传算法求解最短路径问题

    此外,遗传算法求解最短路径问题的一个关键处理方法是保持种群的多样性,避免过早收敛到局部最优解。为了实现这一点,可以使用多种策略,比如精英选择、多点交叉和自适应变异等。精英选择是保留一定数量的最优秀个体...

    各种优化算法解决TSP问题

    TSP是一个经典的组合优化问题,目标是找到一个最短的路径,使得旅行商能够访问给定城市列表中的每一个城市一次并返回起点。这个问题具有NP完全性,意味着在多项式时间内找到最优解是非常困难的。 描述中提到的智能...

    算法设计与分析-工作分配问题

    例如,该代码可能针对一个具体的问题场景,通过一个具体的算法解决了工作分配问题。这可能意味着代码涉及到了算法的细节设计、任务与资源的匹配逻辑、数据结构的选择和算法优化等多个方面。 对于工作分配问题的解法...

    遗传算法和蚂蚁算法求解TSP(旅行商问题)实验报告(内含部分源代码)

    遗传算法是从代表问题可能潜在的解集的一个种群开始的,而一个种群则由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即...

    用A*算法解决TSP问题

    TSP是一个著名的NP完全问题,其目标是在一个加权完全图中找到一条经过每个顶点一次且返回起点的最短闭合路径。在实际应用中,TSP广泛出现在物流配送、电路板布线等领域。由于问题的复杂性,通常采用启发式算法或近似...

    网络优化问题的近似算法

    网络优化问题的近似算法:网络优化问题在计算机科学和运筹学中是一个关键的研究领域,特别是在设计有效的算法以解决大规模网络中的问题时。近似算法作为解决优化问题的一种有效手段,能够在多项式时间内给出问题的...

    遗传算法、禁忌搜索、模拟退火、蚁群算法 解决三十个城市的旅行商问题python实现

    在优化问题领域,旅行商问题(Traveling Salesman Problem,TSP)是一个经典的组合优化问题,它涉及到寻找最短的可能路线,使得一个旅行商能够访问每个城市一次并返回起点。这个问题是NP完全的,意味着没有已知的...

    贪心算法求解tsp(旅行商问题)

    旅行商问题(Traveling Salesman Problem,简称TSP)是一个经典的组合优化问题,它询问给定的一组城市和每对城市之间的距离,找到访问每个城市一次并返回原点的最短路径。这个问题在数学、计算机科学和运营研究等...

Global site tag (gtag.js) - Google Analytics