コンピュータサイエンス

コンピュータサイエンスの学生、研究者、実務家のためのQ&A

1
文字列がコレクション内の部分文字列と一致するかどうかを効率的に確認するにはどうすればよいですか
部分文字列のコレクションがあります "this" "is" "a" "antelope" 与えられた文字列を見て、「この文字列に与えられた部分文字列はありますか」という質問に答える必要があります。 だから私の入力文字列は "issue" 「is」は「issue」のサブストリングであるため、どちらが一致します これを初めて試したところ、部分文字列のコレクションを誤ってトライに変えました。「入力文字列は与えられたコレクションの部分文字列である」と逆に答えたので、それは私をどこにも速くさせませんでした。 この質問に効率的に答えるためにコレクションを変換できるアルゴリズムまたはデータ構造はありますか?つまり、単純なブルートフォースの「すべての部分文字列に対して入力をチェックする」メソッドを実行できましたが、もっと良い方法があるようです。 私の与えられた例では、「a」がカモシカがするすべてのケースをカバーするので、「カモシカ」が決してチェックされないことを期待します。「is」は「this」を削除することを期待しているかもしれません。したがって、長い部分文字列を短い文字列で削除すると、パフォーマンスが向上するようです。 私はとりとめています...私が調べなければならないことはありますか?

2
ランダムなブールSAT式を気にするのはなぜですか?
上記の質問のリファレンスを探しています。 私の知る限り、答えは次のとおりです。 ランダムに生成されたすべてのインスタンスに対して効率的なソルバーを作成できれば、どのインスタンスに対しても効率的なはずです。 つまり、固有の構造に依存しないソルバーを作成すると、常に効率が上がります。 これは正しいです?いずれにせよ、誰かが私が答えを引用できる論文への参照を持っていますか?

1
最も効率的な道を旅する
私の友人が実際に私に非常に興味深いコンピューターサイエンス関連の質問をしてきました。 問題は、旅行する必要があることです。 100010001000キロ。唯一のガソリンスタンドは出発点にあります。燃料タンクの最大容量は kmの走行に十分であり、途中で燃料を「埋め」、後で使用するために保存することができます。505050 たとえば、最初に km 走行し、そこに km相当の燃料を埋め込んでから、給油に戻ると、次に、残った kmの燃料を取り出して、それを使ってさらに到達することができます。202020101010101010 あなたは目的地に到達するための最も効率的な方法を見つける必要があります。 私が考えたのは動的プログラミングの使用ですが、給油を行う前に移動する距離はキロメートル単位の整数であると想定する必要があります。そうでなければ、DPでそれを行うのは難しいので、まだ線形プログラミングを試していません、それは可能だと思います。 それを行う方法について何か考えがありますか?または何かヒントはありますか? 最も重要なのは、どのタイプのcs問題ですか?NPは難しいですか?機械で解けるのか、それとも数学的な問題なのか? さらにいくつかの考え: それは継続的なパスなので、NPかどうかを尋ねるのは少しばかげているかもしれませんが、私はまだ非常に興味があります。 100010001000複雑な計算を回避するために、とが意図的に選択される場合があります。505050 貪欲な解決策はありますか?まだ考えられません。 私の友人はそれがcs問題であると主張しているのですが、今は数学的なパターンを見つける問題のほうが多いと思うので、この投稿を続けることにします。 そして、これに関連する科学記事や教科書があれば教えてください、そもそもどこから始めればよいのかわかりません。

3
最低限の効率を証明できますか?
問題が与えられた場合、この問題を解決するためのアルゴリズムの最良の最悪の場合の効率を証明することは可能ですか? たとえば、配列のソートの問題を考えてみましょう。 より単純なソートアルゴリズムの多くは、最悪の場合の効率が O (ん2)O(ん2)O(n^2)クイックソートやバブルソートなど。ただし、TimsortやSmoothsortなどの他のアルゴリズムには、O (n ログn )O(んログ⁡ん)O(n \log n)より効率的です。 他のアルゴリズム(私の知る限り)は、配列よりも効率的に配列をソートできませんでした Θ (n ログn )Θ(んログ⁡ん)\Theta(n\log n)。より効率的な他のアルゴリズムが存在しないことを証明することは可能ですか? より効率的なアルゴリズムが存在する場合に、ソートアルゴリズムを証明する方法がある場合、これは他の問題にも適用されますか?

