コンピュータサイエンス

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


1
型の安全性と型の健全性に違いはありますか?
私は型の安全性と型の健全性の定義をばらばらにしようとしてきました、そして私はそれの時間の一体を持っています。私は最近教授に尋ねました、そして少し考えた後、彼は本当に何の違いもなかったと言いました。ただし、これを読んだ後 は次のようになります。 型の安全性は、データへの関数(および演算子)の適用は意味がある(つまり、1 / "Hello"はナンセンスであり、許可されない)とする言語の特性です。 型の健全性は、型チェックシステムのプロパティであり、静的型予測が実行時に正確であることを保証します。 これは明らかに一人のメモであり、PLコミュニティ内に何らかの基準があるのか​​と思います。いくつか検索を行ったが、満足のいく答えが見つからなかった。

2
ラティス上で自己回避ランダムウォークを生成するアルゴリズム
辺の長さが2のべき乗である2次元および3次元の格子上でランダムな自己回避歩行を生成するコードはどこにありますか?ウォークはラティス上のすべてのポイントを通過する必要があります。具体的には、またはグリッドグラフ上でランダムなハミルトニアンパスを見つけるにはどうすればよいですか?2ん× 2ん2ん×2ん2^n \times 2^n2ん× 2ん× 2ん2ん×2ん×2ん2^n \times 2^n \times 2^n 分布は完全に均一である必要はありませんが、一般的に格子はしわに見えるはずです。パスを生成するために使用される方法は、直線の非常に長いストレッチを生成する可能性が低い必要があります。

1
構造計算の観点から穴を埋める一般的なアルゴリズムはありますか?
Calculus of Constructionsを「穴」で拡張するとします。つまり、まだ埋めていない不完全なコード片です。これらの役割を自動的に埋めるアルゴリズムはあるのでしょうか。例(モートの構文を使用): ケースA: λ (pred : ?) -> λ (Nat : *) -> λ (Succ : Nat -> Nat) -> λ (Zero : Nat) -> (Succ (pred Nat Succ Zero)) このような状況では、型推論アルゴリズムは、それが識別することができ?、明らかに唯一できる∀ (Nat : *) -> (Nat -> Nat) -> Nat -> Natので、pred受信Nat : *、Succ : Nat -> Nat、Zero : …

2
チャイティンの定数は正常ですか?
この情報源によると、Chaitinの定数は正常です。ΩΩ\Omega 各停止確率は、計算できない通常の超越的な実数です。つまり、その桁を計算するアルゴリズムはありません。実際、各停止確率はMartin-Löfランダムです。つまり、その数字を確実に推測できるアルゴリズムすらありません。 ソース(Wikipedia) さらに、正常の定義は、各桁が等しい確率発生することです。そして、数字の各デュエットは確率で発生し、すべてのトリプレットは確率で発生します。1 / b 2 1 / b 31/b1/b1/b1/b21/b21/b^21/b31/b31/b^3 チャイティンのオメガは、 Ω=∑p∈halts2−|p|Ω=∑p∈halts2−|p|\Omega = \sum_{p \in halts} 2^{-|p|} をバイナリで書き込むと、0と1のリストが取得されます。たとえば、ΩΩ\Omega 2^-1=0.1 + 2^-2=0.01 + 2^-3=0.001 + ~skip 2^-4 as it does not halt 2^-5=0.00001 + ... =\Omega =0.11101... 明らかに、各ビットの位置は、ビットに対応する長さのプログラムの停止状態に対応していることがわかります。 ここで私は苦労しています 場合確かに正常であり、それはプログラムの正確に50%が停止し、正確に50%がないことを意味します。これは非常に直感に反するようです。ΩΩ\Omega たとえば、単一の文字をランダムに連結してJavaプログラムを生成するとします。それらの大部分は、99.99%以上はコンパイルさえできないと思います。これは、少なくとも99.99%が停止しないことを意味しませんか?が正常であるために、正確に半分が停止し、正確に半分が停止しないことをどのように正当化しますか。ΩΩ\Omega または、ウィキペディアはが正常であることについて間違っていますか?ΩΩ\Omega

