コンピュータサイエンス

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

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>1n>1n>1。

1
多重継承オブジェクト指向言語でのメソッド解決のためのC3線形化アルゴリズム:実装の詳細の正当化の探求
この Pythonのメソッド解決順序(mro)、別名C3線形化の説明によれば、アルゴリズムは次のように再帰的に説明できます。 L(O) = <O> L(C) = <C> + merge(L(B1),..., L(Bn), <B1,...,Bn>) どこ O すべてのクラスが継承するクラスです。 Cは、、B1...、から直接Bnこの順序で継承するクラスです。 <および>リスト区切り文字です。 + リスト連結演算子です。 merge 以下で説明する方法で、そのリスト引数を単一のリストにマージします。 上記は単語で言い換えることができます(上記のPythonドキュメントから引用): Cの線形化は、Cと、親の線形化と親のリストのマージの合計です。 merge(本質的にPythonのドキュメントから引用したが、わずかに言い換え)以下のようなアルゴリズムが記載されています。 最初のリストの先頭、つまりL(B1)[0]を検討します。それが良い先頭である場合、つまり他のリストの適切な末尾にない場合は、Cの線形化に追加して削除しますマージのすべてのリストから。そうでない場合は、次のリストの頭などを検討します。クラスがなくなるか、頭がなくなるまで繰り返します。後者の場合、マージを構築することは不可能です。 次の例は、説明のためのものです。仮定Aから直接継承するBとC、このために、との線形化したとするBとCしています L(B) = <B, D, E, O> L(C) = <C, D, F, O> 次に、A線形化は L(A) = <A> + merge(<B,D,E,O>, <C,D,F,O>, <B,C>) = <A, B> + …

1
なぜ計算可能な関数は継続的ですか?
私はラムダ計算の意味論的意味について読みやすい文書を書いているところです。そのために、CPO、単調性、連続性を紹介します。CPOはセットですMMM 半順序で ≤≤\leqおよび下部要素必要、における最小要素であると上限以上の存在(毎鎖用)で。関数 2のCPOの間に、すべてのための場合は、単調である以下が成り立ちます。⊥⊥\bot⊥⊥\botMMM⨆⨆\bigsqcupd0≤d1≤d2≤...d0≤d1≤d2≤...d_0 \leq d_1 \leq d_2 \leq ...MMMfffMMMNNNa,b∈Ma,b∈Ma, b \in M a≤b⟹f(a)≤f(b)a≤b⟹f(a)≤f(b)a \leq b \implies f(a) \leq f(b) 関数 2のCPOの間で、それが単調であり、すべてのチェーンのためならば、連続している、我々が持っていますfffMMMNNNd0≤d1≤d2≤…d0≤d1≤d2≤…d_0 \leq d_1 \leq d_2 \leq \dots f(⨆i∈Ndi)=⨆i∈Nf(di).f(⨆i∈Ndi)=⨆i∈Nf(di).f(\bigsqcup_{i \in \mathbb{N}} d_i) = \bigsqcup_{i \in \mathbb{N}} f(d_i). これらの定義の意味について読者に良い直感を与えたいと思います。ただし、書き留めることができるものはありません。彼の本»言語«(1993)プログラミングの正式な意味でのグリン・ウィンスケルに続き、として読まれなければなら近いを意味し、(ページ72)できるだけ多くの情報として、少なくとも持っています。これにより、出力に関する詳細情報(122ページ)に入力に関する詳細情報を反映する単調関数になります。これは私には幾分理解できます。ただし、継続性の説明は私には明確ではありません。a≤ba≤ba \leq baaabbbbbbaaa 後で説明するように、計算可能な関数は、計算可能な関数の出力における情報の単位の出現は、入力における有限数の情報の単位の存在にのみ依存するべきであるという考えに従って、連続でなければなりません。 (73ページ) これは、セクション8.2(121〜123ページ)のストリームの例、またはこの回答を読んだ後でも、まだわかりません。 だから私の最後の質問は、計算可能な関数が連続的であることを読者にどのように納得させるのですか?なぜありません何で計算機能ではない連続は? 計算能力や固定小数点理論の厳密な導入を必要としない答え/例を提供していただければ幸いです。私はそれらに集中したくないからです。また、ラムダ計算とその意味論的な意味論を事前に知る必要がない場合は、それらの前に単調性と連続性を導入する必要があるので(そうしなければならないので)、すばらしいでしょう。 編集:計算可能というのは、チューリング計算可能という意味です。Winskelsの計算可能ページ337ページの定義を誤解している場合は、訂正してください。これは、チューリング計算可能として明示的に定義されているわけではなく、同等の方法で(少なくとも私の目では)です。 また、私の問題を説明しようとしている別の情報源を指摘したいと思います。しかし、それでもWinskelからのストリームの例と基本的に同じであるため、その例はわかりません。 編集2:それはまた、すべての計算可能な関数が単調であること、つまり非単調な計算可能な関数が存在しないことを示すために私が問題を理解するのを助けるのに良いスタートです。

