我们感兴趣的是二进制字符串的数据结构。让S = s s .... s m是大小为m
的二进制字符串。 Shift(S,i)
是字符串S
i
位向左循环移位。也就是说,移位(S,I)= S 我小号 i + 1的小号 I + 2内容S米小号内容S I-1。表明支持一个有效的数据结构:数据结构
- 为O的empy DS的
Init()
(1) Insert(s)
插入在O二进制串到DS(| S |^2)Search_cyclic(s)
检查是否O(| s |)中的任何i
都有Shift(S,i)
。
空间复杂度:O(| S 1 | + | S 2 | + ..... + | S米 |)其中,S 我是一个如果米串我们已经插入了这么多。
如果我必须找到Search_cyclic(S,I)对一些给我,这是与使用后缀树,只是为O穿越它很简单(| S |)。但是在Search_cyclic中,我们没有给定的i,所以我不知道在给定的复杂度下应该怎么做。 OTOH,Insert通常将O(| s |)插入到后缀树中,在这里给出O(| s |^2)。
我认为这是作业。如果不是这样,请再次移除作业标签。 –
| s |是什么意思?包含二进制字符串的字符串的大小或DS的大小? Search_cyclic检查什么? – Shraddha
| s |是我们在Search_cyclic(s)中搜索的字符串的大小。 Search_cyclic(s)应检查DS中是否存在字符串s的移位字符串。我认为这个想法是使用后缀树,我对Insert(s)有一些影响,它可以在O(| s |^2)中,而通常将字符串插入后缀树只需要O(| s |)。所以我应该做一些聪明的事情,增加回旋余地。 –