2
完全なカバーをサブセット合計に削減
サブセット合計問題(整数のシーケンスおよび整数と、合計が正確にになるサブシーケンスがあるか)がNP完全であることを示します。S=i1,i2,…,inS=i1,i2,…,inS=i_1, i_2, \dots , i_nkkkSSSkkk ヒント:正確なカバー問題を使用してください。 正確なカバーの問題は次のとおりです。セットのファミリーがある場合、ペアワイズの互いに素なセットのサブファミリーで構成されるセットカバーは存在しますか?S1,S2,…,SnS1,S2,…,SnS_1, S_2, \dots , S_n まず、この問題がことを示すために、次のことを行う必要がありますか?NPNP\mathcal{NP} 非決定性チューリングマシンは、まず、探しているサブシーケンスがどれであるかを推測し、合計が線形時間で正確にkになることを確認できます。これは正しいです? それがNP完全であることを示すために、正確なカバー問題をサブセット合計にどのように減らすことができますか?次のようですか? 正確なカバーの問題は、すべての要素が1つのセットに含まれている場合にのみ解決策があります。 各数が要素のセットに対応し、がセット全体に対応するように、セットと数を検討します。あると仮定要素は及び異なるセット。SSSkkkkkknnnkkk 各セットSを、iがSにある場合はi番目の位置がであり、そうでない場合はi番目の位置がである数値に置き換えます。111000 kを、数値コピーである数値に設定します。nnn111

2
単純な言語のゼロへの等価性の計算可能性
葉に一連の番号でラベルが付けられたツリーと、一連の操作Oで内部ノードがあるとします。LLLOOO 特に、LLLはN,ZN,Z\mathbb{N}, \mathbb{Z}またはQQ\mathbb{Q}にすることができ、オプションでππ\piやeを含めることができますeee。 OOOは\ {+、-、\ cdot、/、\ hat \ \}の任意のサブセットにすることができます{+,−,⋅,/, ^}{+,−,⋅,/, ^}\{+,-,\cdot,/,\hat\ \}。 ゼロとの平等は決定可能ですか?符号比較は決定可能ですか?もしそうなら、彼らは実現可能ですか? "無効"操作(0/00/00/0、00000^0、...)を生成するNaNNaNNaN、NaN≠0NaN≠0NaN \neq 0およびNaNNaNNaN通常どおり計算を通って伝播します。 いくつかの組み合わせは簡単です。フィールド操作に限定し、Lにππ\piもeも含めない場合は、結果の分数を計算してそれで処理できます。または、\ mathbb {Z} \ cup \ {\ pi \}および\ {+、-、\ cdot \}に制限すると、多項式を計算して係数を確認できます。一方、べき乗(つまりn乗根)と\ piとeは、物事をかなり難しくします。eeeLLLZ∪{π}Z∪{π}\mathbb{Z} \cup \{\pi\}{+,−,⋅}{+,−,⋅}\{+,-,\cdot\}nnnππ\pieee 「ゼロとの平等」問題は、定数問題のインスタンスです。

