数据结构与算法题目集(中文) - 7-44 基于词频的文件相似度(30 分)

简介: 数据结构与算法题目集(中文) - 7-44 基于词频的文件相似度(30 分)

题目链接:点击打开链接

题目大意:略。

解题思路:


1、单词筛选(考虑长度)并统一大或小写。

2、set 自带去重统计 + st.size()(用 set 存放且用 set 统计)。

3、注意:一开始存放的时候,直接去重。

4、用 set count 来做最后的统计,否则用其他容器统计完又清空会 TLE。

AC 代码

#include<bits/stdc++.h>
#include<cmath>
#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
set<string> st[110];
int main()
{
    int n;
    char ts[15],s[100];
    while(~scanf("%d",&n))
    {
        int kase=1;
        for(int i=0;i<110;i++) st[i].clear();
        while(~scanf("%s",s))
        {
            int len=strlen(s),k=0;
            if(s[0]=='#' && len==1)
            {
                if(kase++==n) break;
            }
            for(int i=0;i<len;i++)
            {
                if(s[i]>='a'&&s[i]<='z') s[i]=toupper(s[i]);
            }
            for(int i=0,f=0;i<len;i++)
            {
                char c=s[i];
                if(isupper(c))
                {
                    if(f) continue;
                    ts[k++]=c;
                    if(k>=10) // 超过10,有字符分隔else会处理,没有字符分隔这边处理
                    {
                        ts[k++]='\0';
                        f=1;
                        k=0; // 避免与for外面的判断混淆
                        st[kase].insert(ts);
                    }
                }
                else // 有字符分隔
                {
                    if(!f) // 没超过10
                    {
                        if(k>=3)
                        {
                            ts[k++]='\0';
                            st[kase].insert(ts);
                        }
                    }
                    else; // 超过10
                    f=0;
                    k=0;
                }
            }
            if(k>=3)
            {
                ts[k++]='\0';
                st[kase].insert(ts);
            }
        }
//        for(int i=1;i<=n;i++)
//        {
//            printf("%d:\n",i);
//            for(set<string>::iterator it=st[i].begin();it!=st[i].end();it++)
//            {
//                printf("%s ",(*it).c_str());
//            }
//            puts("\n-----------------");
//        }
        int m,a,b; scanf("%d",&m);
        for(int i=0,up;i<m;i++)
        {
            up=0;
            scanf("%d%d",&a,&b);
            int mi=min(st[a].size(),st[b].size());
            if(st[a].size()==mi)
            {
                for(set<string>::iterator it=st[a].begin();it!=st[a].end();it++)
                    if(st[b].count(*it)==1) up++;
            }
            else
            {
                for(set<string>::iterator it=st[b].begin();it!=st[b].end();it++)
                    if(st[a].count(*it)==1) up++;
            }
            printf("%.1f%%\n",up*1.0/(st[a].size()+st[b].size()-up)*100);
        }
    }
    return 0;
}
目录
相关文章
|
7月前
|
机器学习/深度学习 存储 算法
解锁文件共享软件背后基于 Python 的二叉搜索树算法密码
文件共享软件在数字化时代扮演着连接全球用户、促进知识与数据交流的重要角色。二叉搜索树作为一种高效的数据结构,通过有序存储和快速检索文件,极大提升了文件共享平台的性能。它依据文件名或时间戳等关键属性排序,支持高效插入、删除和查找操作,显著优化用户体验。本文还展示了用Python实现的简单二叉搜索树代码,帮助理解其工作原理,并展望了该算法在分布式计算和机器学习领域的未来应用前景。
|
4月前
|
存储 监控 算法
基于 C# 的局域网计算机监控系统文件变更实时监测算法设计与实现研究
本文介绍了一种基于C#语言的局域网文件变更监控算法,通过事件驱动与批处理机制结合,实现高效、低负载的文件系统实时监控。核心内容涵盖监控机制选择(如事件触发机制)、数据结构设计(如监控文件列表、事件队列)及批处理优化策略。文章详细解析了C#实现的核心代码,并提出性能优化与可靠性保障措施,包括批量处理、事件过滤和异步处理等技术。最后,探讨了该算法在企业数据安全监控、文件同步备份等场景的应用潜力,以及未来向智能化扩展的方向,如文件内容分析、智能告警机制和分布式监控架构。
113 3
|
7月前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
6月前
|
存储 算法 文件存储
探秘文件共享服务之哈希表助力 Python 算法实现
在数字化时代,文件共享服务不可或缺。哈希表(散列表)通过键值对存储数据,利用哈希函数将键映射到特定位置,极大提升文件上传、下载和搜索效率。例如,在大型文件共享平台中,文件名等信息作为键,物理地址作为值存入哈希表,用户检索时快速定位文件,减少遍历时间。此外,哈希表还用于文件一致性校验,确保传输文件未被篡改。以Python代码示例展示基于哈希表的文件索引实现,模拟文件共享服务的文件索引构建与检索功能。哈希表及其分布式变体如一致性哈希算法,保障文件均匀分布和负载均衡,持续优化文件共享服务性能。
|
7月前
|
存储 算法 Java
解锁“分享文件”高效密码:探秘 Java 二叉搜索树算法
在信息爆炸的时代,文件分享至关重要。二叉搜索树(BST)以其高效的查找性能,为文件分享优化提供了新路径。本文聚焦Java环境下BST的应用,介绍其基础结构、实现示例及进阶优化。BST通过有序节点快速定位文件,结合自平衡树、多线程和权限管理,大幅提升文件分享效率与安全性。代码示例展示了文件插入与查找的基本操作,适用于大规模并发场景,确保分享过程流畅高效。掌握BST算法,助力文件分享创新发展。
|
8月前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
8月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
11月前
|
存储 C语言
栈和队列题目练习
栈和队列题目练习
93 0
|
自然语言处理 算法 搜索推荐
字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析
在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介绍这个问题。
687 1

热门文章

最新文章