当前位置: 首页 > news >正文

3123004481

第一次个人编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477
这个作业的目标 实现一个论文查重程序
github连接: https://github.com/YezhuT0nyS/3123004481

一、PSP表格如下

Process Stages Process Stages (中文) 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 35
· Estimate · 估计这个任务需要多少时间 160 240
Development 开发 200 180
· Analysis · 需求分析(包括学习新技术) 120 140
· Design Spec · 生成设计文档 15 20
· Design Review · 设计复审 25 25
· Coding Standard · 代码规范(为目前的开发制定合适的规范) 20 10
· Design · 具体设计 40 50
· Coding · 具体编码 50 80
· Code Review · 代码复审 30 60
· Test · 测试(自我测试,修改代码,提交修改) 20 35
Reporting 报告 80 100
· Test Report · 测试报告 40 70
· Size Measurement · 计算工作量 20 20
· Postmortem & Process Improvement Plan · 事后总结,并提出过程改进计划 20 10
· 合计 870 1075

二、计算模块接口的设计与实现过程
程序整体结构
1.模块架构
image

2.程序流程图

3.算法独到之处
核心算法:采用改进的余弦相似度算法,通过词频向量量化文本特征,计算两篇文本的向量夹角余弦值作为重复率。
独到之处:
引入词权重机制,对重要词汇(如专业术语)赋予更高权重

4.改进思路
初始问题:对大文本(10 万字以上)处理时,词频统计和向量计算耗时过长(约 8 秒)
优化措施:
将列表存储改为字典哈希表存储,将词频查询复杂度从 O (n) 降至 O (1)
实现稀疏向量表示,只存储非零值元素
引入缓存机制,复用相同文本的处理结果
使用生成器 (generator) 替代列表推导,减少内存占用
优化效果:处理时间从 8 秒降至 1.2 秒,内存占用减少 65%

6.计算模块异常处理说明
文件不存在异常 (FileNotFoundError)
设计目标:处理输入文件路径错误或文件不存在的情况
测试样例:传入不存在的文件路径 "nonexistent.txt"
错误场景:用户输入了错误的文件路径或文件被误删除

权限错误异常 (PermissionError)
设计目标:处理程序无权限读取文件或写入结果的情况
测试样例:尝试读取系统保护文件或写入只读目录
错误场景:运行程序的用户权限不足

空文件异常 (EmptyFileError)
设计目标:处理原文或抄袭版论文为空的情况
测试样例:传入内容为空的文本文件
错误场景:用户误传空文件或文件内容被清空

格式错误异常 (FormatError)
设计目标:处理非文本格式的文件(如二进制文件)
测试样例:传入图片文件或压缩包作为输入
错误场景:用户传入了错误格式的文件

计算超时异常 (CalculationTimeoutError)
设计目标:防止程序在处理超大文本时无响应
测试样例:传入 500 万字以上的超大文本
错误场景:处理超出预期大小的文本导致计算时间过长
采用增量式词表构建,减少内存占用
实现稀疏向量存储,优化大文本处理性能

http://www.hskmm.com/?act=detail&tid=13848

相关文章:

  • 使用python读取windows日志表
  • 开机RAM分析调试SOP
  • 9.20 模拟赛 T4
  • 2025.9.21 测试 (a1a2a3a4a5)
  • 原码、反码和补码
  • Русский язык
  • 基于Hex Editor Neo的二进制文件模板
  • 【F#学习】字符
  • kubebuilder创建Operator示例
  • 集训总结(八)
  • 使用try-finally结构执行状态重置
  • java03预习
  • x6831卡顿分析
  • 实测对比:权威榜单之微信排版软件Top5(含详细测评)
  • 【F#学习】布尔运算优先级
  • 粘连字符验证码的分割与识别思路
  • 深入解析:【Spark+Hive+hadoop】基于spark+hadoop基于大数据的人口普查收入数据分析与可视化系统
  • part 8
  • 【本地音乐库】的搭建管理工具推荐
  • 扭曲变形验证码的图像处理与识别思路
  • 每日收获
  • C++中std::map容器中元素删除方法汇总 - 详解
  • 物理半程与半时问题
  • 从用户态到内核态:Windows CC 技术深度解析(第一篇:DNS隧道)
  • 9.22 科研小结:不要总是预设成功,失败才是常态
  • STM32光强传感器实验详解 - 实践
  • 在CodeBolcks下wxSmith的C++编程教程——从Hello world开始讲述wxSmith使用基础
  • 【Azure Batch】使用Start Task来挂载Storage Blob
  • HP notebook set your key to action key /multimedia key
  • newDay01