コンピュータサイエンス

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

2
2つのDFAの同等性は決定的な問題ですか?
2つのDFAが与えられた場合、それらが同じ言語を生成するかどうかを見つける問題は決定的な問題ですか? 2つのCFLの平等は決定可能ではないことはすでに知っています しかし、2つのDFAの等価性はどうですか?DFAの問題のほとんどが決定可能であることを考えると、これも決定可能ですか?

2
HoTTの製品を教会/スコットエンコーディングに削減
だから私は現在、何人かの人と一緒にHoTTの本を読んでいます。私が目にするほとんどの帰納的な型は、同等の型のインスピレーションとして再帰子の型を取ることにより、依存する関数型とユニバースのみを含む型に還元できると主張しました。私はこれがどのように機能するかをスケッチし始めました、そしていくつかのつまずきの後に私は私が答えであると思ったものに行きました。 (⋅ 、⋅ )≡ λ A :A 。λ B :B 。λ C :U。λ G :A → B → C 。g (a )(b )i n d⋅×⋅≡∏A,B,C:U(A→B→C)→C⋅×⋅≡∏A,B,C:U(A→B→C)→C\cdot \times \cdot \equiv \prod_{A, B, C : \mathcal{U}} (A \to B \to C) \to C (⋅,⋅)≡λa:A.λb:B.λC:U.λg:A→B→C.g(a)(b)(⋅,⋅)≡λa:A.λb:B.λC:U.λg:A→B→C.g(a)(b) (\cdot, \cdot) \equiv \lambda a : A. \lambda b …

2
線形限定チューリングマシンが有限状態オートマトンよりも強力なのはなぜですか?
私たちのコンピューターは有限であるため、最終的には(非常に大きな)有限状態マシンほど強力ではないという印象を受けました。ただし、線形制限付きチューリングマシンも有限ですが、通常の言語は厳密に文脈依存型言語の不適切なサブセットであるようです。 明らかに、ここに何かが足りません。何が起こっている?

3
5カードのポーカーハンドを表す
カードのデッキは52です。手札は52枚の5枚のカードです(重複はできません)。 5カードのハンドを表すための最小ビット数はどれくらいですか? ハンドは順序に依存しません(KQ = QK)。64329 = 96432 はい、52ビットを使用できます。それは任意の数のカードの手札を表すことができます。 ハンドがちょうど5枚のカードであるとすると、52ビット未満でそれを表す方法があります。 1枚のカードは6ビット= 64で表すことができます。したがって、6ビット* 5カード= 30ビットを使用できます。しかし、それは順序に依存します。私は単にソートすることができ、これはうまくいくはずです。うまくいかない場合はお知らせください。 32ビット以下のキーを取得し、5カードのタプルをソートする必要がない方法はありますか? これはポーカーシミュレーション用であり、ソーティングはハンドを生成するだけの場合に比べてオーバーヘッドが大きくなります。両手の相対値を持つ辞書がある場合、それは2つの単純な検索と2つの手の値を比較する比較です。最初にハンドをソートする必要がある場合、2つのルックアップと比較と比較すると、それは大きいです。シミュレーションでは数百万を比較します。シミュレーションからソートされた手を取得しません。52 51 50 49 48の前の52 51 50 49 48のように並べ替えは単純ではありません。 2598960の可能な5カードの手があります。それが行数です。キーは5枚のカードです。カードを最初にソートする必要がない32ビット以下のキーを取得したいと考えています。 多くの人が結ぶほどリストを注文することはできません。スーツはスペード、クラブ、ダイヤ、ハートです。7c 8c 2d 3d 4s = 7s 8s 2c 3c 4h。多くの絆があります。 次のステップは64ビットで、キーのサイズを2倍にするのではなく、ソートのヒットになります。 私はテストしSortedSet<int> quickSort = new SortedSet<int>() { i, j, k, m, n };て操作の時間を2倍にしましたが、それでも実行できます。 より複雑になります。ボートを5対2で表すことができる必要があります(22255)。そのため、それらを並べ替えると壊れます。あなたが言うつもりですが、それは速いです。はい、それは速くてささいなことですが、私はできるだけ速くする必要があります。 受け入れられた回答のC#: …

5
データサイエンスvsオペレーションズリサーチ
タイトルが示すように、一般的な質問は次のとおりです。 DSとOR /最適化の違いは何ですか。 概念的なレベルでは、DS は利用可能なデータから知識を抽出しようとし、主に統計的な機械学習手法を使用することを理解しています。一方、OR はデータに基づいて意思決定を行うために、たとえば、データ(入力)に対して目的関数(基準)を最適化することにより、データを使用します。 これら2つのパラダイムはどのように比較されるのでしょうか。 他のサブセットですか? 彼らは補完的な分野を考慮していますか? 1つのフィールドが他のフィールドを補完する例や、それらを組み合わせて使用​​する例はありますか? 特に、私は次のことに興味があります。 OR手法を使用してデータサイエンスの質問/問題を解決する例はありますか?

