《软件工程》individual project开发小记(一)

今天周四没有想去上的课,早八点到中午11点半,下午吃完饭后稍微完善了一下,目前代码可以在dev c++和vs2012上正常运行,性能分析我看资料上一大坨,考虑到目前状态不太好,脑袋转不动了,决定先放一放去看看邹老师以前的软工博客以及学长学姐们的经验,现在这里稍微总结一下.

1)      Before you implement this project, Record your estimate about the time you WILL spend in each component of your program.

做这个项目之前,因为之前从没有系统的进行过从需求分析到编码到性能分析的开发过程,所以对各项工作所预计的时间估计不足

需求分析

这项工作主要用来分析整个项目到底要做什么,每项工作的大致实现方式,预计是用半个小时左右的时间

编写代码

预计用3个小时左右的时间

性能分析

预计用1个小时左右的时间

2)      After you had implemented this project, record the ACTUAL time you spent in each component of your program.

目前为止,需求分析和编码工作已经基本完成,然后所用的时间已经远远超出想象

现在是周五下午3:40分,我昨天晚上将代码完善了一下,采用了hash表的方法来存储word,对于每一个word利用大素数求一个hash值,对于hash值相同的word我用一个链表来存,为了实现word按照频度排序,最后将链表中的word都提取出来放入一个数组中进行关键字排序就好.这样时间复杂度接近O(1);我从花园上下了一个133M左右的英文txt小说合集作为测试样本,发现程序总是崩掉,后来终于发现是我的大素数不够大,存储空间太小,我将大素数改为50W以内的最大素数后顺利解决了这个问题

需求分析

前期的需求分析明显不足,导致许多工作在编码过程中需要补充,加上在整个编码过程中零零散散的一些时间,这项工作实际大概运行了90分钟左右

编写代码

编码中遇到的一个最大的问题是从dev c++上移植到vs2012,由于vs2012的代码安全性检查较为严格,而本次项目要求不出现warning,因此在许多地方都需要改用最新建议使用的函数,这里就花费了大量的时间查找函数说明;由于对vs2012的不够熟悉也花费了一些时间;还有一点就是对于word的存储,由于每当读入一个新的word时需要判重,我最初考虑是用map来实现,但代码编写过程中发现不会使用map对string和int两个关键字进行双关键字排序...这里牺牲了代码的效率最后改用了sort编写cmp函数,这个地方留到性能分析的时候考虑用更快的方法来实现.整个编码过程实际用时在270分钟左右.

 

以上是昨天总结的

昨晚我又对addword函数进行了重写,采用hash的方法,大概用了两个小时的时间;今天上课的时候在思考出错的原因,下午调试了一个小时左右

性能分析

预计用1个小时左右的时间

3)      Describe how much time you spent on improving the performance of your program, and show a performance analysis graph (generated by VS2012 perf analysis tool), if possible, please show the most costly function in your program.

开始时我用遍历数组的方法判重,这样每次读入一个单词都需要O(n)的时间去查找显然不行,昨天晚上我想到了用hash的方法,编码+今天的调试大概用了5个小时的时间.

以下是我的performance analysis graph:

最占时间的应该就是Input函数了,它负责从目录中识别目的文件并读取,不过说实话这个性能分析自己还不太会用。。。好多dll文件怎么冒出来的还不太明白是什么东西..

 

今天是9月15日,我搜索了一下“无法查找或打开 PDB 文件”的解决方法之后得到如下性能分析图,感觉比以前慢了好多。。。难道是因为加载那些什么.dll文件么...不太懂.

深入分析函数性能

读文件夹还算不太占时间

最耗时的是读字符和将word加入的判重工作

就是这样。。

 

6:14分左右的时候。。。又跑了一遍。。。速度更快了。。分析原因是这样。。样本文件没有变,但由于之前的样本是放在深层的文件夹中,递归花了一些时间(这么有影响么。。)。。这次只有12S左右,nice .

4)      Share your 10 test cases, and how did you make sure your program can produce the correct result. (programs with incorrect result will get 0 points,  regardless of speed)

