タグ付けされた質問 「subsequences」

1
文字列内の最長の繰り返し(散乱)サブシーケンス
非公式の問題声明: ACCABBABACCABBABACCABBABなどの文字列が与えられたとき、左から右に赤い文字のみを読むと、読むのと同じ結果が得られるように、いくつかの文字を赤、いくつかの文字を青に色付けします。青い文字のみ。 例では、次のように色を付けることができますACCABBABACCABBABA\color{blue}{C}\color{red}{CAB}B\color{blue}{AB} したがって、CABCABCABは繰り返しサブシーケンスであると言いACCABBABACCABBABACCABBABます。また、最長の繰り返しサブシーケンスです(確認しやすい)。 最長の繰り返しサブシーケンスを効率的に計算できますか? 正式な質問: 文字列といくつかのkkkについて、長さ繰り返し部分シーケンスがkkk文字列に存在するかどうかを決定するのはNP困難ですか? その場合:どの問題をこの問題に減らすことができますか? そうでない場合:効率的なアルゴリズムとは何ですか?(明らかに、このアルゴリズムを使用して、最長の繰り返しサブシーケンスを計算できます) ボーナス質問: アルファベットのサイズが定数で制限されている場合、それらは常に長さ繰り返し部分シーケンスになりn/2−o(n)n/2−o(n)n/2 - o(n)ますか? (これはバイナリアルファベットに当てはまることが知られています。) 編集2:ボーナス質問に対する否定的な答えは、少なくとも文字のアルファベットで既に知られています555。実際、サイズがアルファベットの場合、長さが単に最も長い繰り返しサブシーケンスを持つ文字列があります。これを表示するには、ランダムな文字列で十分です。結果はすでに存在していましたが、見落としていました。ΣΣΣO(n⋅Σ−1/2)O(n·Σ−1/2)O(n · Σ^{-1/2}) 編集: 注: 一部の人々は、「サブシーケンス」と言うときに「サブストリング」を意味します。しません。これは、サブストリングを2回見つける問題ではありません。

