バイナリ文字列のデータ構造に興味があります。 S = s s .... s mは、サイズm
のバイナリ文字列であるとします。 Shift(S,i)
は、文字列の循環シフトで、左にスペースがあります。S
i
すなわち、シフト(S、i)はsの I S I + 1 S I + 2 ... S メートル S ... I-1 S =、です。サポートし、効率的なデータ構造を示唆している:(1) シフト文字列のデータ構造
Insert(s)
がOでDSのバイナリ文字列を挿入Oでempy DSの
Init()
をSearch_cyclic(s)
か否かを調べる(|^2 | S) O(| s |)にANYi
のShift(S,i)
があります。
スペース複雑さ:O(| S | + | S | + ..... + | S メートル |)S 私は1メートルの文字列を、私たちの場合でありますこれまでこれを挿入した。
いくつかのiについてSearch_cyclic(s、i)を見つけなければならない場合、これはサフィックスツリーを使用してO(| s |)内を単にトラバースするだけで非常に簡単です。しかし、ここではSearch_cyclic(s)には与えられたiがないので、与えられた複雑さで何をすべきかわかりません。 OTOH、Insert(s)は一般にO(| s |)をサフィックスツリーに挿入するために必要であり、ここではO(| s |^2)が与えられます。
私はこれが宿題であると仮定します。そうでない場合は、宿題タグをもう一度削除してください。 –
| s |はどういう意味ですか?バイナリ文字列を含むDSの文字列またはサイズのサイズ? Search_cyclicは何をチェックしますか? – Shraddha
| s | Search_cyclic(s)で検索する文字列のサイズです。 Search_cyclic(s)は、文字列sのシフトされた文字列がDSにあるかどうかをチェックする必要があります。私はサフィックスツリーを使っていると思うのですが、一般的にサフィックスツリーに文字列を挿入するのはO(| s |)だけですが、O(| s |^2)にすることができるInsertだから私はおそらく余分な余裕を持って巧妙な何かをする必要があります。 –