1. Job Roadmap
  2. Home
  3. Problem Set
  4. codenotelist
  5. Forum
  6. course
  7. Shore Share Sessions
  8. Record
  1. Login
  2. Sign Up
  3. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
    ZhContent TextSol AI分析

解题思路

问题抽象

  • 文档集合 corpus[0…N-1] 按时间递增(下标既是时间点/编号)。
  • 查询 (t, q) 的检索窗口只看 L = max(0, t-K+1) 到 R = min(t, N-1) 的 M=R-L+1 篇文档。
  • 动态权重:窗口内从新到旧编号第 j 篇(最新 j=1)的权重 weight = (K - j + 1) / K(最新 1,最旧 1/K)。
  • 向量定义(关键)

P3639.第2题-历史的窗口搜索

    1000ms Tried: 1790 Accepted: 159 Difficulty: 8 所属公司 : 华为
    算法与标签>模拟

题目内容

传统TF−IDFTF-IDFTF−IDF方法对突发新闻的敏感度不足,为提高热点词识别效果,某新闻热点追踪平台提出基于历史窗口的TF-IDF方法,具体地,在某个时间点ttt提出一个查询qqq时,系统不应该在整个历史文档库中进行大海捞针式的搜索。

相反,它需要智能地聚焦于查询发生时间点 ttt 前的一段”历史时间窗口“内的文档,并且只需考虑这个窗口内最新的信息。

您的任务就是实现这个“历史窗口”检索引擎的核心逻辑。

历史窗口:仅计算从查询时间点 ttt 开始之前的 KKK 篇文档的词频,而非全部历史文档。

动态权重:为了使该搜索模型更关注短期趋势,窗口内越新(文档编号mmm越大)的文档权重越高,窗口内第jjj篇文档的权重为(K−j+1)/K(K-j+1)/K(K−j+1)/K(最新文档权重=1=1=1,最旧文档权重=1/K=1/K=1/K)。

筛选与输出:计算查询内容qqq与窗口内每一篇文档向量之间的余弦相似度(CosineSimilarity)(Cosine Similarity)(CosineSimilarity),返回本次查询中余弦相似度>=0.6>=0.6>=0.6且余弦相似度最高的文档编号mmm,若未找到满足条件的文档编号(余弦相似度<0.6<0.6<0.6),则本次查询返回−1-1−1;若存在多个相同最高相似度的文档,返回时间窗口中最早的一篇文档编号。

相似度计算方法:查询qqq向量(向量AAA)的第iii维计算公式为,qi=TF(wi,q)×IDF(wi)q_i = TF(w_i,q)×IDF(w_i)qi​=TF(wi​,q)×IDF(wi​) ,其中 TF(wi,q)TF(w_i,q) TF(wi​,q)表示词 wiw_iwi​在所有查询内容queryqueryquery中的词频,IDF(wi)IDF(w_i) IDF(wi​)表示词wi w_iwi​在窗口文档集合中的中逆文档频率。窗口文档集合中第nnn篇文档(向量BBB)的第iii维向量计算公式为:di=TF(wi,doc)×IDF(wi)×weightnd_i = TF(w_i,doc) × IDF(w_i) × weight_ndi​=TF(wi​,doc)×IDF(wi​)×weightn​,其中 TF(wi,doc)TF(w_i,doc)TF(wi​,doc) 表示词 wiw_iwi​在查询窗口文档集合中的词频,IDF(wi)IDF(w_i) IDF(wi​)表示词 wiw_iwi​在窗口文档中的中逆文档频率,weightnweight_nweightn​表示第nnn篇文档的动态权重。

提示:向量A.BA.BA.B的余弦相似度:cos⁡(A,B)=A⋅B∥A∥∥B∥\cos (A, B)=\frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\|\|\mathbf{B}\|}cos(A,B)=∥A∥∥B∥A⋅B​

输入描述

输入第一行表示文档集合corpuscorpuscorpus 总数NNN

第二行开始每一行为从时间点000开始的文档,时间点和文档编号按行递增 (注:文档编号、查询时间点均可理解为数组下标,下标从000开始)

之后的一行为查询窗口的大小KKK

接下来的下一行表示总查询次数PPP

然后紧跟每个查询,格式为搜索时间点ttt具体查询内容qqq,ttt和qqq中间用空格隔开

参数限制

1.1<=K<=1.1<=K<=1.1<=K<=文档总数NNN

2.0<2.0<2.0<文档总数N<=100N<=100N<=100

