コンピュータサイエンス

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

2
場合、その後階層は(カープ・リプトン定理によって)その第二のレベルまで崩壊します。しかし、とどうでしょうか?N P c o N PR P = N PRP=NP\sf RP = NPN PNP\sf NPc o N PcoNP\sf coNP 私はが含まれていることを証明しようとしました(場合、他の方向は)が役に立たず、それが本当かどうかさえわかりません。N P R P = N PB P PBPP\sf BPPN PNP\sf NPR P = N PRP=NP\sf RP = NP どう思いますか?

1
ヒルベルトの10番目の問題とChaitinのディオファンタス方程式「コンピューター」?
チャイティンのメタ数学で!オメガの探求、彼はヒルベルトの10番目の問題について簡単に話します。次に、ディオファントス方程式は、正の整数係数を持つ2つの等しい多項式に変更できると言います:p = 0p = 0p=0p=0。p = 0⟺p1= p2p=0⟺p1=p2p=0 \iff p_1 = p_2 次に、これらの方程式は「コンピュータ」のように考えることができると彼は言います。 ディオファントス方程式コンピュータ: プログラム:K、出力:nは、時間:X 、Y 、Z 、。。。L (k 、n 、x 、y、z、。。。)= R (k 、n 、x 、y、z、。。。)L(k,n,x,y,z,...)=R(k,n,x,y,z,...)L(k,n,x,y,z,...)=R(k,n,x,y,z,...) kkk んnn x 、y、z、。。。x,y,z,...x,y,z,... 左側では、右側R。彼はkはnを出力するこのコンピューターのプログラムであると言います。また、未知数は多次元の時間変数であるとも述べています。LLLRRRkkkんnn 私を混乱させるのは、ヒルベルトの10番目の問題はこのように見た場合に明らかに解決できないと彼が言ったということです。彼は基本的に「チューリングの停止問題のため」と述べています。しかし、私は関係がわかりません(私は理論を学び始めたばかりです)。私は、誰かがチャイティンのポイントがここにあることをより明確に説明できることを望んでいました。 チューリングの停止問題は基本的に、プログラムが実際に停止する前に(有限の時間を与えられて)停止する時期を予測できないと述べていることを知っています。チャイティンによってレイアウトされた表記法を使用して、ヒルベルトの10番目の問題への適用は何ですか?

