コンピュータサイエンス

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

3
非決定性を導入してDFAを縮小するアルゴリズム?
これは、私が尋ねた別の質問と多少関連していますが、私自身の質問を正当化するのに十分異なると感じています。 特定のクラスの有限言語の補集合の構造を見つけようとしているところです。これらの言語を受け入れる最小限のDFAを取得するのは簡単ですが、これらの言語を受け入れるNFAがどのような構造を持っているか、特に非決定性がオートマトンの状態サイズにどのように役立つか(DFAは指数関数的に大きい)を調べたいと思います。 問題は、メインのNFA削減手法で等価を使用することです。これは、最小限のDFAから始めた場合、削減は生成されません(それは基本的に同じ手法を使用しているためです)。最小ではないDFAから始めると、最小のDFAが吐き出されます。 私が不思議に思っているのは、DFAから開始して、非決定性を導入することでそれをより小さなNFAに圧縮できるアルゴリズムはあるのでしょうか。これを行う「標準的なテクニック」はありますか? プレオーダーの削減が見つかりました。これは有望に見えますが、実装が困難です。私は多くの提案を受け入れています。

2
CUDAに最も近い理論的並列モデルはどれですか?
CUDA / OpenCLプログラミングモデルに最も近い理論上の並列モデルはどれですか? たとえば、汎用的なParallel Random Access Machine(PRAM)モデルにある程度適合します。ただし、さまざまなメモリアクセスのレイテンシと同期の問題を抽象化するため、これは一般的すぎます。 私の質問は、CUDAアーキテクチャが最も適合する理論的なモデルはどれですか(スレッドとスレッドのブロックの階層的な並列処理を考慮して)

1
ユニバーサルチューリングマシンシミュレーションの時間計算量と時間階層定理
時間階層定理(HennieとStearns、1966)の証明を理解するには少し問題があります。これは、では受け入れられるが、では受け入れられない関数言語の存在を保証します、そのようなことを、時間構成可能であり、そしてT (n )T (n )、U (n )U (n )U(n )U(n)U(n)T(n )T(n)T(n)T(n )、U(n )T(n),U(n)T(n),U(n)U(n )U(n)U(n) N ≤ T(n )= o (U(n )ログT(n ))。n≤T(n)=o(U(n)log⁡T(n)).n \leq T(n) = o\left(\frac{U(n)}{\log T(n)}\right). この証明は、時間で時間の複雑度を持つ任意のチューリングマシンをシミュレートするユニバーサルチューリングマシンの存在に基づいてい。T (n )ログT (n )T(n )T(n)T(n)T(n )ログT(n )T(n)log⁡T(n)T(n) \log T(n) すべてのテープチューリングマシンが、対数オーバーヘッドのある2テープチューリングマシンでシミュレーションできることの証明を理解しています(信じています)。ただし、この構造は、シミュレーションされたチューリングマシンが固定されている場合にのみ理解でき、Universal TMシミュレーションの場合は理解できません。kkk 引用されている論文(および計算の複雑さに関するいくつかの標準的な書籍)に記載されている、Universalマシンの構築に関連する推論に「問題」が1つあります。この「問題」とは、ユニバーサルマシンシミュレーションでは、シミュレートされたマシンの1つの計算ステップが、ユニバーサルマシンによって一定の時間で実行されることになっているということです。言い換えると、シミュレートされたマシンの記述の長さは一定であると想定されます。 しかし、これで大丈夫ですか?時間階層定理の証明では、シミュレートされたチューリング機械に与えられる入力はまさにこの説明であり、したがって、説明は何らかの形で依存しています。先頭のビットのシーケンスによって説明が長くなる可能性があることは承知していますが、これでこの問題が解決されないようです。nnn つまり、シミュレートされたマシンの計算ステップが、ユニバーサルマシンによって一定の時間で実行されるはずである理由を理解できません。ヘニーとスターンズの論文はこれにあまり注意を払っていません、それはこの時間が暗黙的に定数であると仮定されるものであると単に述べているだけです。同様に、私はそのトピックについて読んだ教科書で。 シミュレーションの時間の複雑さがではなく、はない理由を理解できません。T(n)logT(n)T(n)log⁡T(n)T(n)\log T(n)nT(n)logT(n)nT(n)log⁡T(n)n T(n) \log T(n) 私は私が何かを逃していることをほぼ確信しています。しかし、私はこれを比較的長い間理解しようとしており、どういうわけかこれを理解することができません。

