个人项目
*PSP2.1* | *Personal Software Process Stages* | *预估耗时(分钟)* | *实际耗时(分钟)* |
---|---|---|---|
Planning | 计划 | 30 | 30 |
Estimate | 估计这个任务需要多少时间 | 510 | 510 |
Development | 开发 | 60 | 60 |
Analysis | 需求分析 (包括学习新技术) | 30 | 30 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 30 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
Design | 具体设计 | 30 | 30 |
Coding | 具体编码 | 60 | 60 |
Code Review | 代码复审 | 60 | 60 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 30 | 30 |
Test Repor | 测试报告 | 30 | 30 |
Size Measurement | 计算工作量 | 30 | 30 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 510 | 510 |
程序用动态编程算法实现,算法是最长公共子序列(LCS)。以下是算法的工作原理:
初始化
它初始化了一个名为match的2D向量,以存储两个输入字符串前缀之间的公共子序列的长度。其中s1和s2是两个字符串的输入向量。 匹配向量中的所有值初始化为0。
填充矩阵
该算法从索引1开始,遍历两个输入字符串s1和s2的每个字符。 如果当前索引的字符匹配,则将match [i] [j]中的值增加1,指示如果包含两个字符,公共子序列的长度。 如果字符不匹配,则从上面或左边的单元格中取最大值并将其赋给match [i] [j]。
计算相似性
最后,它通过将最长公共子序列的长度(在 match [s1.size()] [s2.size()] 中找到)除以第一个文档的长度(s1.size())来计算相似度。 找到了两个文档之间最长公共子序列的长度,就可以作为它们相似性的度量。
单元测试
#include <gtest/gtest.h>
#include "FirstProject.hpp"
TEST(CompareTest, EmptyStrings) {
std::vector<std::string> s1;
std::vector<std::string> s2;
double similarity = solution::compare(s1, s2);
ASSERT_DOUBLE_EQ(similarity, 0.0);
}
TEST(CompareTest, IdenticalStrings) {
std::vector<std::string> s1 = {"apple", "banana", "orange"};
std::vector<std::string> s2 = {"apple", "banana", "orange"};
double similarity = solution::compare(s1, s2);
ASSERT_DOUBLE_EQ(similarity, 1.0);
}
TEST(CompareTest, DifferentStrings) {
std::vector<std::string> s1 = {"apple", "banana", "orange"};
std::vector<std::string> s2 = {"grape", "melon", "strawberry"};
double similarity = solution::compare(s1, s2);
ASSERT_DOUBLE_EQ(similarity, 0.0);
}
// Test case for comparing partially similar strings
TEST(CompareTest, PartiallySimilarStrings) {
std::vector<std::string> s1 = {"apple", "banana", "orange"};
std::vector<std::string> s2 = {"apple", "grape", "orange"};
double similarity = solution::compare(s1, s2);
ASSERT_DOUBLE_EQ(similarity, 0.6666666666666666);
}
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
标签:std,刘栋,similarity,s2,s1,30,3121002754,60
From: https://www.cnblogs.com/NOPASSWD/p/18081646