コンピュータサイエンス

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

3
文字列の切断に関する動的プログラミング演習
私はこの本から次の問題に取り組んできました。 特定の文字列処理言語は、文字列を2つの部分に分割する基本的な操作を提供します。この操作には元の文字列のコピーが含まれるため、カットの位置に関係なく、長さnの文字列に対してn単位の時間がかかります。今、文字列を多くの部分に分割したいとします。休憩が行われる順序は、合計実行時間に影響を与える可能性があります。あなたがた位置に20文字の文字列をカットしたい場合たとえば、と、その後の位置に最初のカットを作り、負うの総コスト位置10をしている間、最初のより良いコスト持ち。3333 20 + 17 = 37 20 + 10 = 3010101033320 + 17 = 3720+17=3720 + 17 = 3720 + 10 = 3020+10=3020 + 10 = 30 カットが与えられ、ストリングを個にカットする最小コストを見つける動的プログラミングアルゴリズムが必要です。m + 1mmmm + 1m+1m +1

7
4つのNANDゲートのみを使用してXORゲートを構築する方法は?
xorゲート、今、私は4つのnandゲートのみを使用してこのゲートを構築する必要があります a b out 0 0 0 0 1 1 1 0 1 1 1 0 xor = (a and not b) or (not a and b)である、 A¯¯¯¯B+AB¯¯¯¯A¯B+AB¯\begin{split}\overline{A}{B}+{A}\overline{B}\end{split} 私は答えを知っていますが、式からゲート図を取得する方法は? 編集 私が直感的に意味するのは、ステップバイステップで定義を実行した場合、これを取得する必要があることですxor = (a and not b) or (not a and b)。 A¯¯¯¯B¯¯¯¯¯¯¯¯⋅AB¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯A¯B¯⋅AB¯¯¯\begin{split}\overline{\overline{\overline{A}{B}}\cdot\overline{{A}\overline{B}}}\end{split} 及びxor5つので構成するnandゲート(以下第1位の画像) 私の質問はもっと似ています:歴史の最初の人がこの式を理解していることを想像してくださいnand。 A¯¯¯¯B+AB¯¯¯¯A¯B+AB¯\begin{split}\overline{A}{B}+{A}\overline{B}\end{split}

5
なぜ8進数と16進数ですか?コンピューターは2進数と人間の10進数を使用します
なぜバイナリ(コンピュータ用)でも小数(人間用)でもない他のベースを使用するのはなぜですか? コンピュータは最終的にそれらをバイナリで表現することになり、人間は彼らの10進表現を取得することを強く好みます。なぜこれら2つの基盤に固執しないのですか?

1
メモリの一貫性とキャッシュの一貫性
Sequential ConsistencyがCache Coherenceよりも強力なプロパティであることは本当ですか? による ソリン、ダニエルJ; ヒル、マークD; Wood、David A:メモリの一貫性とキャッシュの一貫性に関する入門書、Morgan&Claypool、2011 順次一貫性は、(正式ではなく)と説明できます。 シーケンシャル整合性メモリモデルは、システムがすべてのスレッドのロードとストアをすべてのメモリ位置に実行し、各スレッドのプログラム順序を考慮した合計順序で実行する必要があることを指定します。各ロードは、その合計順序で最新のストアの値を取得します。 言い換えると、各スレッドのメモリイベント(ロードおよびストア)が与えられた場合、次のようにすべてのイベントを順序付けることができます。1)各スレッドについて、イベントの順序が保持され、2)グローバルな順序がシリアル(保存された最新の値を返すロード)。 今、彼らは一貫性を説明し続けています。 定義コヒーレンスシーケンシャル一貫性の定義に類似してコヒーレントシステムは、各スレッドのプログラム順序を尊重総ために単一のメモリ位置へのすべてのスレッドのロードとストアを実行するために現れなければならないということです。 つまり、システムは一貫性があり、各場所の各スレッドのメモリイベントが与えられた場合、1)各スレッドのその場所へのイベントの順序が保持され、2)それぞれの注文がシリアルである場所。 最後に、彼らは違いを指摘します: この定義は、一貫性と一貫性の重要な違いを強調しています。一貫性はすべてのメモリ場所に関して指定されるのに対し、一貫性はメモリ場所ごとに指定されます。 したがって、一貫性のあるシステムでは、各場所のすべてのイベントの合計順序(特定の場所のイベント間の順序)が必要ですが、一貫性のあるシステムでは、すべてのイベントの合計順序を定義する必要があります(したがって、順序は異なる場所のイベント間でもありますか?) それは、一貫性が一貫性ほど厳密ではないということですか?(面白いようです!)一貫性のある一貫性のないトレースはありますか?