2
それがために解決する方法は困難であるで?
グラフ同型から、ような置換行列Pがある場合、2つのグラフAとBは同型であることがわかります A=P×B×P−1A=P×B×P−1A = P \times B \times P^{-1} したがって、問題を解決するには、2つのグラフが同型である場合、そのような置換行列Pを見つける必要があります。問題はNP(およびサブグラフ同型の場合はNP完全)であると考えられています。しかし、私はPを解決する例を見つけました。これは私にとって有望であるように思われ、 http ://en.wikipedia.org/wiki/Permutation_matrixのセクション:Pの解決にあります。 私が今混乱しているのは、それがより大きな行列で機能するかどうかです。非常に大きい?上記の方程式は解くのが難しく、暗号システムの候補になり得ますか?

4
私たちのPCはチューリングマシンとして機能しますか?
私たちのPCはチューリングマシンとして機能しますか?チューリングマシンのモデルは、無限状態を意味する無限メモリテープで構成されます。しかし、PCに128 MBのメモリと30 GBのディスクがある場合、256 ^ 30128000000の状態があり、したがって有限の状態であると仮定します。 実行中にメモリが不足した場合に、メモリディスクを空のメモリディスクと交換して実行を再開するように要求するタイプのプログラムを作成できることを知っています。 しかし、メモリディスクを交換しない場合はどうなるでしょうか。この場合、PCをFAと見なすのは正しいことでしょうか。

5
言語が認識可能、共認識可能、または決定可能であるかどうかを確認するにはどうすればよいですか?
証明を行わずに言語Lを使用している場合、それが認識可能か、共認識可能か、または決定可能かを判断する方法はありますか? 基本的に、伝えるために使用できるヒントやトリック。それとも、それがどの種類であるかを知るために検索する一般的なパターンですか?

1
言語
言語L = { 0 n 1 m ∣ n と m は素数}L={0n1m∣n and m are co-prime} L = \{0^n 1^m \mid n \text{ and } m \text{ are co-prime}\}文脈自由ですか? 2つの数値が素数であるかどうかをPDAが判断するのは複雑すぎるため、コンテキストフリーではないようです。 ポンピングレンマを使用しても無駄になりました。 どんな助けでも喜んでいただければ幸いです。 編集: ポンピングレンマでの失敗した試みの1つを次に示します。 してみましょうNはNN一定です。p > Nとなるような素数pを取ります。そして、単語z = 0 p 1 p + Nを取ります!∈ L。ましょZ = U 、V 、W 、XとYは分解することがZポンピング補題における条件を満たす。ppp>N!p …

2
有向グラフの強く接続されたコンポーネントアルゴリズムの正確性
私は有向グラフ強連結成分を見つけるためのアルゴリズムについて読んでいます。2つのDFS検索を考慮し、2番目のステップは元のグラフG Tを転置します。G=(V,E)G=(V,E)G=(V,E)GTGTG^T アルゴリズムは次のとおりです。 DFSを実行し(任意の開始頂点から開始)、すべての頂点の終了時間を追跡します。GGG 転置を計算し、 でDFSを実行し、最後の終了時刻の頂点から開始して、その頂点をルートとするツリーを形成します。ツリーが完成したら、次の最新の終了時刻で未訪問の頂点に移動し、DFSを使用して別のツリーを形成し、G Tのすべての頂点が訪問されるまで繰り返します。GTGTG^TGTGTG^T 2番目のDFSによって形成された各ツリーの頂点を、個別に強く接続されたコンポーネントとして出力します。 私の質問は: 転置計算のこの中間ステップの背後にある直感は何ですか?