1
3つ接続するために追加するエッジの最小数の決定
グラフ GGG であると言われています 333-接続されていない場合 222-vertexカットセット(つまり、グラフを切断するには、少なくとも3つの頂点を削除する必要があります)。私の知る限り、単純なグラフが333-接続されている O (n )O(ん)O(n)時間(例:http : //www2.tu-ilmenau.de/combinatorial-optimization/Schmidt2012b.pdf)が、グラフを作成するために追加するエッジを効率的に決定するのに役立ちます333-まだ接続されていない場合は接続されます(これが効率的に実行できる場合のエッジの最小数が理想的です)。誰かがそのようなアルゴリズムを知っていますか?もしそうなら、私はリファレンスまたは2つをいただければ幸いです。

1
2つの問題が類似している場合、それは何と呼ばれますか?
2つの問題とがあると仮定します。PPPQQQ 「を解くことはを解くことと同じである」とどうやって言えますか?PPPQQQ たとえば、がNPハードである場合、「を多項式時間で解くアルゴリズムが存在する場合、は多項式時間で解くことができる」と言えます。PPPPPPAAAQQQ これにはもっと短い期間があるはずですが、私はそれが類似していないと確信しています。 ある同等の権利言葉は?


2
0 *は決定可能ですか?
言語は決定可能であるという説明(説明なし)を見つけました。そんなことがあるものか?つまり、無限の0の文字列を受け入れる(または拒否する)チューリングマシンをどのように構築するのでしょうか。また、長さを増やしてからすべての単語を作成する列挙子を作成できるかもしれないと思っていましたが、できるかどうかはわかりません。A=0∗A=0∗A = 0^*0∗0∗0^* では、は決定的な言語ですか?もしそうなら、なぜですか?0∗0∗0^*

1
ピボットとして平均を使用すると、クイックソートがスピードアップしますか?
どういうわけか私は昨夜クイックソートについて考え、ウィキペディアでそれについて読んでいました。私にとって興味深い部分は、次のとおりです。「ピボットを中央の50%から一貫して選択できれば、リストを最大で分割するだけで済みます。ピボットの選択は、動作につながる可能性があるクイックソートの1つの考えられる問題のようです。log4/3nlog4/3⁡n\log_{4/3} nO(n2)O(n2)O(n^2) 私の考えは、各ステップでパーティションの平均値をピボットとして使用すると、速度が大幅に向上する可能性があります。特にいくつかのステップの後、外れ値がリストの独自の区分にある場合、平均と中央値は互いに非常に近いはずです(もう一度、大きなリストを見てください)。各ステップで平均を計算するための追加の時間はなければなりません。したがって:nnn クイックソートの推定時間:nAlog4/3nnAlog4/3⁡nnA\log_{4/3} n Quicksort_meanの推定時間:2nAlog5/3n2nAlog5/3⁡n2nA\log_{5/3} n (5/3は、私が控えめに見積もる可能性が高いです。サブセットは外れ値がないため、すぐに2に近づく可能性があります)。したがって、約10,000エントリから開始すると、Quicksort_meanは(平均して)Quicksortよりも高速になります。さらに、スタックの最小要素または最大要素をとらないようにバインドされているため、になるリスクは決してありません。O(n2)O(n2)O(n^2) 私の主な質問は次のとおりです。何か見逃しましたか?私は認めなければなりません、私は自分でクイックソートを実装したことがないので、全体の他の部分(ストレージなど)を見逃す可能性があります

1
ヒントが必要です!KargerのアルゴリズムとKruskalのスパニングツリー分布
G =(V、E)を、n個の頂点とm個のエッジを持つ単位容量グラフとします。 TがGのすべての全域木を表すとしましょう。 Kargerのアルゴリズムを実行すると、収縮したエッジによって形成されたTのランダムスパニングツリーが得られます。このスパニングツリーの分布をD1で表します。 一方、(0,1)のランダムな重みを各エッジに割り当て、クラスカルのアルゴリズムを使用して最小全域木を計算すると、T上の別の分布D2が得られます。 分布D1とD2が同一であることを示します。 どこから始めればいいのかわかりません。ヒントは役に立ちます!

2
パリフの定理:CFLの「含む」通常言語?
パリクの定理に関するウィキペディアの記事の最初の文は次のように述べています。 「理論的なコンピューターサイエンスにおけるパリクの定理は、順序に関係なく、文脈自由言語での終端記号の相対的な出現回数のみを見た場合、その言語は通常の言語と区別がつかないと述べています。」 この文を理解するのに問題があります。単項CFLは、有限数の算術シーケンスの結合として説明できることを理解しています。これは、いくつかのCFLモーフィズムを適用すると、たとえば、とを一部のとすべてのとにマッピングすることを意味しますか、次に、は単項正規言語ですか?誰かがこれについて詳しく説明できますか?hhhLLL⟶ Aa⟶aa \longrightarrow aC ⟶ εc⟶εc \longrightarrow \epsilon∈ Σa∈Σa \in \SigmaC ∈ Σc∈Σc \in \Sigmac ≠ ac≠ac \neq ah (L )h(L)h(L)

2
3次元の最近傍の高速でスペース効率の良いデータ構造?
私は合理的にスペース効率が良い(つまり、最大で使用される)3Dの最近傍クエリに答えるためのデータ構造を探しています O (ん1 + ϵ)O(n1+ϵ)O(n^{1+\epsilon}) スペース)と高速(O (んε)O(nϵ)O(n^{\epsilon}) または O (l ogk(n ))O(logk(n))O(log^k(n)) 最悪の場合のクエリ時間)。 私がすでに知っていることの要約として: 1Dは簡単です(ポイントを並べ替えてバイナリ検索を使用するだけです)。 2Dは少しトリッキーですが、ポイント位置データ構造+ボロノイ図を使用すると、 O (n )O(n)O(n) スペースと O (l o g(n ))O(log(n))O(log(n)) クエリ時間。 3D以上では、一連の点のボロノイ図は O (んfl o o r (d/ 2))O(nfloor(d/2))O(n^{floor(d/2)})。 私はkdツリーまたはグリッドベースの方法に基づくおおよその手法を知っていますが、これらは点の均一な分布または最近傍への距離について何かを仮定することに依存しており、すべてのケースでそれほどうまく機能しません。私はこれらのランダム化または近似解には興味がありません-最悪の場合、どのデータセットでも機能するものが欲しいです。これを行うものはありますか、またはこのアイデアを水から吹き飛ばす下限がありますか?

3
オートマトンをXORする方法?
3つのDFAがあるとします。私たちはそれらをOR、AND、またはNOTする方法を知っています。しかし、それらをどのようにXORするのでしょうか。これについては、オンラインでの言及は1つだけではありません。 バツX O RyX O Rz= ((x | y)(¬ X | Y)| z)(¬ ((x | y)(¬ X | Y))| z)xXORyXORz=((x|y)(¬x|y)|z)(¬((x|y)(¬x|y))|z)x\; \mathrm{XOR} \;y\; \mathrm{XOR} \;z = ((x|y)(\neg x|y)|z) (\neg ((x|y)(\neg x|y))|z)。これは、描画するには複雑すぎて時間がかかります。別の方法はありませんか? お時間をいただきありがとうございます!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.