编程作业第一次

news/2025/3/10 14:17:21/文章来源:https://www.cnblogs.com/lwy2129733195/p/18759864

github仓库链接:3123004747/cheaker at main · lwy8852/3123004747

Psp表格

psp阶段 预估耗时 实际耗时
· 计划 (Planning) 15 15
· 估计任务时间 (Estimate) 40 55
· 开发 (Development) 200 220
· 需求分析 (Analysis) 30 25
· 生成设计文档 (Design Spec) 20 20
· 设计复审 (Design Review) 25 30
· 代码规范 (Coding Standard) 20 25
· 具体设计 (Design) 20 20
· 具体编码 (Coding) 15 20
· 代码复审 (Code Review) 10 15
· 测试(包括修改) (Test) 30 25
· 报告 (Reporting) 60 50
· 测试报告 (Test Report) 20 30
· 计算工作量 (Size Measurement 40 50
事后总结与改进 (Postmortem) 30 50
· 总计 (Total) 575 650

1. 模块接口设计与实现

流程图

核心模块

  1. 文件读取模块

    java

    public static String readFile(String path) throws IOException {return new String(Files.readAllBytes(Paths.get(path)), StandardCharsets.UTF_8);
    }
    
  2. 文本预处理模块

    java

    private static final Pattern PATTERN = Pattern.compile("[\\p{P}\\s]");
    public static String preprocess(String text) {return PATTERN.matcher(text).replaceAll("").toLowerCase();
    }
    
  3. 相似度计算模块

    java

    public static double calculateSimilarity(String text1, String text2) {int[][] counts = new int[2][65536];for (char c : text1.toCharArray()) counts[0][c]++;for (char c : text2.toCharArray()) counts[1][c]++;double dotProduct = 0.0, norm1 = 0.0, norm2 = 0.0;for (int i = 0; i < 65536; i++) {dotProduct += counts[0][i] * counts[1][i];norm1 += counts[0][i] * counts[0][i];norm2 += counts[1][i] * counts[1][i];}return dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2));
    }
    
  4. 结果输出模块

    java

    public static void writeResult(String path, double similarity) throws IOException {Files.write(Paths.get(path), String.format("%.2f", similarity).getBytes(StandardCharsets.UTF_8));
    }
    

2. 性能改进

性能分析

改进点

  1. 字符统计优化

    • 使用 int[256] 代替 int[65536],仅统计 ASCII 字符。

    java

    for (char c : text1.toCharArray()) {if (c < 256) counts[0][c]++;
    }
    
  2. 正则表达式预编译

    • 正则表达式已预编译为静态常量。

    java

    private static final Pattern PATTERN = Pattern.compile("[\\p{P}\\s]");
    
  3. 并行化处理

    • 对超大文本使用并行流。

    java

    text1.chars().parallel().forEach(c -> counts[0][c]++);
    

3. 单元测试展示

测试用例

  1. 完全相同的文本

    @Test
    public void testIdenticalTexts() {String text = "Hello world!";double result = Main.calculateSimilarity(text, text);assertEquals(1.00, result, 0.001);
    }
    
  2. 完全不同的文本

    @Test
    public void testDifferentTexts() {String original = "abcdef";String plagiarized = "ghijkl";double result = Main.calculateSimilarity(original, plagiarized);assertEquals(0.0, result, 0.001);
    }
    
  3. 空文本

    @Test
    public void testEmptyText() {String original = "";String plagiarized = "Hello world!";double result = Main.calculateSimilarity(original, plagiarized);assertEquals(0.0, result, 0.001);
    }
    

4. 异常处理说明

异常类型

  1. 文件不存在

    try {String content = readFile("nonexistent.txt");
    } catch (IOException e) {System.err.println("文件不存在!");
    }
    
  2. 空文本

    if (text1.isEmpty() || text2.isEmpty()) {return 0.0;
    }
    
  3. 命令行参数错误

    if (args.length != 3) {System.err.println("用法: java -jar main.jar 原文文件 抄袭文件 输出文件");System.exit(1);
    }
    

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

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

相关文章

【Kakfa】初识Kafka