4
最大のコストで重複しないスケジュールされたジョブを見つける
[開始時刻、終了時刻、コスト]のn個のジョブのセットを指定して、2つのジョブが重複せず、コストが最大になるようにサブセットを見つけます。 今、私は貪欲なアルゴリズムがうまくいくかどうかわかりません。つまり、コストで並べ替え、常に交差せず、2つの間の最大コストで次のジョブを実行します。 これはナップザック問題と同等ですか?どうすればそれにアプローチできますか?

2
カーネルモードからユーザーモード(またはその逆)への変更
Galvinによるオペレーティングシステムの本を読んでいます。Galvinは、カーネルモードとユーザーモードとは何か、両方のモードに与えられる命令特権、およびモードビットについても説明しています。しかし、モードがどのように変化するか知りたいです。基本的に私は次の質問を解決したいと思います: CPUには、特権モードと非特権モードの2つのモードがあります。モードを事前から非事前に変更するため a)ハードウェア割り込みが必要 b)ソフトウェア割り込みが必要です。 c)特権命令が必要です。 d)非特権命令が必要です。 私が理解していることから、 ユーザーモードからカーネルモードへ-ハードウェア割り込みが必要です(ディスクI / Oのように)。ユーザープログラムが許容範囲を超えるメモリにアクセスするのに疲れた場合、トラップが発生します。トラップは基本的にOSによって処理されるソフトウェア割り込みです。これで、ユーザーモードでは特権命令を実行できなくなりました。したがって、I / O要求などの非特権命令は、ユーザーをカーネルモードに変更できます。だから私は、変えるために 非特権(ユーザー)から特権(カーネル)へ-H / W割り込み、S / W割り込み、非特権命令が実行します。 カーネルがユーザーモードになりました。OSはカーネルをユーザーモードに変更できます。そのため、カーネルからユーザーモードに変更する特権命令を実行します。H / wまたはS / w割り込みを生成する必要はありません。だから私は結論を変える previledgedからnon-previledgedへ-特権付きの命令で実行されます 私は正しいですか? また、カーネルモードで実行すると、すべての割り込みが無効になりますよね?したがって、答えは(a)または(b)にはできません。また、OSは基本的にはソフトウェアであるため、ハードウェア割り込みを発生させることはできません。 また、OS自体が割り込みを処理するため、カーネルからユーザーモードに変更するために割り込みを生成(およびサービス)する必要がある理由は私にはわかりません。 私がどこか間違っている場合はお知らせください。これに関するどんな助けでもありがたいです。

1
ラッチとフリップフロップの正確な違いは何ですか?
私が理解したことから: フリップフロップはクロックラッチです。つまり、フリップフロップ=ラッチ+クロック ラッチは継続的に入力をチェックし、入力に変化があるたびに出力を変更します フリップフロップも継続的に入力をチェックしますが、クロックによって決定される出力時間を変更します。[したがって、入力が変更されても、出力が同時に変更されない場合があります] イネーブル付きのラッチ[ゲートラッチ]は、クロックラッチのラッチとは異なります。 Morris Mano&WikipediaのDigital Logicから読んでいます。

