2007年08月07日
有重复的全排列 - []
上一个帖子《没有重复的全排列》中的算法虽然有效,但是不能处理字符串中有重复的情形。这回我们考虑给定的字符串中包含重复的字符。如何能够有效的生成它所有不同的排列。要求不可使用递归,而且生成的排列必须按照字典顺序。例如输入字符串bac,我们有
bac
bca 升序
cab 升序
cba 升序,最大值
abc 最小值
acb 升序
bac 升序
上一个帖子《没有重复的全排列》中的算法虽然有效,但是不能处理字符串中有重复的情形。这回我们考虑给定的字符串中包含重复的字符。如何能够有效的生成它所有不同的排列。要求不可使用递归,而且生成的排列必须按照字典顺序。例如输入字符串bac,我们有
bac
bca 升序
cab 升序
cba 升序,最大值
abc 最小值
acb 升序
bac 升序
给定一个字符串,每个字符在其中都不重复出现。每当改变字符出现的顺序,我们就得到这个字符串的一个排列。请设计一个算法,最有效的生成其所有不同的排列?
例如给定abc,生成 acb, bac, bca, cab, cba。
提示:此算法基于自然数和排列之间的一一映射关系 。
一个娱乐电视节目中,主持人要一个嘉宾从三道门中选择一道。其中的一个后面放着一辆崭新的轿车,如果猜对了就会赢取这辆车。无论嘉宾做出什么选择,主持人总会打开另外一个门,当然门后什么也不会有。然后主持人会问嘉宾,是否想改变选择。请问嘉宾应该怎么做才有较大的机会赢取轿车。
如何最有效的检查单向链表中是否包含了环。请避免使用额外的内存。下面有一个含有环的链表的例子:

一间古老的寺庙中住着一群和尚。所有的和尚都非常的聪明,精于算术和逻辑,同时也都严格遵守这庙里的各项戒律。以下是一些比较重要戒律:
设计一个程序,找出所有位于X和Y之间的素数。这是一个老题了,但是真正做起来才会知道有很多地方可以进一步优化。先把最常见的程序放在这里,看你能想到多少可以改进的地方。注:这里使用数组只是为了方便,别无他意。

这里是优化后的程序,解释见后面。

至少有三个可以改进的地方: