コンピュータサイエンス

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

5
チューリング完了とはどういう意味ですか?
チューリング完全であるということの定義のほとんどは、ある程度トートロジー的であることがわかります。たとえば、「チューリング完全であることとはどういう意味ですか」をGoogleで検索すると、次のようになります。 チューリングマシンができる問題を解決できるなら、コンピューターはチューリング完全です... 異なるシステムがチューリング完全であるかどうかは非常に明確に定義されていますが、チューリング完全であることの意味/結果が何であるかの説明は見ていません。 同じタスクを実行できる非チューリングマシンが存在しない場合、チューリングマシンで何ができますか?たとえば、コンピューターはのような簡単な計算を実行できます(1+5)/3=?が、通常の計算機でも実行できます。 「別のチューリングマシンをシミュレートできる」と言うだけでチューリングマシンの機能を定義する方法はありますか?

4
PではなくNP完全ではなく、NPの問題はありますか?
N P完全ではない(Pではなく)既知の問題はありますか?私の理解では、これが事実である現在既知の問題はないが、可能性として除外されていないということです。 NPNP\mathsf{NP}PP\mathsf{P}NPNP\mathsf{NP} 存在する問題である場合(としないPが)ではなくN P - C O M P リットルのE のT E、これはその問題のインスタンスとの間の既存の同型の結果であろうN P - C O M p個のL E T Eセット?この場合、N Pの問題が現在N P - c o m p l e tNPNP\mathsf{NP}PP\mathsf{P}NP-completeNP-complete\mathsf{NP\text{-}complete}NP-completeNP-complete\mathsf{NP\text{-}complete}NPNP\mathsf{NP}セット?NP-completeNP-complete\mathsf{NP\text{-}complete}

2
「計算科学を本当に教えることの残酷さについて」
ダイクストラは、コンピューティングサイエンスを実際に教えることの残酷さについてのエッセイで、入門的なプログラミングコースについて次の提案を行っています。 一方では、述語計算のように見えるものを教えますが、哲学者とは非常に異なって行います。初心者プログラマーに未解釈の式の操作を訓練するために、論理代数のすべての代数的特性に学生を慣れさせるブール代数としてそれをもっと教えます。直感へのリンクをさらに切断するために、ブールドメインの値{true、false}の名前を{black、white}に変更します。 一方、スキップと複数の割り当てを基本ステートメントとして、ローカル変数のブロック構造、ステートメント構成の演算子としてのセミコロン、素敵な代替構成、素敵な、シンプルでクリーンな命令型プログラミング言語を教えます必要に応じて、プロシージャコールを繰り返します。これに、ブール値、整数、文字、文字列などの最小限のデータ型を追加します。本質的なことは、導入するものが何であれ、対応するセマンティクスはそれに付随する証明ルールによって定義されるということです。 最初から、そしてコース全体を通して、プログラマーのタスクはプログラムを書き留めることだけではなく、彼の主なタスクは、彼が提案するプログラムが同様に正式な機能仕様を満たしていることを正式に証明することであることを強調します。証明とプログラムを手に取りながら設計している間、学生は述語計算で操作の敏a性を完璧にする十分な機会を得ます。最後に、この入門プログラミングコースは主に正式な数学のコースであるというメッセージを伝えるために、問題のプログラミング言語がキャンパスで実装されていないため、学生はプログラムをテストする誘惑から保護されています。 彼はこれは深刻な提案であることを強調し、彼の考えが「全く非現実的」で「非常に難しすぎる」など、考えられるさまざまな異議を概説しています。 しかし、そのkitは仮定のためにも飛ぶことはありません。間違っていることが証明されています。[私の経験では、これは一度だけでは不十分だと言っているので、前の文を少なくとももう2回繰り返す必要があります。] ダイクストラはどのコースを参照していますか?また、それについて説明している他の文献はありますか? エッセイは1988年にダイクストラがテキサス大学オースティンの大学にいたときに登場しました。これはおそらく手がかりです-彼らはダイクストラのアーカイブをホストしていますが、それは巨大であり、私はこのコースについて他の人から特に興味があります。 ここでは、ダイクストラのアイデアが良いか現実的かを議論したくありません。これをcstheory.seまたはcs.seに投稿することを検討しましたが、a)教育者のコミュニティには簡単に答えられる人がいる可能性が高いため、b)ダイクストラ自身が彼のコースは「主に正式な数学。」同意しない場合は、移行のフラグを設定してください。


2
トップダウンとボトムアップの動的プログラミングに違いはありますか?
トップダウンとボトムアップの動的プログラミングには根本的な違いがありますか? 特に、ボトムアップでは解決できるがトップダウンでは解決できない問題がありますか?または、ボトムアップアプローチは、トップダウンアプローチの繰り返しを単に解くだけですか?

