我們感興趣的是二進制字符串的數據結構。讓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 |)。所以我應該做一些聰明的事情,增加回旋餘地。 –