并行与串行数据结构与算法课程设计报告

上传人:1888****888 文档编号:37781072 上传时间:2021-11-04 格式:DOC 页数:27 大小:4.96MB
收藏 版权申诉 举报 下载
并行与串行数据结构与算法课程设计报告_第1页
第1页 / 共27页
并行与串行数据结构与算法课程设计报告_第2页
第2页 / 共27页
并行与串行数据结构与算法课程设计报告_第3页
第3页 / 共27页
资源描述:

《并行与串行数据结构与算法课程设计报告》由会员分享,可在线阅读,更多相关《并行与串行数据结构与算法课程设计报告(27页珍藏版)》请在装配图网上搜索。

1、课 程 实 验 报 告课程名称: 并行与串行数据结构与算法 专业班级: ACM1301 学 号: 姓 名: 指导教师: 报告日期: 2015.9.23 计算机科学与技术学院目录1、课程设计概述21.1 课设目的21.2 课设要求21.3 实验环境32、系统总体设计42.1 系统主模块结构体42.2 找附近的最近的三个某地52.3 找两点之间最短路径62.4 数据录入模块73、数据结构和算法详细设计73.1 地图的存储73.1.1 地图背景图片的存储73.1.2 地图点73.2 找附近的最近的特定地点(findNearby)83.3 找最短路径84、程序实现简要说明94.1开发环境94.2 支持

2、包94.3 函数原型10MainActivity.java:实现了地图主要功能10Setting.java:地图数据的录入124.4 函数功能调用关系14MainActivity.java:地图主要功能程序15Setting.java:数据录入程序155、程序测试及结果分析165.1 功能测试165.2 测试结果分析226、复杂度分析226.1 输入地点名查找,鼠标点击显示226.2 找两点之间的最短路径(dijkstra)226.3 找附近最近的三个某地227、软件的用户使用说明238、特色与不足238.1 特色238.2 不足23九、主要参考文献241、课程设计概述1.1 课设目的数据结构

3、是计算机科学技术与信息安全等专业的一门重要专业基础课,牢固掌握数据结构的基础知识,熟练地运用数据结构的思想与技术方法解决实际应用问题是是本课程学习的基本任务与目标。而课程设计是实现这一学习目标的重要环节和组成部分。通过课程设计的训练,使学生加深对数据结构知识的理解,牢固掌握其应用方法,并合理灵活地解决一定实际问题,增强和提高综合分析问题与解决问题的能力。1.2 课设要求题目:华科地图导航问题背景:华中科技大学(Huazhong University of Science and Technology),简称华中大,坐落于湖北省武汉市,学校面积7000余亩。华科大校园具有典型的工科院校特征,道路

4、笔直,建筑面积方方正正,这为构建电子地图提供了极大的便利。本实验要求实现一个简单的华科地图程序,可以方便的实现搜索、导航等功能。基本要求:1输入地点名,可以在地图中以一定标记标示出地点所在的位置鼠标移动到指定建筑处显示建筑名称2输入或点击起点和终点,找出最短的路径,并在图上描出路径,路径不能脱离道路3输入起点,输入特定的地点,如食堂,超市能够找到最近的两到三个地点至少要包括清单中所列的位置实验提示:将每个十字路口或特定建筑看作节点,构建图模型,两个节点的边即是一个路段。对于某些节点,可能具有特定的意义,例如“图书馆”,可以为其设置一个名称;而对于大多数节点,例如普通路口,可能并不需要名称,只是

5、用来构建图模型的一个节点。信息的录入可能需要人为输入,需要编写辅助程序。辅助程序可以如下构造:程序首先载入一张图片并显示。程序具有多个文本框,当点击图片上特定点时,获取该点的坐标,第一个文本框显示该点的图像坐标,第二个文本框可以输入地点名,第三个文本框用来输入节点编号,剩下的文本框用来输入直接相邻的节点编号或者节点的属性。点击“确认”后可以将信息保存到磁盘。这样可以实现坐标、节点编号和位置名称的绑定,为实验构图采集数据。 特定建筑只需考虑建筑大门所对应的路段上的一点。例如“图书馆”建筑,可认为“图书馆”位于图书馆大门和学校道路相接处,简化处理。当鼠标移动到“图书馆”附近时,找到距离最近的具有名

