- 浏览: 53911 次
- 性别:
- 来自: 北京
最新评论
文章列表
ibatis 工具 abator
- 博客分类:
- iBatis
Abator是一个用于iBATIS的代码生成器,它能够为iBATIS Sql Mapper(包括:SqlMap XML文件, Java domain classes, 和Java DAO classes)生成artifacts。
1. 介绍
Abator 是一款iBATIS代码生成工具。它从数据库获取信息,然后产生如下文件。
1) 数据库表的SqlMap.xml file 文件,如UserSQL.xml;
2) 数据库表的Java Bean Model,如User.java;
3) 包含一个综合主键的数据库表的主键model,如UserKey.java;
4) 包含DAO层 selectByE ...
基本思路是对需要查找的节点赋权值为1,其它节点权值为0.那么只要找到一个节点的左右权值都不为1的点就是需要查找的公共父节点。
static class Node {
String value;
Node left;
Node right;
}
static Node parent;
public static int findParent(Node root, Node first, Node second) {
if (root == null || parent != null) {
// Accelerate check
re ...
树中任意两个节点之间的距离是指,从一个节点到另一个几点之间的一条路径。
如果路径上边的权值为1,其它权值为0,那么其实就是计算树的权值。
那么怎样该点是不是在这条路径中呢?
其实并不难,只要我们知道左子树和右子树的权值就可以判断了。
如果左子树和右子树的权值都为0,那么该节点肯定不在要查找的路径上。
否则该节点肯定在查找的路径上。如果左右子树权值都不为0,那么当前节点为公共父节点
,查找结束了,但是递归并不能停下来,所以要标示一下。
static boolean finished = false;
public static int findPath(Node root, Node ...
package www.viking.com.algorithm;
public class MinSteps {
/**
* @param args
* 5,7,12加减运算表示任意n的最少个数
*
* 也就是 5x+7y+12z=n
*
* 求|x|+|y|+|z|的最小值
*
* 方法一:动态规划的思想
*
* 首先正数和负数的性质一样的,所以只考虑正数的情况
* 我们 ...
问题:y=ax+b;
有很多线段{x0,y0,x1,y1}{x2,y2,x3,y3}{x4,y4,x5,y5}....{xn-1,yn-1,xn1,yn}
(xi,yi)在直线上,判断这些线段是否存在重合
思路:
首先,知道x可以根据y=ax+b算出y,又因为是直线,所以x与y是一一对应的
如果{xi,yi,xi+1,yi+1}与{xj,yj,xj+1,yj+1}有重合区域, 0<=i,j<n
那么这两条线段投影到x轴上也是有重合区域的,如果没有重合区域,那么投影也不会有重合区域
这样就可以将原问题转化成x轴上的线段是否有重合区域,与y无关了。
问题就变得简单了,直线在x轴 ...
问题:
有很多区间,比如[1.1,3.4] [1,3] [-1,3] [2.5,6].....
求区间重合次数最多的 比如上面[2.5,3]被重合了4次
思路:
用a[n][2]存储所有的区间,a[n][0]存储区间的开始值,a[n][1]存储区间的结束值,并且
a[n][0]<a[n][1]
首先将a[n][2]排序,按照起始点进行排序,升序,那么就会得到所有区间的起始点有序。
遍历a[n][2],比较a[i][1]与a[i+1][0],a[i+2][0]...(0<=i<n).比较直到a[k][0]>a[i][0]为止或者i=n-1,第i+1区间与其它所有区间的 ...
比如1 2 3 4 5
循环移位1位 5 1 2 3 4
循环移位2位 4 5 1 2 3
循环移位3位 3 4 5 1 2
循环移位4位 2 3 4 5 1
循环移位5位 1 2 3 4 5
可以看出,当移动n位时还原了,数据没有变化。 所以当移动k位>n时,只需移动k%n即可
最简单的方法就是1位1位的移动,如果移动k位,移动k次,但是这样的效率很低,每个数都要移动k次,一共要移动k*n次。
在编程之美上有一种做法,是将前n-k位逆序,在将 ...
package www.viking.com.algorithm;
public class MaxSubMatrixSum {
/**
* @param args
*
* 求子矩阵的最大和
* | a11 …… a1i ……a1j ……a1n |
* | a21 …… a2i ……a2j ……a2n |
* | . . . . . . . |
* | . . . . . . . |
* | ar1 …… ari ……arj ……arn |
...
package www.viking.com.algorithm;
public class MaxSubSquenceSum {
/**
* @param args
*
* 最大字段和
*
* b为字段累加和
*
* b=b>0?b+a[i]:a[i]
*
* 并且记录最大的b
*
*/
public static void main(String[] args) {
int[] a = { -1, 3, -3, 4, 5, -2, 20 };
System.out.p ...
题:有甲乙两个人,有100个物品,每个人每次只能拿 2,4,6个物品,轮流拿,谁拿着最后一个物品谁就赢,请问甲先拿有没有不必胜策略。
其实这种题,一般先拿的都有必胜把握,掌握先机麻。
求解: 如果想要拿到最后一个只能是最后一轮剩下8个,无论乙拿多少,甲都能拿到最后一个
如果乙拿2个,甲拿6个,
如果乙拿4个,甲拿4个,
如果乙拿6个,甲拿2个,
其实答案就出来了,只要保证每次乙拿x个,甲拿8-x个就能使甲想拿最后哪个就是哪几个
100%8=4, 甲先拿4个,然后无论乙拿几个,甲只要保证和乙拿的之后为8就行了。
这种题还有很多类似的,但是解体思路都是 ...
有重复数的全排列和全排列的算法是一样的
只不过要去掉重复的序列
122的全排列
122
212
221
一共三种
三个数的全排列是6种,其中有3种重复了。
其实关键问题就是怎么从全排列中去掉重复的
理解全排序的过程,从begin到i-1的数据都与begin交换过,
如果第i的数据与前面begin到i-1中的数据有重复,那么不用交换了
设 a[i]=x 存在 a[j]=x , begin<=j<=i-1
根据 全排列的递归公式知道 Perm(Ri)=Perm(Rj)
所以 Perm(Ri)为重复的需要去掉
package com.viking.divide;
public c ...
package com.viking.divide;
public class DuplicateCombination {
public static void main(String[] args) {
int[] a = { 1, 2, 3 ,3};
System.out.println(perm(a, 0));
}
public static int perm(int[] a, int begin) {
int count = 0;
boolean isorder = true;
String path = "&q ...
无重复数的组合问题
就是集合的所有非空子集
比如 {1,2,3}
的组合结果是
{1},{2},{3}
{1,2}{1,3}{2,3}
{1,2,3}
组合跟关键字的排列顺序无关
利用全排列算法求解
全排列算法可以求出集合所有的子集排列
所以 组合就是全排列的一个子集 ...
n个字符中长度为m的全排列
public class MNPerm {
public static void main(String[] args) {
int[] a = { 1, 2, 3 ,4};
int m=2;
System.out.println(perm(a, 0,m));
}
public static int perm(int[] a, int begin,int m) {
if (begin == m) {
for (int i = 0; i < m; i++) {
System.out.print(a[ ...
比如 123
1
2
3
12
21
13
31
23
32
123
132
213
231
312
321
public class SubPerm {
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4 };
System.out.println(perm(a, 0));
}
public static int perm(int[] a, int begin) {
int count=0;
for (int i = 0; i < begin; i++) {
...