1
T(n)= 2T(n / 2)+ log nを再帰ツリー法で解く
私は再発関係を解決していました。最初の再発関係は T(n)=2T(n/2)+nT(n)=2T(n/2)+nT(n)=2T(n/2)+n これの解は、マスター定理または再帰ツリー法で見つけることができます。再帰ツリーは次のようになります。 解決策は次のとおりです。 T(n)=n+n+n+...+nlog2n=k times=Θ(nlogn)T(n)=n+n+n+...+n⏟log2⁡n=k times=Θ(nlog⁡n)T(n)=\underbrace{n+n+n+...+n}_{\log_2{n}=k \text{ times}}=\Theta(n \log{n}) 次に私は次の問題に直面しました: T(n)=2T(n/2)+lognT(n)=2T(n/2)+log⁡nT(n)=2T(n/2)+\log{n} 私の本は、マスター定理またはいくつかの代替アプローチによってさえ、この再帰は解を持つことを示しています。これは上記のツリーと同じ構造ですが、各呼び出しで作業を実行する点のみが異なり。ただし、この問題に対して上記の同じアプローチを使用することはできません。Θ(n)Θ(n)\Theta(n)lognlog⁡n\log{n}

3
最長経路問題に最適な部分構造がない理由は何ですか?
私が最も長いパスについて学習し、問題が最適なサブ構造を欠いていたため、一般的なグラフで最長のパスは動的計画法によって解くことができないという事実に出くわしました(私は文が最長に修正する必要があると思われた簡単な一般的なグラフにパスされていない解けることにより、動的プログラミング)。 それらが単純である必要があると想定する場合(何らかの理由でこれは必要ですが、まだ理解していません)最長であれば、反例を作成するのは簡単です。4つのノードA→B→C→D→Aを持つ正方形グラフを考えてみます。 AからDへの最長パスは、明らかにA→B→CDです。ただし、BからCへの最長パスはB→A→D→Cであり、パスB→C(これは、この場合、実際には最短経路です!)。 これは、パスを単純にする必要があるためにのみ機能するようです。最適な部分構造が存在しないことを証明するために、パスは単純である必要があると想定する必要がありますか? 私は反例が良い証拠/証拠であるはずだと思います(私はそれを否定しません)、私は反例が非常に啓発的であるとまったく思いません。なぜそれが最適な部分構造を許可しないという点を証明するのかはわかりますが、最長経路の最適部分構造がないはずであることが明らかである理由を実際に理解または直感することができません。たとえば、切り取りと貼り付けの引数が機能しないのはなぜですか?サブパスが最も長くない場合は、より長いパスをそのまま使用してください。それはとても魅力的に聞こえます、つまり、私たちがより長いものを配置した場合、もちろんそれは長くなるはずです...しかし、これは何らかの理由で間違っています。この例は実際にDPが決してできないことを実際に証明していますか最長(シンプル?)パスを効率的に解決しますか?私はそれがPにないという一般的な証明を要求しません(それはP対NPソリューションを求めている可能性があるため)。私はちょうどそれその証拠の後だ解くことができないDPによって(またはDPは、この最長経路問題を解決することはできないというか、問題がないことを、少なくとも非常に強力な証拠ではない最適なサブ構造を持っています)。 私はウィキペディアで問題がNP-Hardであることを明確に見てきました。つまり、おそらく高速なアルゴリズムはありません。それが、最適な部分構造に明らかに欠けているべき証拠を提供するために存在する証拠/直感の唯一のタイプであるかどうか(または欠けていない場合、問題をより速くするために使用できないこと)はわかりません。それが高速の動的プログラムで解決できないことを示す唯一の方法ですか? シンプルが必要な理由です私たちがその要件を設けない場合、問題は些細な/興味のないものになるのですか?言い換えると、サイクルがある場合、そのサイクルから到達可能なすべてのノードへの最長パスの問題が(そのサイクルへのパスを見つけることによって)解決されています。到達可能なサイクルがないノードの場合、非循環グラフがあり、これはDPで解決できます(重みが正の場合)。さらに、サイクルがある場合は、自動的に物事が最適な部分構造を持つようになりました(私はそう思います)。最長パスは、2つのケースをカバーする最長パスで構成されているためです。どちらにも最適な部分構造が含まれています。だから、問題は単純なパスを必要とせずに取るに足らないものになったのですか?または、何か不足しているのですか、それとも単純なパスが必要なのかについてのより良い説明がありますか?しない一般的な最長パスは DPで解決できますか? また、DPを使用できないことを保証するために必要な要件は100%わかりません。負のエッジの重み、正の、重み付けされていない、有向、無向である必要がありますか?要件は何ですか?