2
O(k)メモリO(n)時間のみを使用して、指定されたシーケンスからk番目に小さい要素を見つける
一連のnnn数値を1つずつ読み取るとします。O (k )セルメモリを使用して線形時間(O (n ))でkkk番目に小さい要素を見つける方法。私たちは最初に保存すべきだと思うk個のシーケンスの条件をして取得するときのk + 1番目の用語を、私たちは必ずそれができないことを期削除のk番目に小さい要素[保存" のk + 1番目の用語を。したがって、各ステップでこの使用できない用語を示すインジケーターが必要であり、このインジケーターは各ステップですばやく更新される必要があります。「マックス」から始めましたO(k)O(k)O(k)O(n)O(n)O(n)kkkk+1k+1k+1kkkk+1k+1k+1; しかし、迅速に更新することはできません。つまり、maxを考慮した場合、最初の削除ではmaxを逃し、線形ではないO(k)O(k)O(k)とその原因(n−k)×O(k)(n−k)×O(k)(n-k)\times O(k)時間でmaxを検索する必要があります。おそらく、シーケンスの最初のkkk項をよりインテリジェントに保存する必要があります。 この問題を解決するにはどうすればよいですか?

3
加算の時間の複雑さ
ウィキペディアは、加算の時間の複雑さをとしてリストしています。ここで、はビット数です。nnnnnn これは厳密な理論上の下限ですか?または、これは、現在最も高速な既知のアルゴリズムの複雑さだけです。加算が複雑であるため、他のすべての算術演算とそれらを使用するすべてのアルゴリズムが強調されているので、知りたいと思います。 o(n)で実行される追加アルゴリズムを取得することは理論的に不可能o(n)o(n)o(n)ですか?または、追加のために線形の複雑さに拘束されます。

2
チューリング機械の停止に相当する数学的推測
この問題は、すべての数学的定理を単一のチューリング機械が停止するかどうかの問題に還元できるかどうかについてです。特に、現在証明されていない推測に興味があります。 例:ウィキペディアによれば、奇妙な完全数があるかどうかは現在不明です。与えられた数値が完全であるかどうかは決定可能であるため、奇数を順番にチェックし、完全な数値が見つかると停止するチューリングマシンを作成できます。(このチューリングマシンは入力を受け取りません。)そのチューリングマシンが停止するかどうかがわかっていれば、予想が正しいかどうかがわかります。逆もまた同様です。 しかし、別の例として、双子の素数の予想はどうですか?与えられた数が双子ペアの最初の素数であるかどうかは決定可能ですが、この場合、問題は無限数があるかどうかに関するものであるため、最初の数が見つかったときに停止することはできません。ツインプライム予想が真である場合にのみ停止するチューリングマシンを作成できるかどうかは、私にはわかりません。 ペア素数算術またはその他の正式なシステム内で双子素数予想が証明可能な場合にのみ停止するチューリングマシンを作成することはできますが、これは別の問題です。 だから私の質問は ツインプライム予想が真である場合にのみ停止するチューリングマシンを作成することは可能ですか?(もしそうなら、どうですか?) 一般に、与えられた数学的な記述が真である場合にのみ停止するチューリングマシンを作ることは可能ですか?このチューリングマシンは、正式なステートメントからアルゴリズムで構築できますか? 一般的に不可能である場合、数学的なステートメントを単一のチューリングマシンの停止、またはオラクルを備えたチューリングマシンなどに相当するものに分類する方法はありますか?もしそうなら、この分類は与えられたステートメントで決定可能ですか?

4
「null」と「Maybe」の両方の概念を持つことは意味がありますか?
C#でWeb APIのクライアントを作成しているときに、null2つの異なるものを表す値として問題が発生しました。 何もありません。たとえばfoo、bar 不明:デフォルトでは、API応答にはプロパティのサブセットのみが含まれます。必要な追加のプロパティを指定する必要があります。したがって、不明とは、プロパティがAPIからリクエストされなかったことを意味します。 Maybe(またはOption)タイプ、関数型言語での使用方法、およびユーザーに値の不在について考えさせることによりnull逆参照の問題を「解決」する方法について調べたところ、次のことがわかりました。しかし、私が遭遇したすべてのリソースはnullをMaybeで置き換えることについて話しました。私は3値的論理についての言及をいくつか見つけましたが、私はそれを完全には理解していません。ほとんどの場合、その言及は「それは悪いこと」の文脈で行われていました。 nullとMaybeの両方の概念を持ち、それぞれ未知数と何も表現しないことが理にかなっているのではないかと思っています。これは私が読んだ3値論理ですか、それとも別の名前ですか?または、多分多分に多分をネストするための意図された方法ですか?

1
関数のメモリ使用量などのプロパティは、依存型付き言語で表現できますか?
全体性や関数の純粋さなどを超えてコードのプロパティについて推論したいとしましょう。メモリの消費や関数のアルゴリズムの複雑さについても気にします。これは、依存するタイピングおよびエフェクトシステムを介して実行できますか?

2
2Dの2つのセット間で最も近いポイントのペア
2次元平面に2セットのポイントあります。私はポイントの最も近いペアを見つけるしたいなど、、との間のユークリッド距離極力小さくなります。これはどのくらい効率的に行うことができますか?時間で実行できますか、?、S 、T 、S ∈ S T ∈ T S 、T O (N ログN )N = | S | + | T |S,TS,TS,Ts,ts,ts,ts∈Ss∈Ss \in St∈Tt∈Tt \in Ts,ts,ts,tO(nlogn)O(nlog⁡n)O(n \log n)n=|S|+|T|n=|S|+|T|n = |S|+|T| 単一のセットが与えられた場合、標準の分割統治アルゴリズムを使用して時間で最も近い点ペアを見つけることが可能であることはわかっています。ただし、または内の最も近い2つのポイント間の距離と、これらのセット全体の最も近い2つのポイント間の距離との間には関係がないため、そのアルゴリズムは2つのセットの場合に一般化していないようです。、S 、S ' ∈ S O (N ログN )SSSs,s′∈Ss,s′∈Ss,s' \in SO(nlogn)O(nlog⁡n)O(n \log n)SSSTTT セットを -dツリーに格納し、次にについて、最近傍クエリを使用して最も近い点を見つけることを考えました。ただし、これの最悪の場合の実行時間は、時間と同じくらい悪い場合があります。点あればという結果がありますランダムに分布している場合、クエリごとに予想される実行している時間は私たちが期待ランニングタイムとアルゴリズム得ると思いますので、我々場合は、ポイントがランダムに分布していることが保証されていました-しかし、ポイントのコレクション(必ずしもランダムに分布しているとは限りません)で機能するアルゴリズムを探しています。TTTkkks∈Ss∈Ss \in STTTsssO(n2)O(n2)O(n^2)TTTO(logn)O(log⁡n)O(\log n)O(nlogn)O(nlog⁡n)O(n \log n) …

1
プログラミング言語セマンティクスプロトタイピングツール
プログラミング言語のセマンティクスと型システムのプロトタイプを作成するためのツールはありますか?また、これにより、型の健全性など、標準プロパティの何らかのモデルチェックが可能になりますか? Alloyについての本を読んでおり、リレーショナルロジックを使用して表現されたモデルに対して、私が望んでいる正確な機能を提供しているので、これを質問します。 私はOttを知っていますが、証明アシスタントシステム用のコードの生成に重点を置いているため、このような「モデルチェック」機能はありません。 そのようなツールの存在についての参照があればよいでしょう。

1
いくつかの条件に従って、セットを所定数の互いに素なサブセットに分割する方法は?
セットA≜{1,…,k}A≜{1,…,k}A\triangleq\{1,\ldots,k\}、整数s⩽ks⩽ks\leqslant k、および負でない整数a_ {ij}が与えられaijaija_{ij}ます。私の問題を見つけることであるsss互いに素なサブセットSjSjS_jの{1,…,k}{1,…,k}\{1,\ldots,k\}ように: ⋃sj=1Sj=A⋃j=1sSj=A\bigcup_{j=1}^s S_j=A ; そして |Sj|⩽aij|Sj|⩽aij|S_j|\leqslant a_{ij}(すべてのi∈Sji∈Sji\in S_jおよびj=1,…,sj=1,…,sj=1,\ldots,s。 この問題を解決するには?実行可能な解決策を見つけるのは難しいですか? いくつかのj \ in \ {1、\ ldots、n \}で始まり、番号までi \ in \ {1、\ ldots、k \}j∈{1,…,n}j∈{1,…,n}j\in\{1,\ldots,n\}を割り当てる手順を試したので、問題を解決するのは簡単ではないと思いますIに割り当てJより大きいA_ {IJ}一部のI割り当てます。しかし、これは不正解です。どのjにも割り当てられないiが残る可能性があるためです(それらのa_ {ij}が満たされなかったため)。i∈{1,…,k}i∈{1,…,k}i\in\{1,\ldots,k\}iiijjjaijaija_{ij}iiiiiijjjaijaija_{ij} ブルートフォースメソッドは、Aのすべてのサブセットを生成してAAAそれぞれをテストする必要がある場合、私にとっては機能しますが(k=8,n=3k=8,n=3k=8,n=3)、非常に非効率的です。

3
タイプを推測することによる自動ダウンキャスト
Javaでは、変数をダウンキャストするために明示的にキャストする必要があります public class Fruit{} // parent class public class Apple extends Fruit{} // child class public static void main(String args[]) { // An implicit upcast Fruit parent = new Apple(); // An explicit downcast to Apple Apple child = (Apple)parent; } javaが型推論を行わないという事実を除いて、この要件には何らかの理由がありますか? 新しい言語で自動ダウンキャストを実装する際の「落とし穴」はありますか? 例えば: Apple child = parent; // no …

3
逐次乗算よりも効率的な並列行列指数アルゴリズムはありますか?
実数の行列の累乗(正の整数)を見つけるために1つ必要です。効率的な行列乗算アルゴリズムはたくさんありますが(たとえば、一部の並列アルゴリズムはCannonのDNSです)、行列の能力を正確に見つけることを目的としたアルゴリズムであり、行列乗算の逐次実行よりも効率的ですか?特に並列アルゴリズムに興味があります。

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