1
エンドツーエンドの原則を形式化できますか?
1990年代後半、私が大学院にいたとき、 JHサルツァー; DPリード; DDクラーク:システム設計におけるエンドツーエンドの議論。ACM Trans。計算。システム。2(4):277-288、1984。DOI= 10.1145 / 357401.357402 すべての大学のすべてのオペレーティングシステムクラスで読む必要があり、インターネットの設計の基礎となる主要な指針の1つであるように思われます。(例:J Kempf、R Austein(eds)、およびIAB、「Rise of the Middle and the Future of End-to-End:Reflections on the Evolution of the Internet Architecture」、RFC 3724、2004年3月。 ) エンドツーエンドの原則は次のように述べています(Saltzer et al。、1984): [if]問題の機能が完全かつ正確に実装できるのは、通信システムのエンドポイントにあるアプリケーションの知識と助けを借りた場合のみです。...問題のある機能を通信システム自体の機能として提供することは、可能。[ただし]通信システムによって提供される機能の不完全なバージョンは、パフォーマンスの向上に役立つ場合があります。 またはもっと簡単に(要約から): エンドツーエンドの議論は、システムの低レベルに配置された機能は、その低レベルで提供するコストと比較した場合、冗長であるか、またはほとんど価値がない可能性があることを示唆しています。 しかし、私は自分の経験(インターネットアーキテクチャではなくコンピュータアーキテクチャ)でエンドツーエンドの原則を適用することにほとんど成功していません。原理は「詩」(つまり、数学的に定義されていない一連の用語を含む英語の散文では)として記述されているので、「問題の機能は、アプリケーションの知識と助け。」しかし、アプリケーションの「知識とヘルプ」はもちろんのこと、「問題の機能」とは何でしょうか。 例:(インターネットとは異なり)オンチップネットワークではパケットをドロップできませんが、バッファリングは非常に制限されているため、デッドロックを回避または回復する方法が必要です。一方で、アプリケーションもデッドロックを解消する必要がありますよね?ですから、私は一般的なケース(デッドロックなし)を高速にして、アプリでデッドロック回避をオフにするべきだと考えるかもしれません。これは、実際、私たちがAlewifeとFuguで試したものです(Mackenzie et al。、Exploiting Two-Case Delivery for Fast Protected Messaging、Int'l Symp High-Perf Comp Arch、(HPCA-4):231-242、 1998.またはJohn Kubiatowiczの論文。)それは「機能しました」(バッファーがいっぱいになったときにインターコネクトにプロセッサーを中断させ、OSにソフトウェアバッファリングを追加させることによって)が、私は学界や業界(その作成者である私たちを含む)で誰も見たことがないHPCAペーパー)アイデアを再現しようと競争している。したがって、ネットワークでのデッドロックの回避は、アプリケーションレベルのデッドロックの回避と同じ「問題の機能」ではないか、エンドツーエンドの原則が間違っています。 …

3
フェルマー素数検定の代わりにミラーラビンが選ばれるのはなぜですか?
Miller-Rabinの証明から、数値がFermat素数性検定に合格した場合、同じ基数(証明の変数)でMiller-Rabin検定にも合格する必要があります。そして、計算の複雑さは同じです。aaa 以下は、Fermat素数テストからのものです。 カーマイケル数は素数よりもかなりまれですが、1フェルマーの素数検定が上記の形式で使用されないことが多いので十分です。代わりに、Baillie-PSW、Miller-Rabin、Solovay-Strassenなど、Fermatテストの他のより強力な拡張機能がより一般的に使用されます。 Miller-Rabinの利点は何ですか?なぜそれがFermat素数テストよりも強力であると言われているのですか?

4
DFAで受け入れられない通常の言語は最大で3つの州しかありません
州が3つしかないDFAで受け入れられない通常の言語について説明してください。 私はこれからどこから始めればいいのか本当にわからず、誰かが私にいくつかのヒントやアドバイスを与えることができるかどうか疑問に思いました。ポンピングレンマは、言語が規則的でないことを証明するために使用できることを理解していますが、この場合、それは通常の言語である必要があります。誰かが何か考えを持っている場合、それはいただければ幸いです。

2
NP問題間のクック削減からKarp削減を構築できますか?
私たちは持っていたクックやカープ削減の関係についていくつかの質問を。Cookの削減(多項式時間のTuring削減)が、通常使用されるKarp削減(多項式の時間多項削減)と同じNP完全性の概念を定義していないことは明らかです。特に、P ≠≠\neq NPであっても、Cook削減はNPをco-NPから分離できません。したがって、典型的な還元証明ではクック還元を使用すべきではありません。 現在、学生は問題がNP困難であることを示すためにCook-reductionを使用する査読済みの作品[1]を見つけました。私は彼らがそこから取った削減についてフルスコアを与えませんでしたが、私は不思議に思います。 クックの削減はカープの削減と同様の硬度の概念を定義しているので、PをNPC応答から分離できるはずだと感じています。共同NPC、P NPを想定。特に、(次のような)次のことが当てはまります。≠≠\neq L1∈NP,L2∈NPCKarp,L2≤CookL1⟹L1∈NPCKarpL1∈NP,L2∈NPCKarp,L2≤CookL1⟹L1∈NPCKarp\qquad\displaystyle L_1 \in \mathrm{NP}, L_2 \in \mathrm{NPC}_{\mathrm{Karp}}, L_2 \leq_{\mathrm{Cook}} L_1 \implies L_1 \in \mathrm{NPC}_{\mathrm{Karp}}。 重要なナゲットは、なので、上記の鈍感さは回避されます。ここで、NPCの定義により、 "認識"します。L 2 ≤ K のR のP L 1L1∈ N PL1∈NPL_1 \in \mathrm{NP}L2≤K A R PL1L2≤KarpL1L_2 \leq_{\mathrm{Karp}} L_1 Vorによって指摘されているように、これはそれほど簡単ではありません(表記法を変更)。 仮定し、その、そして定義することにより、すべての言語の我々持っている、上記の意味が当てはまる場合は、、つまりはまだ未解決の問題です。 L 2 ∈ N P C K RのP ⊆ N …

1
線形計画法の強力な双対定理の短くて滑らかな証明
線形計画を考える Primal:Ax⃗ ≤b⃗ maxc⃗ Tx⃗ Primal:Ax→≤b→maxc→Tx→\begin{array}{|ccc|} \hline Primal: & A\vec{x} \leq \vec{b} \hspace{.5cm} & \max \vec{c}^T\vec{x} \\ \hline \end{array} Dual:c⃗ ≤y⃗ TAminy⃗ Tb⃗ Dual:c→≤y→TAminy→Tb→\begin{array}{|ccc|} \hline Dual: & \vec{c} \leq \vec{y}^TA \hspace{.5cm} & \min \vec{y}^T\vec{b} \\ \hline \end{array} 弱い双対定理は、とが制約を満たす場合、 あると述べています。線形代数を使用した簡潔で洗練された証明があります: 。x⃗ x→\vec{x}y⃗ y→\vec{y}c⃗ Tx⃗ ≤y⃗ Tb⃗ c→Tx→≤y→Tb→\vec{c}^T\vec{x} \leq \vec{y}^T\vec{b}c⃗ Tx⃗ ≤y⃗ …

2
Hindley-Milner型システムのみを使用してリストを定義する
Hindley-Milner型推論システムが機能し、再帰的レッツ(リンクされたコードではない)もサポートする小さなラムダ計算コンパイラーに取り組んでいます。これは、チューリングを完全にするのに十分であることを理解しています。 問題は、リストをサポートする方法がわからない、またはすでにリストをサポートしているかどうかわからないこと、そしてそれらをエンコードする方法を見つける必要があることだけです。型システムに新しいルールを追加する必要なく、それらを定義できるようにしたいと思います。 私はリストの考えることができる最も簡単な方法xのいずれかであるものとしてあるnull(または空のリスト)、またはANの両方が含まペアxとのリストをx。しかし、これを行うには、ペアとorを定義できる必要があります。 このようにペアを定義できるようです: pair = λabf.fab first = λp.p(λab.a) second = λp.p(λab.b) 以来pairタイプを持つことになりa -> (b -> ((a -> (b -> x)) -> x))、通過した後、と言うintとstring、それはタイプで何かを得たい(int -> (string -> x)) -> xのペアの表現であろう、intとstring。ここで私が気になるのは、それがペアを表す場合、なぜそれが論理的に等価ではなく、命題を意味しないのint and stringかということです。ただし、と同等(((int and string) -> x) -> x)です。まるで、関数のパラメーターとして製品タイプしか持てないかのようです。この答えこの問題に対処しているようですが、彼が使用する記号の意味がわかりません。また、これが製品タイプを実際にエンコードしない場合、上記のペアの定義では実行できなかった製品タイプで実行できることはありますか(同じ方法でnタプルも定義できると考えて)?そうでない場合、これは含意のみを使用して(AFAIK)結合を表現できないという事実と矛盾しませんか? また、合計タイプはどうですか?関数タイプのみを使用してなんとかしてエンコードできますか?もしそうなら、これはリストを定義するのに十分でしょうか?それとも、タイプシステムを拡張せずにリストを定義する他の方法はありますか?そうでない場合、できる限りシンプルにしたい場合、どのような変更を加える必要がありますか? 私はコンピュータープログラマーですが、コンピューターサイエンティストでも数学者でもないので、数学の表記を読むのはかなり苦手です。 編集: これまでに実装したものの技術的な名前はわかりませんが、基本的には、上でリンクしたコードのみです。これは、アプリケーション、抽象化、変数のルールを使用する制約生成アルゴリズムですHinley-Milnerアルゴリズムから、次に主要な型を取得する統合アルゴリズムから。例えば、式は\a.aタイプが得られるa -> a、と表現は、\a.(a a)チェックエラーが発生したスローされます。これに加えて、letルールはありませんが、次の疑似コードのような再帰的なグローバル関数を定義できる同じ効果を持つように見える関数があります。 GetTypeOfGlobalFunction(term, globalScope, nameOfFunction) { // …

3
配線長の最小化
私の問題は次のとおりです: 物理的なレイアウトをグラフで表示しています。ノードはワイヤーが固定できるフック/ダクトを表し、エッジはワイヤーが行くことができる2つのノード間の可能な接続です。 スプリッターと呼ばれるいくつかの特別なノードがあり、そこから1本のワイヤーを2つ以上kに分割できます。kは今のところ一定とすることができますが、ノードごとに異なります。すべてのノードがスプリッターであるとは限りません。 ワイヤーが出てくるところから電源の1つがあります。ソースです。ワイヤーはn個のシンクに接続する必要があります。 エッジは、任意の数のワイヤーをいずれかの方向に通過できます。 ワイヤーの全長を最小化する必要があります。 グラフ、平面またはユークリッドの性質は不明です。 例:以下はサンプルネットワークです。ノードには番号が付けられ、エッジには同じ重み1が付けられます。ソースはNode1、シンクはNode5、Node9、Node13です。1の場合、Node6はスプリッターノードです。2の場合、Node6とNode4はスプリッターノードです。スプリッターノードのk = 3、つまり、1つのワイヤーを取り込んで3つのワイヤーに分割できます。 事例1。1つのスプリッターノードのみ。Node6で分割することは理にかなっています。 事例2。2つのスプリッターノード。Node6ではなくNode4で分割することは理にかなっています。 この問題の一般的な解決策を見つけるためのさまざまな戦略を探しています。ここに示すグラフは、手元にある問題に比べてスケールが小さくなっています。グラフは静的で変更できません(つまり、ソリューションが新しいエッジを提案したり、新しいスプリッターの場所を提案したりしてはなりません)。この種の問題について発表された研究論文への言及も歓迎します。 事例3。2つのスプリッターノード。Node4とNode14で分割することは理にかなっています。このケースでは、エッジ8-12、6-10、および10-11のエッジの重みが変更されていることに注意してください。この場合の重要なことは、Node14から分割された後のワイヤーの再トレースです。

1
漸化式の漸近近似(Akra-Bazziは適用されないようです)
アルゴリズムに実行時の反復関係があるとします。 T(n)={g(n)+T(n−1)+T(⌊δn⌋)f(n):n≥n0:n&lt;n0T(n)={g(n)+T(n−1)+T(⌊δn⌋):n≥n0f(n):n&lt;n0 T(n) = \left\{ \begin{array}{lr} g(n)+T(n-1) + T(\lfloor\delta n\rfloor ) & : n \ge n_0\\ f(n) & : n < n_0 \end{array} \right. ある定数。が多項式、おそらく2次式であると仮定します。ほとんどの場合、はで指数関数になります。0&lt;δ&lt;10&lt;δ&lt;10 < \delta < 1gggnnnfffnnn ランタイムを分析するにはどうすればよいでしょうか(はすばらしいでしょう)?マスター定理と、より一般的なAkra-Bazziメソッドは適用されないようです。ΘΘ\Theta

3
整数の範囲を効率的に格納するデータ構造はどれですか。
コレクションを0から65535の範囲の整数で保持する必要があるため、次のことをすばやく実行できます。 新しい整数を挿入する 連続する整数の範囲を挿入する 整数を削除する 整数以下のすべての整数を削除します 整数が存在するかどうかをテストします 私のデータには、コレクションに整数の実行が含まれることが多いという特性があります。たとえば、ある時点でのコレクションは次のようになります。 { 121, 122, 123, 124, 3201, 3202, 5897, 8912, 8913, 8914, 18823, 18824, 40891 } 最も単純なアプローチは、C ++ std :: setのようなバランスのとれたバイナリツリーを使用することですが、それを使用して、私はしばしば数値の実行があるという事実を利用していません。おそらく、範囲のコレクションを格納する方が良いでしょうか?しかし、これは、範囲内の整数が削除された場合、または2つの範囲間のスペースが埋められた場合に結合された場合、範囲を分割できる必要があることを意味します。 この問題に適している既存のデータ構造はありますか?

2
big-O表記で係数を議論する方法
関数の係数をbig-O表記で説明するためにどの表記が使用されていますか? 私には2つの機能があります。 f(x)=7x2+4x+2f(バツ)=7バツ2+4バツ+2f(x) = 7x^2 + 4x +2 g(x)=3x2+5x+4g(x)=3x2+5x+4g(x) = 3x^2 + 5x +4 明らかに、どちらの関数もO(x2)O(x2)O(x^2)、確かにΘ(x2)Θ(x2)\Theta(x^2)ですが、それ以上の比較はできません。係数7と3の説明方法を教えてください。係数を3に減らしても、漸近的な複雑さは変わりませんが、それでもランタイム/メモリの使用量に大きな違いがあります。 fがO (7 x 2)で、gがO (3 x 2)であると言うのは間違っていますか?係数を考慮に入れる他の表記法はありますか?またはこれを議論する最良の方法は何でしょうか?fffO(7x2)O(7x2)O(7x^2)gggO(3x2)O(3x2)O(3x^2)

4
低次の項が実際の入力のランタイムを支配するアルゴリズムの例?
Big-O表記は一定の因子を隠しているため、項の係数が非常に大きいため、妥当な入力サイズでは実行できないアルゴリズムがいくつか存在します。nO(n)O(n)O(n)nnn ランタイムがである既知のアルゴリズムはありますが、低次項が非常に大きく、妥当な入力サイズの場合、ランタイムが完全に支配されますか?このようなアルゴリズムをアルゴリズムコースの例として使用したいと思います。これは、big-O表記がすべてではないという正当な理由を与えるからです。o (f (n ))O(f(n))O(f(n))O(f(n))o(f(n))o(f(n))o(f(n)) ありがとう!

3
n個の項目をテストするとき、すべてのtサブセットを可能な限り少数のsサブセットでカバーするにはどうすればよいですか?
この問題は、ソフトウェアのテストから発生しました。問題を説明するのは少し難しいです。最初に例を示し、次に問題を一般化してみます。 AからJまでの10項目のテストがあり、同時に3項目をテストできるテストツールがあります。テストツール内のアイテムの順序は関係ありません。もちろん、徹底的なテストを行うには、アイテムの組み合わせが必要です。10C310C3^{10}C_{3} 問題はより複雑です。追加の条件として、1組のアイテムを一緒にテストすると、同じペアを再度テストする必要がなくなるという条件があります。 たとえば、次の3つのテストを実行するとします。 ABC ADE BDF 実行する必要はありません: ABD ペアA、Bは最初のテストケースでカバーされ、A、Dは2番目のテストケースでカバーされ、B、Dは3番目のテストケースでカバーされたためです。 それで問題は、すべてのペアがテストされることを保証するために必要なテストケースの最小数は何ですか? 一般化するために、n個のアイテムがある場合、sを同時にテストでき、可能なすべてのtタプル(s&gt; tなど)をテストする必要があります。これは、必要なテストケースの最小数です。 n、s、tの項? そして最後に、必要なテストケースを生成するための良いアルゴリズムは何でしょうか?

1
並行プログラミングおよび/または分散プログラミングの形式主義?
私の背景は、主にC、C ++、およびPythonの命令型言語から来ました。私は数年後、Scala、Erlang、およびHaskellの一部を入手し、関数型プログラミングとその背後にある形式に非常に興味を持つようになりました。 私は並行プログラミングと分散プログラミングにも興味があり、その背後にある形式、特に「日中の光」のほんの少しだけを見たもの(例:実世界での使用、または少なくともどこかでの実装)を調べています。これまでのところ、通信順次プロセス、アクターモデル、通信プロセスの代数、および通信システムの計算について知っています。これらの中で、アクターモデルがErlang、Scala、Haskellなどの言語で実現したことを知っています。 これらの分野に取り組む前に、学んだり実践したりすべき基礎があるのか​​、最初に学ぶべき「古典的」な基礎があるのか​​、他に見逃したかもしれない人気のある基礎があるのだろうか。

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