6、称的节点显示即可。对于存在折线的路段,将其看作多段处理;对于细碎的弯折路线,当作直线简化处理。1.3 实验环境android studio2、系统总体设计2.1 系统主模块结构体2.2 找附近的最近的三个某地2.3 找两点之间最短路径2.4 数据录入模块3、数据结构和算法详细设计3.1 地图的存储3.1.1 地图背景图片的存储初次运行,软件默认显示华科地图,并根据屏幕尺寸设置地图尺寸,然后将地图背景图片存储到手机文件中,以后直接从文件中读取地图背景图片,提高效率。3.1.2 地图点未运行时,地图点的信息存储在手机文件中。运行时,地图点信息存储在一个一维数组中,数组索引是点的地图点的编号。数组中

7、的元素是地图点类(MapPointPlus),该类中含有以下成员:编号(int):serialNumber坐标(Coordinate):coordinate属性(String):property名称(String):name邻接点(String):stringNearbyPoint邻接点(Coordinate):nearbyPoint3.2 找附近的最近的特定地点(findNearby)算法:dijkstra的最短路径算法,并判断是否满足条件和满足条件的点的个数。数据结构:a 存储到起点距离并排序:TreeSetTreeSet是一种平衡二叉搜索树(基于红黑树实现),Coordinate中存储了

8、点的编号和到起点的距离(TreeSet中按距离排序,由比较器实现)。b 存储已加入的点:HashSetHashSet中将已访问的点的编号哈希一下,可以快速的存取和访问。(平均常数时间)c 存储父节点:int数组中索引是点的编号,存储的是父节点的编号。d 存储找到的点:ArrayListArrayList基于数组实现,可以获得数组的存取速度,又可以自动动态扩展其大小。Coordinate中存储了点的编号和到起点的距离。3.3 找最短路径算法:dijkstra的最短路径算法数据结构:a 存储到起点距离并排序:TreeSetTreeSet是一种平衡二叉搜索树(基于红黑树实现),Coordinate中

9、存储了点的编号和到起点的距离(TreeSet中按距离排序,由比较器实现)。b 存储已加入的点:HashSetHashSet中将已访问的点的编号哈希一下,可以快速的存取和访问。(平均常数时间)c 存储父节点:int数组中索引是点的编号,存储的是父节点的编号。4、程序实现简要说明4.1开发环境Ubuntu + android studio+ android手机一部4.2 支持包android.content.Context;android.content.Intent;android.content.res.Resources;android.graphics.Bitmap;android.gra

10、phics.BitmapFactory;android.graphics.Canvas;android.graphics.Color;android.graphics.Paint;android.os.Bundle;android.os.Environment;android.support.v4.app.DialogFragment;android.support.v4.app.FragmentActivity;android.text.Editable;android.text.TextWatcher;android.util.DisplayMetrics;android.util.Log

11、;android.view.Menu;android.view.MenuItem;android.view.MotionEvent;android.view.View;android.view.WindowManager;android.view.inputmethod.InputMethodManager;android.widget.Button;android.widget.EditText;android.widget.HorizontalScrollView;android.widget.ImageView;android.widget.LinearLayout;android.wi

12、dget.ScrollView;android.widget.TextView;android.widget.Toast;java.io.File;java.io.FileInputStream;java.io.FileNotFoundException;java.io.FileOutputStream;java.io.IOException;java.util.ArrayList;java.util.Arrays;java.util.HashSet;java.util.TreeSet;java.util.regex.Matcher;java.util.regex.Pattern;androi

