分治法实例
程序员文章站
2022-06-03 16:53:44
...
分治法实例
1.基本思想
(1)分解:将要求解的问题用若干较小的同类子问题
(2)求解:当问题被划分得足够小的时候,用简单方法解决
(3)合并:根据求解的问题,将子问题的接解逐层合并得到原问题的最终解
2.实例
****
上图有个小错误,选手二的第5天为5
import org.junit.Test;
public class Math {
@Test
public void Test() {
Solution solution = new Solution(4);
solution.GameMap(1,4);
for(int i=1;i<solution.a.length;i++)
{
for(int j=0;j<solution.a[i].length;j++)
System.out.print(solution.a[i][j]+" ");
System.out.println();
}
}
}
//分治法兵乓球赛制表讲解
class Solution {
int a[][];
public Solution(int N)
{
this.a = new int[N+1][N];
}
//从第K号选手开始的n个选手(包括k)
void GameMap(int k,int n)
{
//等于2时表示在表的最左端
if(n==2)
{
this.a[k][1] = k+1;
this.a[k][0]=k;
this.a[k+1][0]=k+1;
this.a[k+1][1]=k;
}
else
{
GameMap(k,n/2);
GameMap(k+n/2,n/2);
//填充右下角
for(int i=k;i<=k+n/2-1;i++)
{
for(int j=0;j<=n/2-1;j++)
{
this.a[i+n/2][j+n/2] = a[i][j];
}
}
//填充右上角
for(int i=k+n/2;i<=k+n-1;i++)
{
for(int j=0;j<=n/2-1;j++)
{
this.a[i-n/2][j+n/2] = a[i][j];
}
}
}
}
}
上述代码运行结果如下:
上一篇: 最近点对问题