算法三级项目(管道铺设系统)

项目开发大致流程

1. 摘要

2. 项目要求

3. 总体设计

4. 结果演示

5. 项目配置

6. 项目源代码

1. 摘要


本次课程的三级项目是要求设计实现一个管线铺设辅助系统,设计算法并实现使铺设的输水管道距离最短。
本项目主要应用了最小生成树算法:
prime算法和Kruskal算法两种算法,具备从文本读取数据、显示最佳铺设方案,以及绘制最佳方案的简单示意图等功能,以东校区各建筑物为例,实现了获得任意两个建筑物之间铺设管道的最佳方案。

关键词:【最小生成树】 【prime算法】 【kruskal算法】

2. 项目要求


用最小生成树算法实现东区各建筑之间铺设的输水管道距离最短,需要满足如下要求 :

(1)将管线经过的建筑物以及建筑物之间的距离,抽象成无向图,并以矩阵的形式表示,并保存在文本中,
系统通过读取文本的方式,获取该矩阵;

(2)从Prim算法和Kruskal算法中至少选择一种实现管线铺设的最优方案,系统可以最优方案
的生成过程,并且可以文本的形式输出;

(3)在系统上可以生成最优方案的简易图。


3. 总体设计

3.1 大致划分


总体上将项目划分为前端和后端两个层面:
 |— 前端: 主要负责展示良好的界面, 增强交互性
 |— 后端: 主要负责实现项目的功能
(1) 项目类型:
  javaWeb项目 (Servlet+Jsp)
(2) 开发工具:
  MyEclipse + MySQL + Navicat
(3) 前端界面的实现:
  通过 html + css + css3 + js + jquery 来实现
  1. 项目结果页面展现
  
web.xml:
用于配置View层中Servlet服务器的信息和路径
index.jsp:
用于显示项目主页的页面
kruskalPage.jsp:
用于显示Kruskal算法处理结果的页面
pirmePage.jsp:
用于显示Kruskal算法处理结果的页面
showScenery.jsp:
用于显示周边建筑物信息的页面
map.jsp:
实现了简易图的绘制(引入百度地图api, 从后台传入经算法处理后的数据生成)

(4) 绘制简易图功能的实现:
  引入百度地图api, 从后台传入经算法处理后的数据,然后生成对应最短路线

3.2 算法的实现:


1. 算法所用数据结构选型

所用矩阵: n*2矩阵
选择原因:方便hashMap的存取。
存放矩阵内信息所用数据结构:hashMap
选择原因:
letCode中有一道返回两数之和的算法题,通过条件遍历查询数组即可获得完成,但是官方推荐的是用hashMap存取并遍历,经过letCode上的大量数据测试,得出在这种情况下hashMap的执行效率更高,所用时间更少,通过分析两算法,得知都要按条件查询矩阵内容,所以对于这种规模的数据和相似的情况,我们采用hashMap来存取数据。
存放无向图结点的数据结构: Set集合
选择原因:
集合具有元素无序不重复的特性,所以用来存放结点可以防止其重复出现。
路径返回结果所用数据结构: ArrayList
选择原因:
ArrayList具有有序便于插入删除的特点,方便对结果进行后续的整理和修改。



2. 算法的具体实现


Prime算法部分主要由PrimeServiceImpl实现
kruskal算法部分主要由kruskalServiceImpl实现
CaculateUtil.java :提取并封装了PrimeServiceImpl 和 KruskalServiceImpl算法用到的方法
2.1 实现Prime算法的基本思想:

  1. 清空生成树,任取一个顶点加入生成树
  1. 在那些一个端点在生成树里,另一个端点不在生成树里的边中,选取一条权最小的边,将它和另一个端点加进生成树
  1. 重复步骤2,直到所有的顶点都进入了生成树为止,此时的生成树就是最小生成树


2.2 Prime算法适用性和时间复杂度:
Prime算法求最小生成树时候,和边数无关,只和定点的数量相关,所以适合求稠密网的最小生成树,时间复杂度为O(n×n)



2.3 实现Kruskal算法的基本思想:

  1. 首先将G的n个顶点看成n个孤立的连通分支(n个孤立点)并将所有的边按权从小大排序。
  1. 按照边权值递增顺序,如果加入边后存在环则这条边不加,直到形成连通图


2.4 Kruskal算法适用性和时间复杂度:
Kruskal算法是对图的边进行访问,所以Kruskal算法的时间复杂度只和边又关系,其时间复杂度为O(eloge)

4. 结果演示

4.1 项目主要界面展示

首页

节点信息展示

Prime算法界面

Kruskal算法界面

最终生成的路线图


4.2 项目运行演示

以下两个地址都可

腾讯云对象存储COS视频地址:
https://video-1254265973.cos.ap-beijing.myqcloud.com/arithmetic.mp4
哔哔哩哔哩视频地址:
https://www.bilibili.com/video/av40697433/

5. 项目配置

5.1 矩阵文件格式

矩阵文件的格式应为N*2矩阵, 形式如 AB 150 。 A, B 为结点的编号, 150为两结点结点间的距离。
详细配置可参照项目中的ReadDatas.txt和ReadDatas3.txt。

5.2 读入文件路径的设置

读入文件的路径设置在 PipeLineLaying/src/com/dao/impl/ReadDataDAOImpl.java 里面修改,
修改位置为下图标红线的地方:



5.3 输出文件路径的设置

输出最终结果的路径设置在 PipeLineLaying/src/com/dao/impl/OutputDataDAOImpl.java 里面修改,
修改位置为下图标红线的地方:

5.4 数据库配置

(1) 数据库连接信息可在项目下的 src/jdbc.properties 文件中修改,
  下图标红线的位置对应的是 自己数据库的名字(类型为Mysql数据库)。



(2) 将项目中的 pipelying.sql 导入自己电脑的本地数据库
  演示Navicat导入的方式:
  右键连接–>选择运行SQL文件–>选中pipelying.sql–>运行完毕点击关闭–>右键刷新。
  完成以上步骤后, pipelying数据库便成功导入到了你的本地数据库中。



6. 项目源代码

百度网盘下载 ( 包含项目报告 )

github下载 ( 只含源代码 )

注: 两个地址都可以下载


Previous
操作系统课设(多道程序缓冲区协调操作) 操作系统课设(多道程序缓冲区协调操作)
项目开发大致流程 ( 多道程序缓冲区协调操作 )1. 项目概述 2. 项目要求 3. 总体设计 4. 结果演示 5. 项目配置 6. 项目源代码 1. 项目概述 文字描述
2018-07-29
Next
JavaScript中的与数值相关的全局方法。 JavaScript中的与数值相关的全局方法。
皮卡丘洗脑 先来洗脑一下吧 全局方法概括1. parseInt ( ) 2. parseFloat ( ) 3. isNaN ( ) 4. isFinate ( ) 具体内容
2018-03-31
目录