2
線形計画法またはその他の最適化手法を使用して、最大限に異なるソリューションのセットを見つける
従来、線形計画法は、一連の制約、変数、および目標(すべて線形関係として記述されています)に対する1つの最適な解を見つけるために使用されます。時々、目的が制約に平行であるとき、無限または多くの等しく良い最適解があります。この後者のケースについては質問していません。 私は、私の一連の制約によって生成された実行可能領域にある多くのソリューションを見つけることにもっと興味があります。しかし、私が見つけた解は、それらが互いに最大限に離れているという意味で、実行可能領域の周りに「散在」していることを望みます。ソルバーを複数回実行せずに、複数のソリューションを生成し、目的関数を使用してソリューションを分離することを強制する既知の方法はありますか? たとえば、決定がaおよびbで制約がw <= a <= xおよびy <= b <= zの線形計画は、2つの解を見つけるために「複製」できます。新しい線形プログラムには、変数a1、a2、b1、およびb2と、制約w <= a1 <= xおよびw <= a2 <= xがあり、b1、b2についても同様です。ただし、目的関数を作成する場合、線形性を破棄せずにL1ノルム以外のノルムを使用できず、L1ノルムを使用することは不可能であるため(本当に私が知る限り) )絶対値をエンコードします。 たぶん、凸最適化や半確定プログラミングなどを検討する必要がありますか? 線形プログラムに対する一連のソリューションを生成し、ソリューション間の「距離」を強制する目的を使用する既知の方法はありますか?

2
サビッチの定理で、なぜ空間構成性がしばしば必要なのですか?
サビッチの有名な定理が述べられているとき、S(n)S(n)S(n)が空間構築可能であるという要件がよく見られます(興味深いことに、Wikipediaでは省略されています)。私の簡単な質問は、次のとおりです。なぜこれが必要なのですか。がにあるという要件を理解しています。これは証明から明らかです。しかし、これまでにが空間構築可能であることを明示的に使用している証拠はありません。S(n)S(n)S(n)Ω(logn)Ω(log⁡n)\Omega(\log n)S(n)S(n)S(n) 私の説明:プロシージャREACH(またはPATHまたはそれを呼び出すもの)を呼び出すには、最後のパラメーターを「スペルアウト」する必要があり、1回の呼び出しでS(n)のスペース境界を残さないようにする必要があります。 、それを書き留めるために以上のスペースを必要としてはなりません。S(n)S(n)S(n)

1
ニューラルネットワークの適応
いくつかのケースでは、かなり複雑なデータセット(バックギャモンの位置とOCR)を使用して、ニューラルネットワーク(バックプロパゲーションネットワーク)をトレーニングしました。これを行う場合、学習に最適な構成を見つけるために、多くの作業にネットワークのさまざまな構成を試すことが含まれるようです。多くの場合、使用/学習がより速い小さなネットと、より多くの知識を表すことができる大きなネットとの間には妥協点があります。 次に、高速で大規模なネットワークをいくつか作成できるかどうか考えます。すべてのニューロンが完全に接続されていないネットワークでは、すべての層で完全に接続されているネットよりも計算が速くなるはずだと私は考えています。特定のニューロンが特定の入力を必要としないため、それらの接続を削除することを検出したのはトレーニングである可能性があります。同様に、一部のニューロンが「過負荷」になっているように思われる場合、トレーニングには新しいニューロンの追加も含まれます。 これは成功して試されたものですか?この種の動作を持つネットワークのクラスは存在しますか?

2
通常の言語の単語の真ん中の規則性
してみましょう正規言語であること。 言語規則的ですか?L 2 = { Y :∃ X 、Z S 。t 。| x | = | z | N 、D 、X 、Y 、Z ∈ L }LLLL2={y:∃x,z s.t.|x|=|z| and xyz∈L}L2={y:∃x,z s.t.|x|=|z| and xyz∈L}L_2 = \{y : \exists x,z\ \ s.t.|x|=|z|\ and\ xyz \in L \} 私はそれがここの質問と非常に似ていることを知っていますが、問題は、それが通常の言語の単語の単純な部分文字列ではなく、「正確な中間」であるということです。接頭辞と接尾辞の長さを数える必要があります。 したがって、それは規則的ではないと思いますが、それを証明する方法を見つけることができませんでした。を受け入れるようにのNFAを変更する方法も考えられません。L 2LLLL2L2L_2

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