测试用例我自己设计了五组,test1用来测试各种文件类型,test2用来测试空文件夹,test3用来测试空文件,test4用来测试100M+的文件夹,test5模拟实际的文件夹结构+100M+文件夹,其他五组测试用例我决定使用其他同学的用例,通过与其他同学的代码结果对拍,我认为我的代码能够正确且比较高效的完成项目需求.

5)      Describe what you had learned in this exercise.

1.学到的第一点就是递归遍历指定目录下的所有文件.以前只会单纯的用文件指针或者输入输出重定向来访问单个文件,而在这个项目中学到了在windows和unix下利用一些api来实现递归遍历指定目录下的所有文件.

2.学到了一些由于指针安全性而引发的vs2012的安全性检查,并了解了诸如strcpy,fopen等函数的替代函数

3.vs2012中一些问题的解决方法,例如:http://blog.csdn.net/chw1989/article/details/7482205

4.字符串哈希,尤其是学会了链地址法.

5.初步了解了vs2012进行preformance analysis.

 

 

PS:需求改了要提前说啊。。。今天刚刚看到需求又改了。。。

转载于:https://www.cnblogs.com/oldoldb/p/3316865.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript中九九乘法表制作

练习一下表格&#xff0c;利用Javascript制作出来&#xff1a; 代码赏析&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…

机器学习算法--协同过滤算法

0. 关键词 推荐算法长尾理论UserCFItemCF 1. 推荐算法 互联网的飞速发展使我们进入了信息过载的时代&#xff0c;搜索引擎可以帮助我们查找内容&#xff0c;但只能解决明确的需求。为了让用户从海量信息中高效地获得自己所需的信息&#xff0c;推荐系统应运而生。 推荐系统…

利用JavaScript制作星星金字塔

主要练习&#xff1a; 代码赏析&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&q…

机器学习算法--ALS

本文转载自&#xff1a;endymecy|ALS 一、什么是ALS ALS是交替最小二乘&#xff08;alternating least squares&#xff09;的简称。在机器学习中&#xff0c;ALS特指使用交替最小二乘求解的一个协同推荐算法。它通过观察到的所有用户给商品的打分&#xff0c;来推断每个用户…

04.卷积神经网络 W2.深度卷积网络:实例探究(作业:Keras教程+ResNets残差网络)

文章目录作业1&#xff1a;Keras教程1. 快乐的房子2. 用Keras建模3. 用你的图片测试4. 一些有用的Keras函数作业2&#xff1a;残差网络 Residual Networks1. 深层神经网络的问题2. 建立残差网络2.1 identity恒等模块2.2 卷积模块3. 建立你的第一个残差网络&#xff08;50层&…

安装Python第三方库的常用方法和注意事项

安装Python的库 这里&#xff0c;我来介绍一下平时我们安装python库的几种常用方法和一些注意事项。 第一种&#xff0c;使用我们的pip工具 第二种&#xff0c;使用IDE中集成的功能进行一键安装(以Pycharm 为例) 第三种&#xff0c;使用Anaconda进行安装 使用 pip 工具安装第三…

LeetCode 968. 监控二叉树(DFS)

文章目录1. 题目2. 解题1. 题目 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 1&#xff1a; 输入&#xff1a;[0,0,null,0,0] 输出&#xff…