6
重みのないグラフで最短パスを見つけるためにDFSを使用できないのはなぜですか?
「現状のまま」のDFSを使用しても、重み付けされていないグラフでは最短経路が見つからないことを理解しています。 しかし、DFSを微調整して、重みのないグラフで最短パスを見つけることができるのはなぜですか?件名に関するすべてのテキストは、単にそれを実行できないと述べています。私は(自分で試したことがなく)納得していません。 DFSが重み付けされていないグラフで最短パスを見つけることを可能にする変更を知っていますか?そうでない場合、アルゴリズムをそれほど難しくしているのは何ですか?

5
チューリングマシン+時間膨張=停止の問題を解決しますか?
相対論的時空(例えば、MH時空。Hogarth1994を参照)があり、有限の観測者の過去に無限の持続時間の世界線を含めることができます。これは、通常の観測者が無限の数の計算ステップにアクセスできることを意味します。 コンピューターが無限の期間完全に機能する可能性があると仮定すると(そして、それは大きな質問だと思います)、この無限の世界線に沿って移動し、特定のMの停止問題を計算するコンピューターHMを構築できます。 、HMは有限観測者に信号を送信します。無限のステップ数の後、オブザーバーが信号を受け取らない場合、オブザーバーはMがループしていることを認識し、停止問題を解決します。 これまでのところ、これは私には問題ないように思えます。私の質問は、これまでに言ったことが正しい場合、停止問題が決定不能であるというチューリングの証明をどのように変更するのでしょうか?これらの時空で彼の証明が失敗するのはなぜですか?

2
点のプロットが空間へのパーティションを定義するこのデータ構造/概念とは
実世界の問題を解決するためのアルゴリズムに遭遇し、宿題の問題のために非常によく似たものを作成したクラスを覚えています。 基本的にはポイントのプロットであり、線は2つのポイント間で等距離になるように描画されます。これは、ポイントの周囲の線がそのポイントに最も近いエリアの形状を形成する完全なパーティションを形成します。これは誰かに鐘を鳴らしますか?説明をグーグルで調べて結果を得るのは大変でした。そして、それを他にどのように説明するかわかりません。うまくいけば、画像が役立ちます。

1
はいインスタンスの多項式数を持つNP完全問題?
私は無限に多くの入力はサイズごとNP完全問題のために、という印象持っている、サイズのすべての可能な入力オーバーイエス・インスタンスの数がであり、(少なくとも)が指数関数的に。nnnnnnnnn これは本当ですか?それは証明できますか(おそらくという仮定の下でのみ)?または、おそらく人工的に、すべての(十分な大きさの)について、yesインスタンスの数が最大で多項式である問題を見つけることができますか?P≠ NPP≠NPP\neq NPnnnnnn 私の推論は基本的に、3-SATのyes-instanceが与えられた場合、各句のリテラルを識別し、それをtrueにし、満足できることを変更せずに、句の別の変数をさらに別の変数に置き換えることができるということです。各句でこれを行うことができるため、yesインスタンスの指数関数的な数につながります。ハミルトニアンパスなど、他の多くの問題についても同じことが言えます。パス上にないエッジを自由に変更できます。次に、何らかの方法で解決策を保持する必要がある場合に還元性が関与するため、すべてのNP完全問題に対して保持しなければならないという、ひどく推論します。 また、グラフ同型の多分NP中間問題(マッピングを知っていれば、両方のグラフに同じ変更を自由に適用できる)にも当てはまるようです。整数分解にも当てはまるのだろうか。

8
アルゴリズムセットのカーディナリティ
議論の誰かが、特定の問題に取り組むための少なくとも連続した数の戦略が存在する可能性があると考えています。特定の問題は取引戦略(アルゴリズムではなく戦略)でしたが、それは私の質問の要点の横にあると思います。 これにより、一連のアルゴリズムの基数について考えるようになりました。私は少し探していましたが、何も思いつきませんでした。チューリングマシンは有限のアルファベットセットで動作し、テープはインデックス付け可能でなければならず、したがってカウント可能でなければならないため、数え切れないほどの数のアルゴリズムを持つことは不可能だと考えてきました。私の集合論は確かに錆びているので、私の推論が有効であるかどうかは確かではなく、おそらくそれを証明することはできないでしょうが、それは興味深い考えです。 アルゴリズムのセットの基数は何ですか?