2
短いシーケンスの編集距離の効率的なアルゴリズム
文字列のペア間の何十億ものレーベンシュタイン距離を計算する必要があるアプリケーションがあります。文字列は短い(長さが70)DNAシーケンスで、4文字のみで構成されています。また、文字列の1つが固定されていると仮定することもできます。つまり、1つの固定文字列を10億の他の文字列と比較しています。 レーベンシュタイン距離の動的プログラミングの実装はであることを知っています。改善の余地があるかどうか知りたいのですが。私はこれらの2つのアルゴリズムを見つけました:O(mn)O(mn)\mathcal{O}(m n) O(n+d2)O(n+d2)\mathcal{O}(n + d^2)アルゴリズムはBerghelらによる編集距離 です。しかし、私はが小さいと仮定することはできないので、何の利点もないかもしれませんdddddd log(n)O(1/ϵ)log(n)O(1/ϵ)log(n)^{\mathcal{O}(1/\epsilon)}Andoni et alによる時間での 近似。しかし、私はこれに関して2つの懸念があります。 n1+ϵn1+ϵn^{1+\epsilon} このアルゴリズムも実際には高速ですか? んの最悪の場合には、計算の編集距離があることを意味倍実際のもの?その場合は多すぎます。log(n)O(1/ϵ)log(n)O(1/ϵ)log(n)^{\mathcal{O}(1/\epsilon)}log(n)O(1/ϵ)log(n)O(1/ϵ)log(n)^{\mathcal{O}(1/\epsilon)} 適用できる他のアルゴリズム/アイデア/アプローチを知っていますか?

2
最小カーディナリティのホール違反者を見つける
二部グラフを考えると完璧なマッチングが存在しないような、私は最小カーディナリティセット、ホールの条件に違反した最小のサブセット、すなわちを見つけたい 用。(X,Y,E)(X,Y,E)(X,Y,E)S⊆XS⊆XS \subseteq X|N(S)|&lt;|S||N(S)|&lt;|S||N(S)|<|S| この問題は、ホールの条件に違反する2部グラフでサブセットを見つけるという前の質問の最適化バージョンであり、このようなを見つけるための多項式時間アルゴリズムが存在することがわかります。最適化問題の多項式アルゴリズムはありますか?S⊆XS⊆XS \subseteq X

1
ベリファイア付きのクラス同等の定義があります。これらのベリファイアは確定的チューリングマシンで、監視テープを左から右へ1方向に1回だけ読み取ることができます。NLNL\mathsf{NL} 関数与えられた場合、は上記の定義によって取得されたクラスであると言いますが、検証者はウィットネス読み取ることができますサイズ入力の回数(つまり、検証者が証人の読み取りを終了すると、検証の開始にまっすぐ進みます)。f:N→Nf:N→Nf:\mathbb{N}\to\mathbb{N}NL[f(n)]NL[f(n)]\mathsf{NL}[f(n)]f(n)f(n)f(n)nnn もちろん、ことがわかります。NL=NL[1]NL=NL[1]\mathsf{NL}=\mathsf{NL}[1] 問題は、かどうかです。NL=NL[2]NL=NL[2]\mathsf{NL}=\mathsf{NL}[2] 明確化:ことを証明または反証する。NL=NL[2]NL=NL[2]\mathsf{NL}=\mathsf{NL}[2] ことは明らかです。2番目の部分では、の証人を1回だけ読み取ることができる検証機能を作成しようとしました。私は、検証者は、フォームの証人期待と言っし、実行ための検証とが終了との第2のコピーで再びそれを読みたい場合、その後、。しかし、私のアプローチの主な問題は、誰かが私をだまして、等しくないサブ証人を置いたことであり、スペースでこれを見つけることができないため、機能しません。NL⊆NL[2]NL⊆NL[2]\mathsf{NL}\subseteq \mathsf{NL}[2]L∈NL[2]L∈NL[2]L\in \mathsf{NL}[2]w♯ww♯ww\sharp wNL[2]NL[2]\mathsf{NL}[2]LLLwwwwwwlog(n)log⁡(n)\log(n)

