摘要:
设计原则1.找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。 2.针对接口编程,而不是针对实现编程。 3.多用组合,少用继承。一:策略模式,定义了算法族,分别封装起来,让他们之间可以相互替换,次模式让算法的变化独立于使用算法的客户。二:观察者模式:定义了一对多依赖,这样一来当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 阅读全文
摘要:
将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。正整数n的这种表示称为正整数n的划分。正整数n的不同划分个数称为正整数n的划分数,记作p(n)。例如正整数6有如下11种不同的划分,所以p(6) = 11: 6; 5+1; 4+2,4+1+1; 3+3,3+2+1,3+1+1+1; 2+2+2,2+2+1+1,2+1+1+1+1;1+1+1+1+1+1。前面的几个例子中,问题本身都具有比较明显的递归关系,因而容易用递归函数直接求解。在本例中,如果设p(n)为正整数n的划分数,则难以找到递归关系,因此考虑增加一个自变量:在正整数n的所有不同划分中, 阅读全文
摘要:
转自:http://blog.csdn.net/fg2006/article/details/6766384动态规划的基本思想:将一个问题分解为子问题递归求解,且将中间结果保存以避免重复计算。通常用来求最优解,且最优解的局部也是最优的。求解过程产生多个决策序列,下一步总是依赖上一步的结果,自底向上的求解。动态规划算法可分解成从先到后的4个步骤:1. 描述一个最优解的结构,寻找子问题,对问题进行划分。2. 定义状态。往往将和子问题相关的各个变量的一组取值定义为一个状态。某个状态的值就是这个子问题的解(若有k个变量,一般用K维的数组存储各个状态下的解,并可根据这个数组记录打印求解过程。)。3. 找 阅读全文
摘要:
import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main { List blocks = null; public void inital(){ Scanner cin = new Scanner(System.in); int n; int m = 1; while((n = cin.nextInt()) != 0){ blocks = new ArrayList(); ... 阅读全文
摘要:
1 import java.util.Scanner; 2 3 4 public class Main { 5 public static void main(String[] args) { 6 Scanner cin = new Scanner(System.in); 7 int n = cin.nextInt(); 8 String num1 = ""; 9 String num2 = "";10 int m = 1;11 while(m len2 ? len1:len2;18... 阅读全文
摘要:
1 /** 2 * 合并排序是建立在归并操作上的一种有效的排序算法。最差,平均和最好都是O( nlogn ),空间复杂度O(n) 3 * 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。值得注意的是归并排序是一种稳定的排序方法。 4 * 归并操作的工作原理如下: 5 * 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 6 * 第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置 7 * 第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 8 * 重复步骤3直到某一指针超出... 阅读全文
摘要:
这有篇不错的介绍“快速排序”的博客:http://www.cnblogs.com/morewindows/archive/2011/08/13/2137415.html以下是Java代码 1 public class QuickSort { 2 public static void main(String[] args) { 3 int[] a = {4, 2, 1, 6, 3, 0, -5, 1, 1}; 4 qsort_asc(a, 0, a.length - 1); 5 6 for (int i = 0; i ... 阅读全文
摘要:
1 /** 2 * 03/09/2014 3 * 4 * @author Burke 5 * 6 */ 7 public class Sort { 8 9 public static void main(String[] args) {10 int[] source = {4, 2, 1, 6, 3, 6, 0, -5, 1, 1};11 dichotomySort(source);12 for (int i = 0; i temp) {42 right = mid - 1; //... 阅读全文
摘要:
1 /** 2 * 03/09/2014 3 * @author Burke 4 * 5 */ 6 public class ShellSort { 7 8 public static int[] a = {49,38,65,97,76,13,27,49,55,04}; ... 阅读全文
摘要:
转自:http://blog.csdn.net/holymaple/article/details/8636234由于迷宫的设计,老鼠走迷宫的入口至出口路径可能不止一条,如何求出所有的路径呢?解法:求所有的路径困哪起来复杂但其实更简单,只要在老鼠走到出口时显示经过的路径,然后退回上一格重新选择下一个位置继续递回就可以了,比求出单一路径更简单,程序只需要做一点点修改就行了。C++版: 1 /* 2 *内容;老鼠走迷宫II 3 *时间;3/01/2013 4 */ 5 6 #include 7 8 // 注:二维数组,根据编译器采取的策略不同,起点或终点位置会有所... 阅读全文