1
アルゴリズムの時間/空間の複雑さを最適化するためのアルゴリズムはありますか?
1950年代に、ブール関数の回路を最小化するための多くの方法が発明されました。アルゴリズムの時間または空間の複雑さを最適化するために、これらのメソッドの拡張または同様のものはありますか? たとえば、このようなアルゴリズムの入力としてバブルソートを実装すると、時間の複雑さが近いソートアルゴリズムの実装が生成され。O(nlogn)O(んログ⁡ん)O(n\log n)


1
バンドマトリックスの反転
私はバンド行列を持っています-疎で正方で対称な行列で、その構造は次のようになります:N× NN×NN \times N ここで、青い縞の下の領域は非ゼロ要素です。他はすべてゼロです ガウスの消去法とLU分解よりも単純であるが効率的な、この種の行列を反転するアルゴリズムはありますか?

2
ページサイズは常にフレームサイズと同じですか?
ページングについて学習しています。私の本では、CPUによって生成される論理アドレスは|p|d|(ページ番号、ページオフセット)という形式であり、物理アドレスは|f|d|(フレーム番号、フレームオフセット)という形式であるとしています。また、具体的にはd、オフセットが直接コピーされて、論理アドレスから物理アドレスが生成されることも述べられています。 常識では、オフセットが直接コピーされる場合、ページサイズはフレームサイズと等しくなるはずです(そうでない場合、オフセットは対応しません)。しかし、残念ながら私の本はそれについて何も述べていません。 では、ページサイズは常にフレームサイズと同じですか?

2
マルチキュビット量子ゲートを特定のキュビットに適用する
制御された非ゲートマトリックスは次のようになります。 ⎡⎣⎢⎢⎢1000010000010010⎤⎦⎥⎥⎥[1000010000010010]\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ \end{bmatrix} これは、量子ビットが2つしかなく、最初の量子ビットをコントロールとして使用し、2番目の量子ビットを反転する(または反転しない)入力として使用する場合に最適です。 たとえば3つのキュビットがあり、キュビット1をコントロールとして、キュビット3を入力として使用してフリップする可能性がある場合に、この行列を変換して使用する方法はありますか? 論理的に考えると、私はこれを思い付くことができます: ⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢1000000001000000001000000001000000000100000010000000000100000010⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥[1000000001000000001000000001000000000100000010000000000100000010]\begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 …

3
比較ネットワークがソートするかどうかはどうすればわかりますか?
比較ネットワークが表示されます。比較ネットワークが並べ替えネットワークであるかどうかをどのように判断できますか?下の画像には、選択ソートおよび挿入ソートネットワークの例があります。その意図は、比較ネットワークを持ち、数値をソートすることです。この場合2 ^ nの値をテストすると、2 ^ 8になります。これは、それをテストするための多くの|非効率的な方法です。これが有効なソーティングネットワークであることを確認するための数学モデル/証明を探しています。
9 sorting 

2
複雑度
分割操作は、複雑度 AVLツリーに実装できますO(logn)O(log⁡n)O(\log n)か?このトピックに関する記事または特定の情報へのリンクに興味があります。 分割操作は、キーに基づいて、AVLツリーを2つの派生AVLツリーに分割します。派生したツリーの1つは、すべてのキーが元のキーよりも小さいすべての頂点を含み、2番目のツリーは残りの頂点を含みます。 これはO(log2n)O(log2⁡n)O(\log^2 n)時間で実行できることを知っています。複雑さ実装へのリンクはO(log2n)O(log2⁡n)O(\log^2 n)次のとおりです。https: //code.google.com/p/self-balancing-avl-tree/ また、2つのAVLツリーをマージして、O(logn)O(log⁡n)O(\log n)時間で、一方のツリーのキーがすべて他方のキーよりも小さくなるようにする方法も知っています。以下は、複雑度実装O(logn)O(log⁡n)O(\log n)です。 def Merge(l, r) { if (!l || !r) return l ? l : r; if (l->h <= r->h) r->l = Merge(l, r->l), Rebalance(r); else l->r = Merge(l->r, r), Rebalance(l); }

2
逆行列の複雑度クラス
Complexityクラス行列を反転していますか?PP\text{P} ランタイムから、私はyesと言いますが、逆行列には、サイズが入力によって多項的に制限されていないエントリを含めることができますか?O(n3)O(n3)\mathcal{O}(n^3)

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