算法——分治法讲解
来源:互联网 发布:通过网络社会治理案例 编辑:程序博客网 时间:2024/05/23 16:29
分治法
分治法是一个很有趣的算法方法。
分治法的思想很简单,就是将问题分成多个规模大小一样的子问题。这种做法是出自一种平衡子问题的启发思想。
然后这么多个规模大小一样的子问题就可以通过递归进行求解。下面举个小例子:
例如:现在要求3的4次幂。
蛮力法的思想:3*3*3*3
分治法的思想:
可能说起来比较抽象。我下面给出几个例子的代码,通过观察你就会慢慢知道分治法的思想核心和使用它了。
数字旋转方阵
效果图:
说明:
这里主要将方阵的四周分成四个区域:A区域、B区域、C区域、D区域。然后里面每一层都是一样的子问题。就可以采用递归输出结果了。
代码:
import java.util.Scanner;/** * 分治法——数字旋转方正算法 * * @author chenjunxu * @since 2016-1-20 */public class Main { /** 用于记录输出的数字 */ private static int number = 1; public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); scan.close(); // 创建二维数组(方阵) int arr[][] = new int[n][n]; // 调用方阵递归方法 huizhuang(0, n, arr, n); // 输出二维数组(方阵) for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print(arr[i][j] + " "); } System.out.println(); } } public static void huizhuang(int begin, int size, int arr[][], int n) { // 如果方阵的长度等于0,则停止递归(递归出口) if (size == 0) { return; } // 如果方阵的长度等于1,则将该数字输出并结束递归(递归出口) if (size == 1) { arr[begin][begin] = number++; return; } // A区域代码输出 for (int i = begin; i < n - 1; i++) { arr[i][begin] = number++; } // B区域代码输出 for (int i = begin; i < n - 1; i++) { arr[n - 1][i] = number++; } // C区域代码输出 for (int i = n - 1; i > begin; i--) { arr[i][n - 1] = number++; } // D区域代码输出 for (int i = n - 1; i > begin; i--) { arr[begin][i] = number++; } // 进行递归 huizhuang(begin + 1, size - 2, arr, n - 1); }}
如果一次看不懂,就慢慢专研,学会怎么做。然后,自己动手做一下,你就会知道其中的道理了。~(>.<)~加油~
0 0
- 算法——分治法讲解
- 分治法算法讲解
- 分治算法 概念讲解
- 算法系列—分治法
- 算法——分治算法
- 分治法讲解
- 算法思想笔记——分治法
- 【算法导论】03——分治法
- 算法学习笔记——分治法
- 算法之——分治法
- 分治法——算法总结二
- 算法初探——分治法
- 分治法算法——归并排序
- 算法——分治法 练习
- 算法06:大整数乘法分治算法——分治法Part2
- 算法——分治策略
- 数据结构——分治算法
- 分治算法—合并排序
- 安卓学习日志(1)
- iOS 设备唯一标示
- C#中new的用法,及与override的区别
- 图片的动画
- CentOS常用查看系统命令
- 算法——分治法讲解
- linux 查看文件夹下的文件个数(当前目录的文件数)
- springMVC环境搭建-1
- Android 讲解:通知栏
- facebook第三方登陆
- 浅谈hadoop map过程,以及一些调优
- 卸载绿色版tomcat
- 每个ios开发者都应该知道Top 10 Swift三方库
- Python 文本挖掘:使用情感词典进行情感分析