自动摘要

简介: 我们试着降低此问题的复杂度。因为上述思路一再进行查找的时候,总是重复地循环,效率不高。那么怎么简化呢?先来看看这些序列: w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1     问题在于,如何一次把所有的关键词都扫描到,并且不遗漏。

 我们试着降低此问题的复杂度。因为上述思路一再进行查找的时候,总是重复地循环,效率不高。那么怎么简化呢?先来看看这些序列:

w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1

    问题在于,如何一次把所有的关键词都扫描到,并且不遗漏。扫描肯定是无法避免的,但是如何把两次扫描的结果联系起来呢?这是一个值得考虑的问题。

    沿用前面的扫描方法,再来看看。第一次扫描的时候,假设需要包含所有的关键词,从第一个位置w0处将扫描到w6处:

 

w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1

 

    那么,下次扫描应该怎么办呢?先把第一个被扫描的位置挪到q0处。

w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1

    然后把第一个被扫描的位置继续往后面移动一格,这样包含的序列中将减少了关键词q0。那么,我们便可以把第二个扫描位置往后移,这样就可以找到下一个包含所有关键词的序列。即从w4扫描到w9处,便包含了q1,q0:

w0,w1,w2,w3,q0,w4,w5,q1,w6,w7,w8,q0,w9,q1

    这样,问题就和第一次扫描时碰到的情况一样了。依次扫描下去,在w中找出所有包含q的序列,并且找出其中的最小值,就可得到最终的结果。编程之美上给出了如下参考代码:

//July、updated,2011.10.21。

  1. int nTargetLen = N + 1;           // 设置目标长度为总长度+1  
  2. int pBegin = 0;                     // 初始指针  
  3. int pEnd = 0;                       // 结束指针  
  4. int nLen = N;                       // 目标数组的长度为N  
  5. int nAbstractBegin = 0;           // 目标摘要的起始地址  
  6. int nAbstractEnd = 0;           // 目标摘要的结束地址  
  7.   
  8. while(true)  
  9. {  
  10.     // 假设未包含所有的关键词,并且后面的指针没有越界,往后移动指针  
  11.     while(!isAllExisted() && pEnd < nLen)  
  12.     {  
  13.         pEnd++;  
  14.     }  
  15.       
  16.     // 假设找到一段包含所有关键词信息的字符串  
  17.     while(isAllExisted())  
  18.     {  
  19.         if(pEnd – pBegin < nTargetLen)  
  20.         {  
  21.             nTargetLen = pEnd – pBegin;  
  22.             nAbstractBegin = pBegin;  
  23.             nAbstractEnd = pEnd – 1;   
  24.         }  
  25.         pBegin++;  
  26.     }  
  27.     if(pEnd >= N)  
  28.         Break;  
  29. }   

 

  小结:上述思路二相比于思路一,很明显提高了不小效率。我们在匹配的过程中利用了可以省去其中某些死板的步骤,这让我想到了KMP算法的匹配过程。同样是经过观察,比较,最后总结归纳出的高效算法。我想,一定还有更好的办法,只是我们目前还没有看到,想到,待我们去发现,创造。

转载:http://blog.csdn.net/v_july_v/article/details/6890054

相关文章
|
8月前
|
JSON 编解码 物联网
理解时间戳的视频理解大模型CogVLM2开源!视频生成、视频摘要等任务有力工具!
随着大型语言模型和多模态对齐技术的发展,视频理解模型在通用开放领域也取得了长足的进步。
|
9月前
|
自然语言处理 算法
技术心得记录:机器翻译中的参数调整
技术心得记录:机器翻译中的参数调整
57 0
|
机器学习/深度学习 自然语言处理 安全
【网安专题11.8】14Cosco跨语言代码搜索代码: (a) 训练阶段 相关程度的对比学习 对源代码(查询+目标代码)和动态运行信息进行编码 (b) 在线查询嵌入与搜索:不必计算相似性
【网安专题11.8】14Cosco跨语言代码搜索代码: (a) 训练阶段 相关程度的对比学习 对源代码(查询+目标代码)和动态运行信息进行编码 (b) 在线查询嵌入与搜索:不必计算相似性
309 0
|
10月前
|
SQL 关系型数据库 测试技术
查询数据技巧摘要
【5月更文挑战第11天】 SQL 提效技巧摘要,利用 SQL 特性减少程序模板,如在数据位置处理,优化性能,学习如 `FOR-EACH` 循环和 `NULL` 处理等。
85 0
|
10月前
|
自然语言处理 Python
【相关问题解答1】bert中文文本摘要代码:import时无法找到包时,几个潜在的原因和解决方法
【相关问题解答1】bert中文文本摘要代码:import时无法找到包时,几个潜在的原因和解决方法
95 0
|
10月前
|
数据采集 机器学习/深度学习 自然语言处理
【相关问题解答2】bert中文文本摘要代码:结果输出为一些重复的标点符号和数字
【相关问题解答2】bert中文文本摘要代码:结果输出为一些重复的标点符号和数字
83 0
|
10月前
|
存储 弹性计算 运维
自动文档生成
【4月更文挑战第30天】
87 0
|
10月前
|
弹性计算 运维 Shell
自动分析网站链接有效性
【4月更文挑战第30天】
63 0
|
10月前
|
编解码
亚丁号自动阅读第一次更新
亚丁号自动阅读第一次更新
57 1
|
10月前
|
人工智能
AI批量写文章伪原创:基于ChatGPT长文本模型,实现批量改写文章、批量回答问题(长期更新)
AI批量写文章伪原创:基于ChatGPT长文本模型,实现批量改写文章、批量回答问题(长期更新)
275 1