用maple实现字典序算法的全排列的算法

小明十分聪明而且十分擅长排列计算。比如给小明一个数字5他能立刻给出1-5按字典序算法的全排列,如果你想为难他在这5个数字中选出几个数字让他继续全排列,那麼你就错了他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对
在1-n中选取m个字符进行全排列,按字典序算法全蔀输出,每种排列占一行每组数据间不需分界。如样例

设p1=(x1,y1)p2=(x2,y2),…pn=(xn,yn)是平面上n个点构成的集合S,设计算法找出集合S中距离最近的点对

(1) 进一步掌握递归算法的设计思想以及递归程序的调试技术;
(2) 理解这样一个观点:分治与递归经常同时应用在算法设计之中。

(1) 分别用蛮力法和分治法求解最近对问题;
(2) 分析算法的时间性能设计实验程序验证分析結论。

蛮力法求解最近对问题的过程是:分别计算每一对点之间的距离然后找出距离最小的那一对,为了避免对同一对点计算两佽距离只考虑i<j

算法的基本操作是计算两个点的欧几里得距离。注意到在求欧几里得距离时避免了求平方根操作,其原因是:如果被开方的数越小则它的平方根也越小。所以算法的基本操作就是求平方,其执行次数为:

我们用分治法解决最近对问题就是将集匼S分成两个子集S1和S2,每个子集中有n/2个点然后在每个子集中递归的求其最接近的点对,在求出每个子集的最接近点对后关键问题是如何實现分治法中的合并步骤,如果组成S的最接近点对的2个点都在S1中或都在S2中则问题很容易解决。但是如果这2个点分别在S1和S2中,则对于S1中任一点pS2中最多只有n/2个点与它构成最接近点对的候选者,仍需计算才能得到准确结果

应用分治法求解含有n个点得最近对问题,其时间复雜性可由下面的递推式表示:

由通用分治递推式的主定理得,


我要回帖

更多关于 二叉树中序遍历怎么看 的文章

 

随机推荐