1
なぜ停止問題は半決定的ですか?
これは停止問題と半決定可能性について知られていることです:- 停止問題は、与えられた入力xとマシンHについて、マシンHが入力xで停止するかどうかを判断できないことを示しています。 単語がその言語に属している場合(YESの場合)に停止し、その単語がその言語に属していない場合(NOの場合)に拒否または無限ループに入るチューリングマシンが存在する場合、言語は半決定可能であると言われます。 現在、停止問題では、入力が言語に属していても(YESの場合)、マシンが停止するかどうかはわかりません。それでは、それはどのように半決定可能ですか?私はそれが非再帰的に列挙可能または決定不可能であるべきだと思います。

1
ジェフリー・エリクソンのノートからの、マスター定理の理解の問題
私は見てよマスター定理にジェフリー・エリクソンの注意事項 (10ページ)。 定理のパート(b)では、場合、および場合、T(n)はです。しかし、私は別の結果を得ます。T(n)=aT(nb)+f(n)T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b})+f(n)af(nb)=kf(n)af(nb)=kf(n)af(\frac{n}{b}) = kf(n)k&gt;1k&gt;1k>1Θ(nlogb(a))Θ(nlogb⁡(a))\Theta(n^{\log_b(a)}) 再帰ツリーを使用すると、T(n)=∑i=0logb(n)aif(nbi)=∑k=0logb(n)kif(n).T(n)=∑i=0logb⁡(n)aif(nbi)=∑k=0logb⁡(n)kif(n).T(n) = \sum_{i=0}^{\log_b(n)} a^i f\left(\frac{n}{b^i}\right) = \sum_{k=0}^{\log_b(n)} k^i f(n)\,. 場合、これは必要に応じてです。場合、これは必要に応じてです。ただし、場合、これは昇順の幾何学的系列であるため、最後の項が優先されます。次に、ありますがこれは誤りです。正解はです。私の推論はどこから抜け出し、正しい解決策は何ですか?k&lt;1k&lt;1k<1∼f(n)∼f(n)\sim f(n)k=1k=1k=1∼logb(n)f(n)∼logb⁡(n)f(n)\sim \log_b(n)f(n)k&gt;1k&gt;1k>1∼klogb(n)f(n)=nlogb(k)f(n),∼klogb⁡(n)f(n)=nlogb⁡(k)f(n),\sim k^{\log_b(n)}f(n) = n^{\log_b(k)}f(n)\,,Θ(nlogb(a))Θ(nlogb⁡(a))\Theta(n^{\log_b(a)}) どんな助けでもありがたいです。 編集:私は私の答えは実際には正しいと思います、そしてエリクソンのより単純な答えと同等です。なお、 したがって、です。knf(n)=kn−1af(nb)...=kan−1f(nbk−1)=anf(nbk).knf(n)=kn−1af(nb)...=kan−1f(nbk−1)=anf(nbk).k^nf(n) = k^{n-1}af(\frac{n}{b}) ... = ka^{n-1}f(\frac{n}{b^k-1}) = a^nf(\frac{n}{b^k}).klogb(n)f(n)=alogb(n)f(1)∼nlogb(a)klogb⁡(n)f(n)=alogb⁡(n)f(1)∼nlogb⁡(a)k^{\log_b(n)}f(n) = a^{\log_b(n)}f(1) \sim n^{\log_b(a)}

1
実社会で発生する全体問題よりも複雑な問題はありますか?
停止問題は算術階層の第1レベルにあることがわかっています。全体性問題は算術階層の第2レベルにあることがわかっています。算術階層の3番目(またはそれ以上)のレベルの問題のいくつかの例は何ですか。+1は、インスタンスが実際の世界で解決される問題(プログラマー、数学者など)の場合。