简介Kafka是一个分布式消息系统,有LinkedIn公司开发,现已成为Apache基金顶级开源项目。 是一种快速、可扩展的、分布式的消息发布-订阅系统基础组成producer consumer broker topic partition消息和批次消息:Kafka把数据单元称之为消息,可以把数据消息看成数据库中的一个“…

算子 get_contour_attrib_xld - 返回 XLD 轮廓的点属性值

算子 get_contour_attrib_xld 名称 get_contour_attrib_xld — 返回 XLD 轮廓的点属性值。 签名 get_contour_attrib_xld(Contour : : Name : Attrib) 描述 get_contour_attrib_xld 算子将 XLD 轮廓 Contour 中属性 Name 的值返回到 Attrib 中。轮廓点属性是为每个轮廓点定义的…

川大网安挑战赛游记

会赢吗部分在手机上完成,格式可能有误,见谅。前:可能是最后的比赛了,还是记一下吧Day -1 下午三点半就走了,吃了汉堡王上火车,路上看网课,听歌。 到家快十点了,最终后半夜前睡了。 Day 0 早起,7:30 的飞机。发现手机没电了,不过还是顽强的让我听了一路的歌。 酒店严格…

win11开启22端口ssh服务器

步骤按win,输入可选功能条读完后,搜索service找到ssh然后进行设置,或者也可以使用命令。启动后端口就打开了。 配置默认shell 按win,搜索regedit,打开注册表编辑器。 导航到以下路径: HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH 在右侧窗口中,找到或创建一个名为 DefaultShel…

Python+Django网上招聘系统的设计与实现

平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 - 前台功能包括:首页、岗位详情页、简历中心、用户设置模块。 - 后台功能包括:总览、岗位管理、公司管理、分类管理、标签管理、评论管理、用户管理、…

elasticseach-分页搜索

背景 使用es通过常规分页来做导出是遇到不能超过from不能跳过1万的问题。结合这个问题契机深入了解一下es的分页。 入参{"from":10601,"size": 5}响应{"error": {"root_cause": [{"type": "illegal_argument_exception…

牛客 周赛83 20250304

牛客 周赛83 20250304 https://ac.nowcoder.com/acm/contest/102896 A: 题目大意:给定字符,不同输出 #include<bits/stdc++.h> #define cintie ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define Trd int T;cin>>T;while (T--)solve(); #define LLi…

3.2 练习

在使用torch.autograd.grad计算二阶导数时,可以仅设置create_graph=True而无需设置retain_graph=True。以下是关键点总结:create_graph的作用: 当设置为True时,会保留梯度计算图,使得后续能对梯度再次求导(如计算二阶导数)。这是高阶导数计算的关键参数。retain_graph的…

6、seq2seq - Transformer-Encoder、Transformer-Decoder

Attention - 注意力机制seq2seq是 Sequence to Sequence 的简写,seq2seq模型的核心就是编码器(Encoder)和解码器(Decoder)组成的通过在seq2seq结构中加入Attention机制,是seq2seq的性能大大提升,先在seq2seq被广泛的用于机器翻译、对话生成、人体姿态序列生成等各种任务…

作业-个人项目编程

作业gitHub 作业链接这个作业属于哪个课程 软件工程这个作业要求在哪里 作业要求这个作业的目标 完成一次个人项目计算模块接口的设计与实现过程1. 代码组织 计算模块的核心功能是读取文件内容并计算两个文本的相似度。代码组织如下: 模块划分文件读取模块:函数:readFile。 …

mybatis-plus02--Lesson2

CRUD和myBatis-plus插件 1.Insert方法和雪花算法 当一个数据表中的id为主键时,且插入的数据的时候不插入主键id,那么会发生什么呢?接下来就进行一次简单测试,还是那个User表,插入其它属性,不插入主键id。 测试方法:@Testpublic void testInsert(){User user = new User(…

免费好用的云服务器提供商

最近倒腾云服务器,想在阿里云上购买,结果发现价格太高,是在买不起。我只好在百度上翻呀翻,终于找到一个免费的,实名一下就能用。链接我贴这儿了,要用请自取:免费好用的云服务器提供商