算法复习
算法填空题
子集生成
给定一个正整数集合X={x1,x2, ... , xn}和一个正整数y,设计一个回溯算法求集合x的一个子集Y,使得Y中的元素之和等于y
算法如下:
输入:数组x,解向量p,开始下标from,目标y
输出:true或者false
1.若X[from]等于y,则p[from] = 1,返回ture//找到解
2.若X[from]大于y,则p[from] = 0,返回false//剪枝回溯
3.置p[from] = 1
3.1调用本算法,参数X,p,from+1,y-X[from];
3.2若算法返回true,则找到一组解,返回true
4.置p[from] = 0
4.1调用本算法,参数X,p,from+1,y
4.2若算法返回true,则找到一组解,返回true
代码:
public boolean reverse(int[] X,boolean[] p,int from,int y){
if(X[from] == y){
p[from] = true;
return true;
}
if(X[from] > y){
p[from] = false;
return fasle;
}
p[from] = true;
if(reverse(X,p,from+1,y-X[from]))
return true;
p[from] = false;
if(reverse(X,p,from+1,y))
return true;
}
全排列生成
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
算法如下:
全局变量:数组P存放符合条件的结果,对象数组result,存放结果,used Boolean[]数组,判断是否使用过
输入:数组X
输出:无
1:若数组P的长度等于X的长度,则将数组P添加到result数组中
2