2
素朴なシャッフルはどの程度漸近的に悪いのでしょうか?
各アイテムをランダムに選択された別のアイテムと交換して配列をシャッフルするこの「ナイーブ」アルゴリズムが正しく機能しないことはよく知られています。 for (i=0..n-1) swap(A[i], A[random(n)]); 具体的には、nnn回の反復のそれぞれで、n nnn選択肢の1つが(一様な確率で)行われるため、計算にはnnnnn^n可能な「パス」があります。可能な順列のn!n!n!は、パスの数に均等に分割されないnnnnn^nため、このアルゴリズムがそれぞれを生成することは不可能です!n!n!n!等しい確率の順列。(代わりに、いわゆるFischer-Yatesシャッフルを使用する必要があります。これは基本的に[0..nから乱数を選択する呼び出しを変更する]と[i..n)から乱数を選択する呼び出しです。それは私の質問には意味がありません。) 私が疑問に思っているのは、素朴なシャッフルはどの程度「悪い」のでしょうか?より具体的には、せるP(n)P(n)P(n)すべての順列及び組ことC(ρ)C(ρ)C(\rho)得られた順列生成ナイーブアルゴリズムを通じてパスの数であるρ∈P(n)ρ∈P(n)\rho\in P(n)、関数の漸近挙動が何を M(n)=n!nnmaxρ∈P(n)C(ρ)M(n)=n!nnmaxρ∈P(n)C(ρ)\qquad \displaystyle M(n) = \frac{n!}{n^n}\max_{\rho\in P(n)} C(\rho) そして m(n)=n!nnminρ∈P(n)C(ρ)m(n)=n!nnminρ∈P(n)C(ρ)\qquad \displaystyle m(n) = \frac{n!}{n^n}\min_{\rho\in P(n)} C(\rho)? 主な要因は、これらの値を「正規化」することです。ナイーブシャッフルが「漸近的に良好」であれば、 limn→∞M(n)=limn→∞m(n)=1limn→∞M(n)=limn→∞m(n)=1\qquad \displaystyle \lim_{n\to\infty}M(n) = \lim_{n\to\infty}m(n) = 1。 私は(私が見たいくつかのコンピューターシミュレーションに基づいて)実際の値は1から離れていると疑っていますが、が有限であるか、が0?これらの量の振る舞いについて何がわかっていますか?lim m (n )limM(n)limM(n)\lim M(n)limm(n)limm(n)\lim m(n)

1
最小移動でビンを埋めることはNP困難ですか?
ありビンとボールの種類が。番目のビンラベル有するのためのは、型のボールの予想数である。N nnmはmmiがiiI 、J 1 ≤ J ≤ M Jai,ja_{i,j}1≤j≤m1\leq j\leq mjj タイプボールから始めます。タイプ各ボールの重量はであり、ビン重量がようにボールをビンに入れます。前の条件が保持されるようなボールの分布は、実行可能なソリューションと呼ばれます。b jbjb_j j jjj jjw jwjw_j i iic icic_i ビンタイプボールを使用した実行可能なソリューションを考えてみると、コストは。最小コストの実行可能なソリューションを見つけたい。x i 、jxi,jx_{i,j} j jji ii∑ n i = 1 ∑ m j = 1 | a i 、j − x i 、j |∑ni=1∑mj=1|ai,j−xi,j|\sum_{i=1}^n \sum_{j=1}^m |a_{i,j}-x_{i,j}| { w j }{wj}\{w_j\}制限がない場合、この問題は明らかにNP困難です。サブセット和問題は、実行可能な解の存在に帰着します。 …

2
通常のセットを学習するためのDana Angluinのアルゴリズムに改善はありますか
1987年の独創的な論文で、Dana Angluinは、メンバーシップクエリと理論クエリ(提案されたDFAの反例)からDFAを学習するための多項式時間アルゴリズムを提示しています。 彼女は、nnn状態を持つ最小DFAを学習しようとしており、最大のカウント例の長さがmmmである場合、O(mn2)O(mn2)O(mn^2)メンバーシップクエリと最大理論クエリを作成する必要があることを示しています。n−1n−1n - 1 通常のセットを学習するために必要なクエリの数が大幅に改善されましたか? 参考資料と関連質問 Dana Angluin(1987)「クエリおよび反例からの正規集合の学習」、Infortmation and Computation 75:87-106 メンバーシップクエリおよび反例モデルで学習するための下限

4
セットとタイプのセマンティックの違いは何ですか?
編集:カテゴリとセットの違いについて同様の質問をしました。 型理論(確かに非公式ですが)について読むたびに、具体的には集合論とどう違うのかを本当に理解できません。 「xはセットXに属している」と「xはタイプXである」という概念的な違いがあることを理解しています。それにもかかわらず、セットもしばしばプロパティに従って定義されます。もしそうであれば、この区別がどのように重要であるかを理解するのに苦労しています。 だから、ほとんどの中で具体的な可能性のある方法、まさにそれがない暗示 についてxxx T S、それは型であることを言ってそれは集合の要素であると言っに比べて、?TTTSSS (比較を最も明確にする任意のタイプとセットを選択できます)。
33 type-theory  sets 

