Algorithm OEIS如何进行子序列搜索?
在线整数序列百科全书支持搜索包含查询的子序列,例如搜索Algorithm OEIS如何进行子序列搜索?,algorithm,search,data-structures,subsequence,oeis,Algorithm,Search,Data Structures,Subsequence,Oeis,在线整数序列百科全书支持搜索包含查询的子序列,例如搜索subseq:212364420428将返回8*n+4序列。() 这个惊人的特性显然是由Russ Cox和由实现的,但没有具体说明实现的算法 我想知道这是怎么做的。显然,对于一个搜索引擎来说,每次搜索都要经历近百万个序列是不切实际的。仅仅保留第一个数字的索引(这是同一个Russ Cox进行Google Code Regex搜索的方式)并强制执行其余数字也不起作用,因为像0这样的数字几乎存在于所有序列中。事实上,像01这样的一些查询匹配的数据库
subseq:212364420428
将返回8*n+4
序列。()
这个惊人的特性显然是由Russ Cox和由实现的,但没有具体说明实现的算法
我想知道这是怎么做的。显然,对于一个搜索引擎来说,每次搜索都要经历近百万个序列是不切实际的。仅仅保留第一个数字的索引(这是同一个Russ Cox进行Google Code Regex搜索的方式)并强制执行其余数字也不起作用,因为像0
这样的数字几乎存在于所有序列中。事实上,像01
这样的一些查询匹配的数据库占总数据库的很大比例,因此算法需要对所需输出大小敏感的运行时间
有人知道这个功能是如何实现的吗?我猜部分数据存储在反向索引中。也就是说,每个数字都链接到一组序列,当输入多个序列时,将显示公共序列集。这是非常快的,几乎每个搜索引擎都使用它 存储为后缀树或任何链接的数据结构对于此应用程序都是无用的
至少对于某些序列集(例如ax+b),我认为最好以参数化方式保存它们,而不是存储实际序列。首先,在线搜索似乎只适用于1000以下的数字。它也适用于较大的数字吗?其次,出于好奇,例如您提供的示例,出于某种原因,OEIS没有列出A000027,这只是自然数,但显然应该匹配 基于数据库的解决方案 如果这完全是在DB中实现的,对于4项搜索,它将是这样的 桌子 序列{seqid、seqname等..} seqitem{value,seqid,location} 质疑 选择si1.ds、si1.location、si2.location。。。。 来自第si1项、第si2项、第si3项、第si4项 其中,si1.seqid=si2.seqid和si2.seqid=si3.seqid和si3.seqid=si4.seqid 和si1.location
子q:x,y,z
。我只是觉得“太空版”是个速记。我更新了我的问题。通过一些快速测试,我认为OEIS可能容易受到DDOS攻击。查询3 2 1 0
耗时2.1秒,返回语句“发现149461个结果,太多无法显示”。随后的相同查询在0秒内给出相同的结果。随后对2 0 1 3
的语义等价查询花费了2.1秒,再次表示“找到149461个结果,太多了,无法显示”。因此,他们似乎明智地缓存了最近查询的结果,事实上,2秒对于暴力搜索来说是足够的时间。我认为没有DDoS,因为没有人反对OEIS!