13、d.app.Activity;android.content.Context;android.database.Cursor;.Uri;android.provider.MediaStore;4.3 函数原型MainActivity.java:实现了地图主要功能protected void onCreate(Bundle savedInstanceState);功能:初始化应用程序,设置各种监听器,监听器中有一些功能的实现输入参数:Bundle savedInstanceState保存了程序执行的时候的一些状态,方便恢复时接着当前状态继续执行,避免状态丢失影响用户体验。输出参数:无public

14、 boolean onCreateOptionsMenu(Menu menu);功能: 初始化菜单显示输入参数:Menu menu 系统变量输出参数:显示时候异常public boolean onOptionsItemSelected(MenuItem item);功能: 处理菜单点击事件输入参数:MenuItem item菜单项标识输出参数:是否处理了点击事件指示变量protected void onActivityResult(int requestCode, int resultCode, Intent data);功能: 对Setting.java的操作结果进行处理输入参数:int r

15、equestCode不同子程序区分变量 int resultCode子程序处理结果指示变量Intent data子程序返回的一些信息输出参数:无public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight);功能: 根据屏幕尺寸,计算原始地图图片缩放比输入参数:BitmapFactory.Options options地图图片信息 int reqWidth屏幕宽度 int reqHeight屏幕高度输出参数:放大倍数的倒数public static Bitma

16、p decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight);功能: 从资源中提取所需的地图背景图片输入参数:Resources res资源句柄 int resId地图背景图片id号 int reqWidth屏幕宽度 int reqHeight屏幕高度输出参数:地图背景图片private void customMap();功能: 让地图背景图片适配屏幕尺寸输入参数:无输出参数:无public void loadData(int scale);功能:加载地图点数据 输入参数:int

17、 scale初始数据规模大小输出参数:无public void resizeDataArray(int scale);功能:扩大地图点数组的大小 输入参数:int scale当前地图点数组大小输出参数:无public void choose(int which);功能:处理地图点操作弹出菜单的选择结果 输入参数:int which选择的子菜单索引输出参数:无public void showDialog();功能:弹出地图点操作子菜单 输入参数:无输出参数:无public void findNearby(int touchPointSerialNumber, String target, int

18、 screenHeight, int screenWidth);功能:输入起点,输入特定的地点,找最近的3个输入参数:int touchPointSerialNumber点击的地图点编号String target特定的地点 int screenHeight屏幕高度,显示搜索结果时使结果点在屏幕中心时用 int screenWidth屏幕宽度,显示搜索结果时使结果点在屏幕中心时用输出参数:无public void singleSourcedShortestPath(int beginSerialNumber, int endSerialNumber, int screenHeight,int s

19、creenWidth);功能: 找两点之间最短路劲输入参数:int beginSerialNumber起点编号int endSerialNumber终点编号 int screenHeight屏幕高度,显示搜索结果时使起点点在屏幕中心时用int screenWidth屏幕宽度,显示搜索结果时使起点点在屏幕中心时用输出参数:无Setting.java:地图数据的录入protected void onCreate(Bundle savedInstanceState);功能:初始化应用程序,设置各种监听器,监听器中有一些功能的实现输入参数:Bundle savedInstanceState保存了程序执

20、行的时候的一些状态,方便恢复时接着当前状态继续执行,避免状态丢失影响用户体验。输出参数:无protected void onPause();功能:当前activity 变为pause状态时触发的函数输入变量:无输出变量:无public boolean onCreateOptionsMenu(Menu menu);功能: 初始化菜单显示输入参数:Menu menu 系统变量输出参数:显示时候异常public boolean onOptionsItemSelected(MenuItem item);功能: 处理菜单点击事件输入参数:MenuItem item菜单项标识输出参数:是否处理了点击事件指