4
OとΩは最悪の場合と最良の場合にどのように関係しますか?
今日の講義では、バイナリサーチを使ってソートされた配列の要素を見つけるための非常に簡単なアルゴリズムについて議論しました。要素の配列の漸近的な複雑さを判断するように求められました。nnn 私の考えは、は最悪の場合の操作の数であるため、より具体的にはまたはことは明らかです。しかし、たとえば、最初に検索された要素にヒットした場合など、より良い結果を得ることができます-下限はです。O(logn)O(log⁡n)O(\log n)O(log2n)O(log2⁡n)O(\log_2 n)log2nlog2⁡n\log_2 nΩ(1)Ω(1)\Omega(1) 通常、アルゴリズムの最悪の場合の入力のみを考慮するため、講師はソリューションをとして提示しました。Θ(logn)Θ(log⁡n)\Theta(\log n) しかし、最悪の場合のみを考えるとき、与えられた問題のすべての最悪の場合が同じ複雑さを持っているとき、と表記を持つことのポイントは何ですか(は私たちが必要なすべてでしょう?)。OOOΩΩ\OmegaΘΘ\Theta ここで何が欠けていますか?

4
動的プログラミングとは何ですか?
この質問が愚かに聞こえる場合は、事前に申し訳ありません... 私の知る限り、動的プログラミングを使用したアルゴリズムの構築は次のように機能します。 問題を再帰関係として表現します。 メモ化またはボトムアップアプローチのいずれかを使用して、再帰関係を実装します。 私の知る限り、動的プログラミングに関するすべてを述べてきました。つまり、動的プログラミングでは、再帰関係を表現したり、コードに変換したりするためのツール/ルール/メソッド/定理は提供されません。 それでは、動的プログラミングの特別な点は何ですか?ある種の問題に取り組むための漠然とした方法以外に、それはあなたに何を与えますか?

2
平面正規言語
私のクラスでは、生徒は、すべての有限オートマトンをエッジを交差させずに描画できるかどうかを尋ねました(私の例はすべてそうでした)。もちろん、答えは否定的であり、言語{x∈{a,b}∗∣#a(x)+2#b(x)≡0mod5}{x∈{a,b}∗∣#a(x)+2#b(x)≡0mod5}\{\; x\in\{a,b\}^* \mid \#_a(x)+2\#_b(x) \equiv 0 \mod 5 \;\}明らかなオートマトンです。x \ in \ {a、b \} ^ * \ mid \ #_ a(x)+2 \ #_ b(x)\ equiv 0 \ mod 5 \; \}は、5つのノード上の完全なグラフK5K5K_5の構造を持ちます。Yuvalは、関連言語についても同様の構造を示しています。 私の質問は次のとおりです。この言語のすべての有限状態オートマトンが非平面であることをどのように示しますか?Myhill-Nerodeのような特性化では、おそらく言語の構造がダイアグラムに存在することを確立できますが、これをどのように正確にするのでしょうか? そして、もしそれができれば、「平面の通常言語」の特徴はありますか?

3
ハードウェア/実装は、アルゴリズムの時間/空間の複雑さに影響しますか?
私はCSの学生でもないので、これはばかげた質問かもしれませんが、どうか私に耐えてください... プレコンピューター時代では、引き出しの配列のようなものでのみ配列データ構造を実装できます。値を抽出する前に、対応するインデックスでドロワーを見つける必要があるため、配列検索の時間の複雑さはバイナリ検索を想定。O(log(n))O(log(n))O(log(n)) しかし、コンピューターの発明は大きな違いをもたらしました。最近のコンピューターはRAMから非常に高速に読み取ることができるため、配列ルックアップの時間の複雑さはと考えています(技術的にはそうではありません。O(1)O(1)O(1) 別の例は、Python辞書です。誤って記述されたオーバーロードマジックメソッド(または、途方もなく不運、つまり、多くのハッシュ衝突を伴うキーで辞書アクセスの複雑さを得るかもしれませんが、通常はと推定されます。この場合、時間の複雑さは、Python辞書のハッシュテーブル実装と、ハッシュ関数のキーの実装の両方に依存します。O(n)O(n)O(n)__hash__O(1)O(1)O(1) これは、ハードウェア/実装がアルゴリズムの時間の複雑さに影響する可能性があることを意味しますか?(両方の例はアルゴリズムではなくデータ構造に関するものですが、後者は前者に基づいて構築されており、データ構造の時間の複雑さを聞いたことがないため、ここでは「アルゴリズム」という用語を使用しています) 私にとって、アルゴリズムは抽象的かつ概念的であり、時間/空間の複雑さなどの特性は、特定の方法で実装されているかどうかによって影響されるべきではありませんが、そうですか?

5
通常の言語はチューリング完全にできますか?
私はイオタとジョットについて読んでいたが、このセクションは混乱を招くことがわかった。 Iotaは、文字列の構文ツリーが左または右に分岐できるのとは異なり、Jot構文は一様に左分岐です。その結果、Iotaは厳密にコンテキストに依存しませんが、Jotは通常の言語です。 私の理解では、イオタとジョットはチューリング完全です。しかし、明らかに、1つはコンテキストに依存せず、もう1つは規則的です!確かに通常の言語はチューリングを完全にすることはできませんか?


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