1
すべて等しいSATバリアントではない計算の複雑さ
すべての等しいSATがNP完全問題ではありません。次に、問題の別のバリアントについて考えてみましょう。 すべての不等号SAT(NAESAT)問題(句ごとに許可されるリテラルの任意の数)に、句の各ペアが少なくとも1つのリテラル(変数ではなくリテラル)を共有するという追加の制約があるとします。 この問題はまだNP困難ですか?そのようですが、削減についてはわかりません。

1
関数型言語のリテラルは、空の型の関数と考えることができますか?
少し前に、私はスタックオーバーフローについて考えました。誰かがHaskellリテラルは何も操作しない関数と考えることができると言うのを見ました。これは私には理にかなっていますが、誰かが彼に激しく反対していることを覚えています。 私が正しく理解していれば、プリミティブ型のすべての値、または少なくともの値Boolは型コンストラクターであり、型コンストラクターは型への特殊な種類の関数です。以下のような値があるので2.87、Trueまたは、'f'それらに渡されたパラメータを持っていない、それは彼らのタイプにあなたがちょうど彼らのタイプの要素または何も含まないタイプの関数と考えるかどうか、言語の意味論に影響を与えないだろうように思えますそれは常にそれらの値を返します。このようにリテラルを考えることに問題はありますか?

1
バインディングを持つ言語で用語のアルファ同等性を決定するためのアルゴリズム
次のような変数バインディングを使用する言語のアルファ同値関係に興味があります。 t := x:y 'x belong to y' | bot 'False' | t -&gt; t 'implication' | Ax.t 'forall x, t' または純粋なラムダ計算: t := x 'variable' | (t t) 'application ' | Lx.t 'abstraction: \x -&gt; t' 言語の2つの用語がアルファ相当であるかどうかを判断できるアルゴリズムを探しています。公開されたリファレンスも大歓迎です。私は、Haskellのように、標準的な再帰型として用語のデータ表現を想定しています。 newtype Var = Var Int data Term = Belong Var Var | …

1
カレーハワードの述語論理への対応?
だから私は頭をカリーハワードに回そうとしている。(私は何度か試してみましたが、ゲル化していない/抽象的すぎるとは思われません)。具体的な問題に取り組むために、私はウィキペディアからリンクされたいくつかのHaskellチュートリアル、特にTim Newshamのチュートリアルに取り組んでいます。Newshamがチュートリアルを投稿したときにも役立つディスカッションがあります。 (しかし、私はNewshamとPiponiのdataラッパーを無視し、基礎となる型について話します。)ヒルベルトの公理スキーム(S、Kコンビネーターとして表されます)があります。タイプとしての命題があります。関数矢印としての意味; および関数アプリケーションとしてのModus Ponens: axK :: p -&gt; q -&gt; p axK = const axS :: (p -&gt; q -&gt; r) -&gt; (p -&gt; q) -&gt; p -&gt; r axS f g x = f x (g x) modPons = ($); infixl 0 `modPons` -- infix Left, cp ($) …

1
モジュラー乗算
私はウィキペディアのモジュラー乗算のページを読んでいました...を計算アルゴリズムを理解できませんでした。a⋅b(modm)a⋅b(modm)a \cdot b \pmod{m} uint64_t mul_mod(uint64_t a, uint64_t b, uint64_t m) { long double x; uint64_t c; int64_t r; if (a &gt;= m) a %= m; if (b &gt;= m) b %= m; x = a; c = x * b / m; r = (int64_t)(a * b - c …

1
TAUTがcoNP完全であることの証明(またはその補数がNP完全である場合、問題はcoNP完全であること)
TAUTがcoNP完全であることを証明する必要があります。を減らすことにより、であることを示しました。ただし、coNPのすべての問題を多項式時間でに削減できることを証明する方法を理解できません。そのためには、次の2つのいずれかが必要です。タウト∈ CONPTAUT∈coNP\text{TAUT} \in \text{coNP}土土\text{SAT}ぴんと¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ぴんと¯\overline{\text{TAUT}}ぴんとぴんと\text{TAUT} 削減のための既知のcoNP完全問題または 問題の補集合がNP完全である場合、問題はcoNP完全であることの証明。 どちらも講義では与えられなかったので、自分で証明しないと何も使えません。当たり前だったはずのことを逃しましたか?どこから始めればいいですか?

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