LeetCode 576. 出界的路径数(动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个 m n 的网格和一个球。 球的起始坐标为 (i,j) &#xff0c;你可以将球移到相邻的单元格内&#xff0c;或者往上、下、左、右四个方向上移动使球穿过网格边界。 但是&#xff0c;你最多可以移动 N 次。 找出可以将球移出边界的路径数量…

04.卷积神经网络 W3.目标检测

文章目录1. 目标定位2. 特征点检测3. 目标检测4. 滑动窗口的卷积实现5. Bounding Box预测&#xff08;YOLO&#xff09;6. 交并比7. 非极大值抑制8. Anchor Boxes9. YOLO 算法10. 候选区域作业参考&#xff1a; 吴恩达视频课 深度学习笔记 1. 目标定位 定位分类问题&#xff…

LeetCode 988. 从叶结点开始的最小字符串(DFS)

文章目录1. 题目2. 解题1. 题目 给定一颗根结点为 root 的二叉树&#xff0c;树中的每一个结点都有一个从 0 到 25 的值&#xff0c;分别代表字母 a 到 z&#xff1a;值 0 代表 a&#xff0c;值 1 代表 b&#xff0c;依此类推。 找出按字典序最小的字符串&#xff0c;该字符串…

Humble Numbers USCAO chapter 3.1

...目测我自己写坑定超时,就去NOCOW看了下,题解,官方是每个质数与已有的humble想乘取大于最大humble的最小数即是新的最大humble, 然后我就写了个个,开始嫌麻烦用set存,超时的飞起。然后全部改成数组,结果case 6还是超时,想了半天感觉和别人的题解也没啥差别,为什么运行时间差这…

LeetCode 636. 函数的独占时间(栈)

文章目录1. 题目2. 解题1. 题目 给出一个非抢占单线程CPU的 n 个函数运行日志&#xff0c;找到函数的独占时间。 每个函数都有一个唯一的 Id&#xff0c;从 0 到 n-1&#xff0c;函数可能会递归调用或者被其他函数调用。 日志是具有以下格式的字符串&#xff1a;function_id…

04.卷积神经网络 W3.目标检测(作业:自动驾驶 - 汽车检测)

文章目录1. 问题背景2. YOLO 模型2.1 模型细节2.2 分类阈值过滤2.3 非极大值抑制2.4 完成过滤3. 在照片上测试已预训练的YOLO模型3.1 定义类别、anchors、图片尺寸3.2 加载已预训练的模型3.3 模型输出转化为可用的边界框变量3.4 过滤边界框3.5 在图片上运行测试题&#xff1a;参…

LeetCode 775. 全局倒置与局部倒置(归并排序/二分查找/一次遍历)

文章目录1. 题目2. 解题2.1 归并排序求逆序度2.2 二分查找2.3 一次遍历1. 题目 数组 A 是 [0, 1, ..., N - 1] 的一种排列&#xff0c;N 是数组 A 的长度。 全局倒置指的是 i,j 满足 0 < i < j < N 并且 A[i] > A[j] &#xff0c;局部倒置指的是 i 满足 0 < i…

使用 ServiceStack 构建跨平台 Web 服务

本文主要来自MSDN杂志《Building Cross-Platform Web Services with ServiceStack》&#xff0c;Windows Communication Foundation (WCF) 是一个相当优秀的服务框架&#xff0c;当我们讨论跨平台的服务的时候&#xff0c;虽然WCF对WebService的支持还行&#xff0c;在面对一些…

Hive基础(一)

一、Hive是什么 Hive是基于Hadoop的一个数据仓库工具(离线)&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL查询功能。&#xff0c;它能接收用户输入的sql语句&#xff0c;然后把它翻译成mapreduce程序对HDFS上的数据进行查询、运算&#xff0c;…

LeetCode 926. 将字符串翻转到单调递增(动态规划)

文章目录1. 题目2. 解题1. 题目 如果一个由 0 和 1 组成的字符串&#xff0c;是以一些 0&#xff08;可能没有 0&#xff09;后面跟着一些 1&#xff08;也可能没有 1&#xff09;的形式组成的&#xff0c;那么该字符串是单调递增的。 我们给出一个由字符 0 和 1 组成的字符串…

利用Jqurey写一个输入内容增加并且可以删除,上下移动的标签

最终结果如下&#xff0c;输入内容增加标签并且可以删除&#xff0c;上下移动&#xff1a; 代码赏析&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>todolist</title><style type…

java的注释、关键字、标识符、变量常量、数据类型、运算符、流程控制等

java的注释、关键字、标识符、变量常量、 数据类型、运算符、流程控制等 1. java概述 1.1 java的技术体系 Java SE&#xff1a;是Java的标准版&#xff0c;提供了完整的java核心API。 Java EE&#xff1a;是Java的企业版&#xff0c;主要用于开发…

LeetCode 851. 喧闹和富有(拓扑排序)

文章目录1. 题目2. 解题1. 题目 在一组 N 个人&#xff08;编号为 0, 1, 2, ..., N-1&#xff09;中&#xff0c;每个人都有不同数目的钱&#xff0c;以及不同程度的安静&#xff08;quietness&#xff09;。 为了方便起见&#xff0c;我们将编号为 x 的人简称为 "perso…