21、示变量public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight);功能:更换地图是,根据屏幕尺寸计算地图缩放比例输入变量:BitmapFactory.Options options地图背景图片信息int reqWidth屏幕宽度 int reqHeight屏幕高度输出变量:图片放大倍数的倒数public Bitmap getMapBitmapImage(String path);功能:获得默认地图背景图片输入变量:地图背景图片的存储路劲输出变量:地图背景图

22、片protected void onActivityResult(int requestCode, int resultCode, Intent data);功能:处理更换地图背景图片子程序的返回结果输入变量:int requestCode子程序标识代码 int resultCode子程序处理结果状态码 intent data子程序返回的数据输出变量:无public void onBackPressed();功能:处理按返回键操作输入变量:无输出变量:无public void resizeDataArray(int capacity);功能:扩大地图点数组的大小输入变量:当前数组大小输出变量:

23、无public void loadData(int scale);功能:加载地图点数据输入变量:默认地图点数组大小输出变量:无4.4 函数功能调用关系MainActivity.java:地图主要功能程序Setting.java:数据录入程序5、程序测试及结果分析5.1 功能测试程序打开初始界面:搜索某地(西操):搜索西操结果:红点标识点击某点,显示子菜单:点击搜周边后的输入界面(搜索框提示语变了):搜周边结果(食堂)结果:按到当前点距离标号,并用红线标示路径搜索两点之间最短路径结果:用红线标示路径,并显示关键点名称地图录入界面:显示了每个点的编号,方便录入邻接关系地图点数据录入界面:最上面是数

24、据录入框更换地图功能展示:现在可以构建一个武大地图了5.2 测试结果分析基本功能和扩展功能都良好实现,无bug。6、复杂度分析 6.1 输入地点名查找,鼠标点击显示在数组中线性查找,复杂度为O(n)6.2 找两点之间的最短路径(dijkstra)(n代表点数,m代表边数)sortedPoint(TreeSet):pollFirst(删除当前最小):log(m) m次 add(插入):log(m) m次added (HashSet) : contains(是否已弹出) O(1)m次 addO(1) n次对邻接点的访问(数组):O(1) m次总共:O(m log(n)6.3 找附近最近的三个某地(

25、dijkstra算法加上了判断是否满足输入条件)在6.2的基础上加上ArrayList存储找到的符合条件的最近的三个点,由于最多只有三个点,可视为常数时间,不影响复杂度。所以复杂度同6.2: O(m log(n)7、软件的用户使用说明打开app,会显示地图和搜索输入框。此时,输入目的地,点搜索,软件会将地图上目的地移到频幕中央并以红色标记,同时屏幕底部显示该点信息,搜索框隐藏。点击某点,会弹出找路径和找附近的点的子菜单,点击某个子菜单,子菜单界面消失,搜索框弹出,输入路线另一点或附近的目标点,地图上会显示搜索结果及路线,搜索框隐藏。点击菜单,点击数据录入,进入数据录入界面。在数据录入界面,会给

26、每个已存在的点编号并覆盖以黄色原点。点击已录入的点,会显示该点信息,以供修改;点击空白点,会弹出数据录入框。点击确认后对输入进行检查,符合则保存;不符合则提示。点击取消则不保存。数据录入界面点击菜单,会出现检查连通性和更换地图两个选项。点击检查连通性,双向连接的边用黄色变显示,单向连接的边用红色边显示,不连接的点之间无边,方便检查。点击更换地图,会调用系统app来更换地图背景图片。8、特色与不足 8.1 特色8.1.1、不只是华科地图。通过换背景图片和输入数据以及检查连通性等功能,可以方便的定制自己想要的任何地方的地图。8.1.2、使用携带方便,界面友好。8.2 不足在输入录入模块和主模块之间切换时,由于变换、保存等操作进行的比较多,间隔时间会有一些长,体验不是很好。九、主要参考文献 1 Bruce Eckel,Thinking In Java (Fourth Edition),械工业出版社,20072(美)科尔曼(Cormen, T.H)等著;殷建平等译,算法导论(第三版),机械工业出版社,201325

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!