1月2日 MyBatis联动查询+Prim算法
来源:互联网 发布:4g网络优化工作 编辑:程序博客网 时间:2024/05/18 01:54
MyBatis联动查询:
一对一映射(注解版):
/** * @Interface:CompanyMapper */ @Select({ "select", "cid, name, address, pro, city, price", "from company", "where cid = #{cid,jdbcType=INTEGER}" }) @Results({ @Result(column="cid", property="cid", jdbcType=JdbcType.INTEGER, id=true), @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR), @Result(column="address", property="address", jdbcType=JdbcType.VARCHAR), @Result(column="pro", property="pro", jdbcType=JdbcType.VARCHAR), @Result(column="city", property="city", jdbcType=JdbcType.VARCHAR), @Result(column="price", property="price", jdbcType=JdbcType.INTEGER) }) Company selectComByPrimaryKey(Integer cid);
/** * @Interface:EmpMapper */ @Select({ "select", "eid, name, sex, email, salary, cid", "from emp", "where eid = #{eid,jdbcType=INTEGER}" }) @Results({ @Result(column="eid", property="eid", jdbcType=JdbcType.INTEGER, id=true), @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR), @Result(column="sex", property="sex", jdbcType=JdbcType.VARCHAR), @Result(column="email", property="email", jdbcType=JdbcType.VARCHAR), @Result(column="salary", property="salary", jdbcType=JdbcType.INTEGER), @Result(column="cid", property="cid", jdbcType=JdbcType.INTEGER), @Result(column="cid",property="company",one = @One(select = "com.MyBatis.mapper.CompanyMapper.selectComByPrimaryKey")) }) Emp selectComByEid(Integer eid);一对多映射(注解版)
/** * @Interface:CompanyMapper */ @Select({ "select", "cid, name, address, pro, city, price", "from company", "where cid = #{cid,jdbcType=INTEGER}" }) @Results({ @Result(column="cid", property="cid", jdbcType=JdbcType.INTEGER, id=true), @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR), @Result(column="address", property="address", jdbcType=JdbcType.VARCHAR), @Result(column="pro", property="pro", jdbcType=JdbcType.VARCHAR), @Result(column="city", property="city", jdbcType=JdbcType.VARCHAR), @Result(column="price", property="price", jdbcType=JdbcType.INTEGER), @Result(property = "elist",javaType = List.class,column = "cid", many = @Many(select = "com.MyBatis.mapper.EmpMapper.selectEmpByCid")) }) Company selectEmpByPrimaryKey(Integer cid);
/** * @Interface:EmpMapper */ @Select({ "select", "eid, name, sex, email, salary, cid", "from emp", "where cid = #{cid,jdbcType=INTEGER}" }) @Results({ @Result(column="eid", property="eid", jdbcType=JdbcType.INTEGER, id=true), @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR), @Result(column="sex", property="sex", jdbcType=JdbcType.VARCHAR), @Result(column="email", property="email", jdbcType=JdbcType.VARCHAR), @Result(column="salary", property="salary", jdbcType=JdbcType.INTEGER), @Result(column="cid", property="cid", jdbcType=JdbcType.INTEGER) }) List <Emp> selectEmpByCid(Integer cid);
Prim算法:
1.概览
普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点,且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克发现;并在1957年由美国计算机科学家罗伯特·普里姆独立发现;1959年,艾兹格·迪科斯彻再次发现了该算法。因此,在某些场合,普里姆算法又被称为DJP算法、亚尔尼克算法或普里姆-亚尔尼克算法。
2.算法简单描述
1).输入:一个加权连通图,其中顶点集合为V,边集合为E;
2).初始化:Vnew = {x},其中x为集合V中的任一节点(起始点),Enew = {},为空;
3).重复下列操作,直到Vnew = V:
a.在集合E中选取权值最小的边<u, v>,其中u为集合Vnew中的元素,而v不在Vnew集合当中,并且v∈V(如果存在有多条满足前述条件即具有相同权值的边,则可任意选取其中之一);
b.将v加入集合Vnew中,将<u, v>边加入集合Enew中;
4).输出:使用集合Vnew和Enew来描述所得到的最小生成树。
下面对算法的图例描述
3.简单证明prim算法
反证法:假设prim生成的不是最小生成树
1).设prim生成的树为G0
2).假设存在Gmin使得cost(Gmin)<cost(G0) 则在Gmin中存在<u,v>不属于G0
3).将<u,v>加入G0中可得一个环,且<u,v>不是该环的最长边(这是因为<u,v>∈Gmin)
4).这与prim每次生成最短边矛盾
5).故假设不成立,命题得证.
4.算法代码实现
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int Maxn = 505;const int Inf = 1 << 9;int vis[Maxn];int dis[Maxn];int map[Maxn][Maxn];int n;void init(){ for(int i=0;i<n;i++) { vis[i] = 0; dis[i] = map[0][i]; }}int Prim(){ init(); int ans = 0; dis[0] = 0; vis[0] = 1; for(int i=0;i<n-1;i++) { int temp = Inf; int flag = 0; for(int j=0;j<n;j++) { if(!vis[j] && dis[j] < temp) { temp = dis[j]; flag = j; } } vis[flag] = 1; ans += temp; for(int j=0;j<n;j++) { if(!vis[j] && map[flag][j] < dis[j]) { dis[j] = map[flag][j]; } } } return ans;}int main(){ while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf("%d",&map[i][j]); } } int ans = Prim(); printf("%d\n",ans); } return 0;}
5.时间复杂度
这里记顶点数v,边数e
邻接矩阵:O(v2) 邻接表:O(elog2v)
- 1月2日 MyBatis联动查询+Prim算法
- 1月1日 MyBatis创建+增删改+Kruskal算法
- 2月1日
- Mysql 年、月、日 查询
- 2月28日&&3月1日
- javascript------一个类的年,月,日联动菜单
- JavaScript实现年、月、日三下拉框联动
- 2008年2月26日碰撞算法
- 2006年2月1日~3日 星期二 雨
- 8月13日---用户信息查询
- SQL数据库。按年,月,日查询
- SQLite笔记,查询语句:日、周、月
- 请做一个年,月,日的联动菜单(选择年才可以选择月,选择月才可以选择日,并且2月的天数要正确)
- 11月1日 2-17 CDMA
- 在线词典2月1日计划
- 会议记录1:3月2日
- 写在2017年1月2日
- 2017年1月2日
- http://blog.csdn.net/harvic880925/article/details/38487149
- 爬取免费IP代理,以列表形式返回
- VGA接口电路设计
- Vim提示E325(锁机制)
- spring拾遗(三)——用map接收请求参数的问题解决
- 1月2日 MyBatis联动查询+Prim算法
- Mybatis工作机制源码分析—初始化
- Q格式之IQsat
- 独立任务最优调度
- 大话ceph crush
- Intersection of two arrays
- JPA 菜鸟教程 20 JPA2.0 @CollectionTable
- codeblocks自动生成代码
- (0017)iOS 开发之Mac上安装Eclipse、创建java后台程序访问本地数据库