3
時間でサイズ3のソートされたサブシーケンスを見つけるアルゴリズムはありますか?
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的なコンピューターサイエンススタック交換から移行されました。 7年前に移行され ました。 Iは、証明または反証配列が与えられると、アルゴリズムが存在する整数を三の指数を見つけ、私は、Jおよびkのように、I &lt; J &lt; KとA [ I ] &lt; A [ J ] &lt; A [ kは】(または、そのようなトリプルがないことがわかります)線形時間で。AAA私、ji,ji, jkkki &lt; j &lt; ki&lt;j&lt;ki < j < kA [ i ] &lt; A [ j ] &lt; A [ k ]A[i]&lt;A[j]&lt;A[k]A[i] < A[j] < A[k] これは宿題の質問ではありません。「そのようなアルゴリズムを実装してみてください」とフレーム化されたプログラミングフォーラムでそれを見ました。さまざまな実験の後では不可能だと思います。私の直感はそう教えてくれますが、それは実際には何の役にも立ちません。 正式に証明したいと思います。どうやってやるの?理想的には、段階的にレイアウトされた証明を見たいと思います。そして、もしあなたがとても傾いているなら、このような簡単な質問を一般的に証明/反証する方法についての説明をご覧ください。それが役立つ場合、いくつかの例: [1,5,2,0,3] → …

4
欲張りアルゴリズムを使用して、指定されたシーケンスに最も近い非減少シーケンスを見つける方法は?
n個の整数すべてと間で与えられます。各整数下に、からまでの整数を書き込む必要がありますが非減少シーケンスを形成するという要件があります。そのようなシーケンスの偏差を定義します。実行時O(n \ sqrt [4] {l})で最小偏差を持つb_iを見つけるアルゴリズムを設計します。a1、… 、ana1,…,ana_1, \ldots, a_n000llla私aia_ib私bib_i000lllb私bib_iB I O (nは4 √最大(| a1− b1| 、…、 | an− bn| )max(|a1−b1|,…,|an−bn|)\max(|a_1-b_1|, \ldots, |a_n-b_n|)b私bib_iO (n l√4)O(nl4)O(n\sqrt[4]{l}) 正直に言って、この問題を解決する方法すら全くわかりません。動的プログラミングの質問のように見えますが、教授は貪欲なアルゴリズムを使用してこれを解決する必要があると言いました。誰かが小さなヒントを与えることで私を正しい方向に向けることができれば幸いです。

1
最長の繰り返しサブシーケンスを見つける
文字列与えられた場合、最も長い繰り返し(少なくとも2回)のサブシーケンスを見つけたいと思います。つまり、私は、文字列検索したいwののサブシーケンスである(連続している必要はありません)のように、W = ワット" ⋅ ワットを"。つまり、wは半分が連続して2回現れる文字列です。wはsのサブシーケンスですが、必ずしもサブストリングではないことに注意してください。ssswwwsssw=w′⋅w′w=w′⋅w′w=w' \cdot w' wwwwwwsss 例: 「ababccabdc」の場合は「abcabc」になります。これは、「ababccabdc」に「abc」=「abc」と「abc」が(少なくとも)2回表示されるためです。 「addbacddabcd」の場合、「dd」は2回表示されるため、1つのオプションは「dddd」です(同じ文字を複数回使用することはできませんが、ここでは4つの「d」があるので問題ありません)。ただし、lebngth 4です。長さ8の場合: 'abcdabcd'は、 'abcd'が 'addbacddabcd'のサブストリングであるため、2回出現します。 最長の繰り返しサブシーケンスを見つけることに興味があります。これは「最長/最大の正方形を見つける」とも呼ばれますが、正方形が部分列ではなく部分列に対して定義されている多くの記事を読みました。 文字列のブレークポイントのすべてのオプションを反復することでを取るブルートフォースアルゴリズムを簡単に使用できます。次に、最大/最長の共通サブシーケンスを検索する2つの文字列を作成しますが、各チェックは動的プログラミング手法を使用してO (n 2)を取るため、全体の時間はO (n 3)になります。私はO (n 2をとる最も長い共通部分列のためのより効率的なアルゴリズムを見つけましたO(n3)O(n3)O(n^3)O(n2)O(n2)O(n^2)O(n3)O(n3)O(n^3)なので、実行時間はO(n3O(n2logn)O(n2log⁡n)O(\frac{n^2}{\log n})。O(n3logn)O(n3log⁡n)O(\frac{n^3}{\log n}) 私は最長の繰り返しサブシーケンス問題のためのより効率的なアルゴリズムを探しています。おそらく、すべてのブレークポイントを反復するという私の考えは、時間を浪費しすぎて、反復回数を減らすことができます。あるいは、異なる姿勢のアルゴリズムがこの問題を解決できるかもしれません。 私は多くのジャーナルや以前の質問で検索してきましたが、私が見つけた結果のほとんどは部分列ではなく部分文字列に関するものでした。 これはサフィックスツリーを使用して実行できることも読みましたが、これもサブストリングに関連しており、そのようなアイデアをサブシーケンスに拡張できるかどうかはわかりません。 時間で実行されるソリューションを探しています。時間の1が存在する場合にはO (nは⋅ ログn個)でも良くなる(そのようなものが存在する場合、私はわかりません)。O(n2)O(n2)O(n^2)O(n⋅logn)O(n⋅log⁡n)O(n \cdot \log n)

1
文字列内で最も長く繰り返されるパターンを見つける
文字列で最も長く繰り返されるパターンを見つけるための効率的なアルゴリズムを探しています。 たとえば、次の数字の文字列を考えてみます。 5431428571428571428571428571427623874534。 ご覧のとおり、142857142857はこの文字列で数回(少なくとも2回)繰り返される最も長いパターンです。 繰り返される文字列には、総当たりではなく、どんなアイデアも含めるべきではありませんか?


1
2つの順序付け制約を同時に満たす最大長の部分列を見つける
我々は、セット与えられるの果実を。各フルーツには価格とビタミン含有量ます。果物を順序付けられたペアに関連付けました。次に、ソートされたリストに価格が昇順で、ビタミン含有量が降順で含まれるように、これらの果物を配置する必要があります。F={f1,f2,f3,…,fN}F={f1,f2,f3,…,fN}F=\{f_1, f_2, f_3, …, f_N\}NNNPiPiP_iViViV_ififif_i(Pi,Vi)(Pi,Vi)(P_i, V_i) 例1:および。N=4N=4N = 4F={(2,8),(5,11),(7,9),(10,2)}F={(2,8),(5,11),(7,9),(10,2)}F = \{(2, 8), (5, 11), (7, 9), (10, 2)\} すべての価格が昇順で、ビタミン含有量が降順であるようにリストを配置すると、有効なリストは次のようになります。 [(2,8)][(2,8)][(2, 8)] [(5,11)][(5,11)][(5, 11)] [(7,9)][(7,9)][(7, 9)] [(10,2)][(10,2)][(10, 2)] [(2,8),(10,2)][(2,8),(10,2)][(2, 8), (10, 2)] [(5,11),(7,9)][(5,11),(7,9)][(5, 11), (7, 9)] [(5,11),(10,2)][(5,11),(10,2)][(5, 11), (10, 2)] [(7,9),(10,2)][(7,9),(10,2)][(7, 9), (10, 2)] [(5,11),(7,9),(10,2)][(5,11),(7,9),(10,2)][(5, 11), (7, 9), (10, 2)] 上記のリストから、最大サイズのリストを選択したいと思います。複数のリストに最大サイズがある場合、価格の合計が最小となる最大サイズのリストを選択する必要があります。上記の例で選択する必要があるリストは、です。{(5,11),(7,9),(10,2)}{(5,11),(7,9),(10,2)}\{(5, …

1
1つのストリングのサブシーケンスで他のストリングのサブシーケンスではない
しましょう ΣΣ\Sigma アルファベットにしてみましょう x+,x−1,…,x−n∈Σ∗x+,x1−,…,xn−∈Σ∗x^+,x^-_1,\dots,x^-_n \in \Sigma^*そのアルファベットの文字列である。文字列を呼び出すs∈Σ∗s∈Σ∗s \in \Sigma^* 良ければsss のサブシーケンスです x+x+x^+ のサブシーケンスではない x−1,…,x−nx1−,…,xn−x^-_1,\dots,x^-_n。 与えられた x+,x−1,…,x−nx+,x1−,…,xn−x^+,x^-_1,\dots,x^-_n、私は最短の良い文字列を探しています sss。これに適したアルゴリズムはありますか?ワーストケースの実行時間がそれほど長くない場合でも、実用的なアルゴリズムに興味があります。私のドメインでは、文字列x+,x−1,…,x−nx+,x1−,…,xn−x^+,x^-_1,\dots,x^-_n かなり長いかもしれませんが、良い紐が存在すると思います sss それが役立つ場合、それはかなり短いです。 ケース n=1n=1n=1ある文字列の最下位サブシーケンスによって処理されます。これは別の文字列のサブシーケンスではありませんが、ケースに対処する必要がありますn&gt;1n&gt;1n>1。

2
範囲内の文字列内の異なる部分文字列の数
文字列の長さが、LCP配列を使用すると、個別の部分文字列の数を線形時間で見つけることができます。文字列全体で一意の部分文字列の数を求める代わりに、インデックスを含むクエリ、が、文字列指定されたクエリ範囲内の異なる部分文字列の数を求めます。。SSSnnnSSSqqq(i,j)(i,j)(i,j)0≤i≤j&lt;n0≤i≤j&lt;n0 \le i \le j < nS[i..j]S[i..j]S[i..j] 私のアプローチは、LCP配列の線形時間構築を各クエリに適用することです。複雑さを与えます。クエリの数はオーダーに増加する可能性があるため、すべてのクエリに応答するとます。O(|q|n)O(|q|n)O(|q|n)nnnO(n2)O(n2)O(n^2) すべてのクエリの線形時間よりも、それを行うことができますか? 一般に、サフィックス配列、サフィックスツリー、lcp配列がすでにある文字列の1つのプロセスサブ文字列がそれらの構造に関連しなくなった場合、もう一度最初から構築する必要がありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.