2
多くの業界で使用されているコンパイラで、継続渡しスタイルよりも静的単一割り当てが優先されるのはなぜですか?
静的単一割り当て(SSA)に関するウィキペディアのページによると、SSAはLLVM、GCC、MSV、Mono、Dalvik、SpiderMonkey、V8などの大規模で有名なプロジェクトで使用されていますが、継続渡しスタイルを使用するプロジェクトのページ(CPS)は比較して少し欠けています。 私は、CPSが主に機能言語を実装するコンパイラーとインタープリターによって好まれるというこの考えを持っています-特に、HaskellとSchemeは、突然変異の制限またはファーストクラスの継続サポートの必要性のために、CPSスタイルに強い傾向があるようです(私は推測します) Smalltalkでもこれが必要になる可能性があります)。私がCPSを使用している主要な文献は、主にSchemeに取り組んでいるか、何らかの点でSchemeに関連している文献のようです。 採用の勢いのほかに、SSAが業界で使用される特別な理由はありますか?SSAとCPSは密接な関係があります。つまり、別の観点から述べることは簡単ですが、情報表現はCPSにとってはコンパクトであるか、効率が低い可能性があります。

1
四角形で覆うグリッド
我々は持っているN1×N2N1×N2N_1 \times N_2のグリッドを。このグリッドには四角形のコレクションがあり、各四角形はN1N1N_1行N2N2N_2バイナリ行列として表すことができますRRR。これらの長方形でグリッドをカバーしたいです。 このセットの決定版はNP完全問題をカバーしていますか? 入力:コレクションC={R1,R2,…,RL}C={R1,R2,…,RL}\mathcal{C}=\{R_1,R_2,\dots,R_L\}長方形のグリッド上に(入力サイズ:N1N2LN1N2LN_1N_2L)、及びK∈N+K∈N+K \in \mathbb{N}^+ 出力:サブセットS⊂CS⊂C\mathcal{S}\subset\mathcal{C}と|S|≤K|S|≤K|\mathcal{S}|\leq K及びSS\mathcal{S}それをカバーする各セルの少なくとも一つの矩形の含有します。 1Dの場合(N2=1N2=1N_2=1)は、動的計画法によって多項式時間で解くことができることがわかりました。最適なカバーは、 最初のN1−n1N1−n1N_1-n_1セルをカバーするいくつかのサブ問題の最適なカバー。 残りのn1n1n_1個のセルをカバーする1D長方形、つまり間隔。 しかし、DPが2Dの問題に対して機能することはないと思います。1Dの問題については、部分問題を解決する必要がありますが、2Dについては( N 1 + N 2N1N1N_1副問題(グリッド上の北東ラティスパスの数)。(N1+N2N2)(N1+N2N2)\binom{N_1+N_2}{N_2} 問題はNPかもしれないと思いますが、(Pより難しいように見えますが)確信がなく、NP完全問題(3-SAT、頂点カバー、...)から多項式縮約を見つけることに成功していません ヘルプまたはヒントを歓迎します。

4
P = NPの証明または証明の証明の複雑さ
P = NP問題の解決の証明の複雑さに関する研究はありますか?そうでない場合、問題の進展がないことを考えると、P = NP問題を解決する証明には超多項式のステップ数が必要であると推測するのは無理でしょうか?

9
O(n)時間で5つの繰り返し値を見つける方法は?
あなたはサイズの配列があるとのn ≥ 6n≥6n \geq 6から整数含むにちょうど5を繰り返して、包括的に。時間で繰り返される数を見つけることができるアルゴリズムを提案する必要があります。私の人生では何も考えられません。ソートは、せいぜい思いますか?配列を走査するとになり、ます。ただし、リンクリスト、キュー、スタックなどのトリッキーなものを見たので、並べ替えが必要かどうかはわかりません。111n−5n−5n − 5O(n)O(n)O(n)O(nlogn)O(nlogn)O(n\log n)O(n)O(n)O(n)O(n2logn)O(n2logn)O(n^2\log n)

5
特定のタスク用に言語を「最適化」するのはなぜですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 多くの場合、特定のタスクに特化したプログラミング言語があります。一部のプログラミング言語は、配列演算(マトリックスや多次元配列の使用など)に優れていますが、一部のプログラミング言語は、他の言語で再現するのが難しい高レベルの数学に優れています(それでもなお可能です)。 とにかくアセンブリに至るまで最も単純にコンパイルされることを考えると、ある言語は他の言語よりも特定のタスクまたは最終目標に対してそれを改善しますか? 私はチューリング完全な言語、チューリングと同等の言語について話している。

4
フロートの不正確さが原因の不平等
少なくともJavaでは、このコードを書くと: float a = 1000.0F; float b = 0.00004F; float c = a + b + b; float d = b + b + a; boolean e = c == d; の値はeeeなり。これは、数値を正確に表現する上でフロートが非常に制限されているという事実が原因であると考えています。しかし、なぜの位置を変えるだけでこの不平等が生じるのか理解できません。falsefalsefalseaaa 以下のように、3行目と4行目の両方で sを1 に減らしましたが、の値はなり。bbbeeetruetruetrue float a = 1000.0F; float b = 0.00004F; float c = a + b; float …

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