3.0<3.0<3.0<总查询次数P<=100P<=100P<=100

在处理完基本题目的I/OI/OI/O操作后,你可能需要实现的函数原型

是historyhistoryhistory_searchsearchsearch(corpus,K,query)(corpus,K,query)(corpus,K,query),参数说明如下:

1.corpuscorpus corpus:从时间点0开始的文档集合,corpus[i]corpus[i]corpus[i]表示第i篇文档,文档编号mmm和时间点ttt均对应数组下标,下标从000开始。

2.KKK:窗口大小。

3.queryqueryquery:查询列表。每个查询是一个二元组(查询时间点ttt,查询内容qqq)。

输出描述

输出空格分隔的最匹配的文档编号mmm,文档编号和查询顺序 一 一 对应,若两篇文档最高相似度相同,则返回窗口中最早的文档编号

若无匹配则对应位置返回−1-1−1

样例1

输入

5
long short term memory
data science
natural language processing
python for data science
a tutorial on python
3
3
2 natural language
4 python data science
4 long short term memory

输出

2 3 -1

说明

第一行555表示新闻文档集合corpuscorpus corpus的总数NNN

然后紧跟从时间点000开始的具体的每篇文档,时间点和文档编号按行递增:

时间点000文档编号000:"longlonglong shortshortshort termtermterm memorymemorymemory"

时间点111文档编号111:“datadatadata sciencesciencescience”

时间点222文档编号222:“naturalnaturalnatural languageprocessinglanguage processinglanguageprocessing"

时间点333文档编号333:“pythonpythonpython forforfor datadatadata sciencesciencescience"

时间点444文档编号444:“aaa tutorialtutorialtutorial ononon pythonpythonpython"

下一行的“333”为窗口的大小KKK

接下来的“333”表示查询queryqueryquery的个数

然后紧跟每个查询,格式为搜索时间点ttt具体查询内容qqq

第一次查询"naturalnaturalnatural languagelanguagelanguage"在时间点222,我们正好可以看到0−20-20−2号文档,因为只有2号文档"naturalnaturalnatural languagelanguagelanguage processingprocessingprocessing"出现了关键词,因此第一个查询返回222

第二次查询"pythonpythonpython datadatadata sciencesciencescience"在时间点444,由于窗口大小是333,我们可以看到2,3,42,3,42,3,4号文档我们无法看到0,10,10,1号文档,本次查询最匹配的是文档编号 333

第三次查询“longlonglong shortshortshort termtermterm memorymemorymemory"在时间点444,同样的我们只能看到2,3,42,3,42,3,4号文档,无法看到0,10,10,1号文档,且2,3,42,3,42,3,4号文档中没有与查询相似文档,

所以本次查询返回−1-1−1

提示

1.qq q可能存在不在窗口文档集合中的查询词,因此在计算逆文档频率的时候你需要进行平滑操作,公式如下IDF(x)=log⁡(N+1N(x)+1)+1I D F(x)=\log \left(\frac{N+1}{N(x)+1}\right)+1IDF(x)=log(N(x)+1N+1​)+1其中NNN代表窗口文档的总数,而N(x)N(x)N(x)代表包含词xxx的文档总数

2.新闻文档集合corpuscorpuscorpus 所包含的文档内容是空格分隔的小写英文文档字符串

登录后即可使用 AI 分析。

模式
倒计时时长
:

最长 10 小时 59 分;应用后按此时长重新开始。

提示:点击提交记录在左侧题面区域查看详情
题库
AI分析设置
留空使用官方API Key,每天有次数限制(自定义API Key仅限会员和管理员使用,不限次数)
会员和管理员可切换模型;切到 Kimi/智谱/通义/豆包时需填写对应供应商 API Key
升级会员,可将运行与提交冷却时间缩短至 1 秒起

Status

  • Judging Queue
  • Service Status

Development

  • Open Source

Support

  • Help
  • Contact Us

About

  • About
  • Privacy
  • Terms of Service
  • Copyright Complaint
  1. Language
    1. English
    2. 한국어
    3. 简体中文
    4. 正體中文
  2. Legacy mode
  3. Theme
    1. Light
    2. Dark
  1. 京ICP备2025123107号-1
  2. Worker 2, 49ms
  3. Powered by Hydro v5.0.0-beta.18 Community
CLOSE


ScanQRCodePrompt

请使用微信扫描下方二维码完成注册

Forgot password or username?