コンピュータサイエンス

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

6
素人向けの再帰的および再帰的に列挙可能な言語定義
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的なコンピューターサイエンススタック交換から移行されました。 6年前に移行され ました。 私は、再帰的で再帰的に列挙可能な言語の多くの定義に出会いました。しかし、私はそれらが何であるかを完全に理解できませんでした。 誰かが簡単な言葉で彼らが何であるかを教えてもらえますか?

3
下限を証明することは本当に可能ですか?
計算上の問題がある場合、そのような計算の下限を見つけるタスクは本当に可能ですか?私はそれが単一の計算ステップがどのように定義され、どのモデルが証明に使用されるかを要約すると思いますが、それを考えると、実際に一般的に下限を証明しますか?私が意味することは、私たちは「問題のように何かを証明することができるであるより速く解くことができないではなく、」問題のある時間「で解決することができる時間またはより高速な」?XXXt(X)t(X)t(X)XXXt(X)t(X)t(X) 特に下限とその証拠に関する情報を見つけようとしましたが、興味のあるもの、主題に関する書籍/論文/ウェブサイトに関する推奨事項を実際に見つけることができませんか?

7
Aが偽でBが偽の場合、なぜAはBを真とするのですか?
英語の「含意」は論理演算子「含意」と同じことを意味していないようで、ほとんどの場合、「OR」という言葉は日常言語での「排他的OR」を意味します。 2つの例を見てみましょう。 今日が月曜日の場合、明日は火曜日です。 これは本当です。 しかし、次のように言うと: 太陽が緑の場合、草は緑です。 これも事実とみなされます。どうして?この背後にある自然英語の「論理」とは何ですか?それは私の心を吹き飛ばします。

3
動的グラフの最短経路を取得する
現在、有向グラフの最短経路を研究しています。ダイクストラやベルマンフォードのよ​​うに、ネットワーク内の最短経路を見つけるための多くの効率的なアルゴリズムがあります。しかし、グラフが動的な場合はどうでしょうか?動的とは、プログラムの実行中に頂点を挿入または削除できることを意味します。新しいグラフで最短経路アルゴリズムを再度実行する必要なく、エッジeを挿入した後、頂点から他のすべての頂点uへの最短経路を更新するための効率的なアルゴリズムを見つけようとしています。これどうやってするの?前もって感謝します。vvvあなたはuueee 注:変更は、アルゴリズムの最初の反復後に行うことができます 注[2]: 2つのノード、はソース、tはターゲットです。これらのノード間の最短パスを見つける必要があります。グラフが更新されたら、π (s 、t )を更新するだけです。これはsとtの間の最短経路です。ssstttπ(s 、t )π(s,t)\pi(s,t)sssttt 注[3]:エッジ挿入の場合にのみ興味があります。 正式な定義:グラフ与えられた場合。定義更新操作を)1と、エッジの挿入Eに対してE)は、エッジのアミノ酸欠失または2 EからEを。目的は、更新操作後のすべてのペアの最短パスのコストを効率的に見つけることです。効率的には、少なくとも更新操作の後に、Bellman-FordアルゴリズムなどのAll-Pairs-Shortest-Pathアルゴリズムを実行するよりも優れています。G = (V、E)G=(V,E)G = (V,E)eeeEEEeeeEEE 編集:以下に問題の簡略版があります: 重み付きグラフが与えられ、単方向のエッジと2つの重要な頂点sおよびtで構成されます。候補の双方向エッジのセットCも提供されます。私はエッジを構築しなければならない(U 、V )∈ Cはからの距離を最小にするために、SをT。G (V、E)G(V,E)G(V,E)ssstttCCC(U 、V )∈ C(u,v)∈C(u,v) \in Csssttt

5
フィットネスの低い人が次世代に生き残るチャンスがあるのはなぜですか?
私は現在、遺伝的アルゴリズムについて読んで見ていますが、それは非常に興味深いと思います(大学にいる間、それを研究する機会がありませんでした)。 突然変異は確率に基づいていることを理解しています(ランダム性が進化の根源です)が、なぜ生存が必要なのかわかりません。 私が理解から、個々のフィットネス持つ、そのような別の個人用としてフィットネス持つ我々は持っている、その後、より良い確率持つ生き残るために次世代へ。F (i )J F (j )F (i )> F (j )I JIIIF(i)F(i)F(i)JJJF(j)F(j)F(j)F(i)>F(j)F(i)>F(j)F(i) > F(j)IIIJJJ 確率は、が生き残り、は生き残れないかもしれないことを意味します(「不運」で)。なぜこれが良いのか理解できませんか?が常に選択を生き延びたら、アルゴリズムの何が問題になるでしょうか?私の推測では、アルゴリズムは貪欲なアルゴリズムに似ていますが、よくわかりません。I IJJJ III III

2
#SATを解決するために時々効率的なアルゴリズムはありますか?
してみましょう通常のAND、OR、およびNOT演算子と、いくつかの変数からなるブール式も。Bの満足できる割り当ての数をカウントしたいと思います。それは私がの変数に真理値の異なる割り当て数を見つけたい、であるBそのためBが真の値をとります。例えば、式A ∨ Bは 3つの満足割り当てを有します。(∨ B )∧ (C ∨ ¬ Bは) 4を有しています。これが#SAT問題です。BBBBBBBBBBBB∨ Ba∨ba\lor b(∨ B )∧(C ∨ ¬ B )(a∨b)∧(c∨¬b)(a\lor b)\land(c\lor\lnot b) 明らかに、この問題の効率的な解決策は、SATの効率的な解決策を意味しますが、これはありそうにありません。実際、この問題は#P完全であり、SATよりも厳密に難しい場合があります。したがって、保証された効率的なソリューションを期待していません。 しかし、SAT自体の本当に難しいインスタンスは比較的少ないことがよく知られています。(たとえば、Cheeseman 1991、「本当に難しい問題はどこにあるか」を参照してください。)通常の枝刈り検索は、最悪の場合は指数関数的ですが、多くのインスタンスを効率的に解決できます。解決方法は、最悪の場合指数関数的ですが、実際にはさらに効率的です。 私の質問は: 一般的なブール式の充足可能な割り当ての数をすばやくカウントできるアルゴリズムは、そのようなアルゴリズムが一般的なインスタンスで指数関数的な時間を必要とする場合でも既知ですか?可能なすべての割り当てを列挙するよりも著しく優れたものはありますか?

5
O(mn)は「線形」または「2次」成長と見なされますか?
時間の複雑さがO(mn)で、mとnが2つの入力のサイズである関数がある場合、その時間の複雑さを「線形」(mとnの両方で線形であるため)または「2次」(それは2つのサイズの製品だから)?または、他の何か? O(m + n)も線形ですが、はるかに高速であるため、「線形」と呼ぶのは紛らわしいと感じますが、各変数で線形であるため、「二次」と呼ぶのも奇妙だと感じます。

1
貪欲なアルゴリズムはいつコイン交換の問題を解決できますか?
異なる金種および値v のコインのセットが与えられた場合、値vを表すのに必要な最小数のコインを見つけたいと考えます。C 1 、。。。、c nc1,...,cnc1, ... , cn たとえば、コインセット1,5,10,20の場合、合計6の場合は2コイン、合計19の場合は6コインになります。 私の主な質問は、この問題を解決するために貪欲な戦略をいつ使用できるかということです。 ボーナスポイント:この文は明らかに間違っていますか?(From:最小コイン変更問題に対して貪欲なアルゴリズムで十分かどうかを見分ける方法は?) ただし、この論文では、欲張りアルゴリズムが最初の最大値と2番目に大きい値に対して機能する場合、それらすべてに対して機能するという証拠があり、それをチェックするために欲張りアルゴリズムと最適なDPアルゴリズムを使用することを提案します。 http://www.cs.cornell.edu/~kozen/papers/change.pdf 追伸 そのスレッドの答えは信じられないほどぎこちないことに注意してください。そのため、私は新たに質問をしました。


1
線形プログラムとしてソートする
驚くほど多くの問題が、線形計画法(LP)をかなり自然に削減しています。ネットワークフロー、2者間マッチング、ゼロサムゲーム、最短パス、線形回帰、および回路評価などの例については、[1]の第7章を参照してください。 回路評価は線形計画法に帰着するため、問題には線形計画法の定式化が必要です。したがって、線形プログラムへの還元を介した「新しい」ソートアルゴリズムがあります。だから、私の質問はPPP 実数の配列をソートする線形プログラムとは何ですか?nnn LPへの還元と解決のソートアルゴリズムの実行時間は? S. Dasgupta、C。Papadimitriou、U。Vaziraniによるアルゴリズム(2006)

4
忙しいビーバーは人間に知られている最も急速に成長している機能ですか?
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的なコンピューターサイエンススタック交換から移行されました。 7年前に移行され ました。 この興味深い質問がありました。人に知られている最も急速に成長している機能は何ですか?それは忙しいビーバー? などの関数を知っていますが、この関数はよりもゆっくりと成長し、はよりもゆっくりと成長します、これはよりもゆっくりと成長します。その後、関数を組み合わせてすることができそれはよりも速く成長します。2 x x !x x(x x)!x xx2x2x^22x2x2^xx!x!x!xxxxx^x(xx)!(xx)!(x^x)!xxxxx^x 次に、よりもはるかに速く成長するアッカーマン関数などの再帰関数に到達します。それから、忙しいビーバー関数についての人々は、アッカーマン関数よりもさらに速く成長します。(x x)!B (x )A(x,x)A(x,x)A(x,x)(xx)!(xx)!(x^x)!B(x)B(x)B(x) 現時点では、忙しいビーバーよりも速く成長する他の機能は聞いていません。忙しいビーバーよりも早く成長する可能性のある他の機能がないということですか?(脇の要因からなど、等)A (B (x )、B (x ))B(x)B(x)B(x)A(B(x),B(x))A(B(x),B(x))A(B(x), B(x))

3
段階的な機能とは(概念的に)
最近のCACMの記事[1]で、著者は段階的な機能の実装を提示しています。彼らはそれがよく知られているかのようにこの用語を使用し、どの参考文献も明らかな紹介のようには見えません。 彼らは簡単な説明をします(強調鉱山と参照番号が変更されました;オリジナルでは22です) プログラム生成のコンテキストでは、Taha and Sheard [2] によって確立されたマルチステージプログラミング(MSP、略してステージング)により、プログラマーはプログラム式の評価を後のステージに明示的に遅らせることができます(したがって、式のステージング)。現在のステージは、次のステージのプログラムを構成(および場合によっては実行)するコードジェネレーターとして効果的に機能します。 ただし、Taha and Sheardは次のように書いています(強調強調): マルチステージプログラムは、コードの生成、コンパイル、実行をすべて含むプロセスであり、すべて同じプロセス内にあります。多段階言語は多段階プログラムを表現します。ステージング、したがってマルチステージプログラミングは、実行時の解釈オーバーヘッドを払わない汎用ソリューションの必要性に対処します。 彼らはさらに、ステージングが効果的であることを示す古い作品へのいくつかの参照に進み、それは概念がさらに古いことを示唆しています。彼らは用語自体の参照を与えません。 これらの記述は、矛盾していないにしても、直交しているように見えます。RompfとOderskyが書いたものは、TahaとSheardが提案したものの応用かもしれませんが、それは同じことに関する別の視点かもしれません。彼らは重要な点は、実行時にプログラムが自分自身の一部を(再)作成することであることに同意しているようですが、それが必要な能力であるか、十分な能力であるかはわかりません。 それでは、このコンテキストでのステージングの解釈は、それぞれステージングとは何ですか?この用語はどこから来たのですか? 軽量モジュラーステージング: T. RompfおよびM. Oderskyによるランタイムコード生成およびコンパイル済みDSLへの実用的なアプローチ(2012) W. TahaおよびT. Sheardによる明示的な注釈付きのMetaMLおよびマルチステージプログラミング(2000)

1
シャッフルアルゴリズムの正しさを証明する方法は?
アイテムのリストをランダムな順序で作成する方法は2つありますが、それらが同等に公平であるかどうかを判断したいです 私が使用する最初の方法は、要素のリスト全体を作成してから、シャッフルを実行することです(Fisher-Yatesシャッフルなど)。2番目の方法は、挿入のたびにリストをシャッフルする反復的な方法です。擬似コードでは、挿入関数は次のとおりです。 insert( list, item ) list.append( item ) swap( list.random_item, list.last_item ) この特定のシャッフルの公平性を示す方法に興味があります。このアルゴリズムが使用される場合、このアルゴリズムの利点は、わずかに不公平であっても大丈夫です。決定するには、その公平性を評価する方法が必要です。 私の最初のアイデアは、この方法で可能な合計順列と、最終的な長さのセットで可能な合計順列を計算する必要があるということです。ただし、このアルゴリズムから生じる順列の計算方法については少し迷っています。また、これが最良の、または最も簡単なアプローチであると確信することもできません。

3
同等のDFAが最大サイズになるためのNFAの条件は何ですか?
DFAは表現力の点でNFAと同等であることがわかっています。NFAをDFAに変換するための既知のアルゴリズムもあります(残念ながら、そのアルゴリズムの発明者を知っています)。最悪の場合、NFAが状態だった場合、状態になります。2S2S2^SSSS 私の質問は、最悪のシナリオを決定するものは何ですか? あいまいな場合のアルゴリズムの転写を次に示します。 レッツ NFAなります。DFAしますA=(Q,Σ,δ,q0,F)A=(Q,Σ,δ,q0,F)A = (Q,\Sigma,\delta,q_0,F)A′=(Q′,Σ,δ′,q′0,F′)A′=(Q′,Σ,δ′,q0′,F′)A' = (Q',\Sigma,\delta',q'_0,F') Q′=P(Q)Q′=P(Q)Q' = \mathcal{P}(Q)、 F′={S∈Q′|F∩S≠∅}F′={S∈Q′|F∩S≠∅}F' = \{S \in Q' | F \cap S \neq \emptyset \}、 、及びδ′(S,a)=⋃s∈S(δ(s,a)∪δ^(s,ε))δ′(S,a)=⋃s∈S(δ(s,a)∪δ^(s,ε))\delta'(S,a) =\bigcup_{s \in S} (\delta(s,a) \cup \hat \delta(s,\varepsilon)) 、q′0={q0}∪δ^(q0,ε)q0′={q0}∪δ^(q0,ε)q'_0 = \{q_0\} \cup \hat \delta(q_0, \varepsilon) ここで、は拡張遷移関数です。δ^δ^\hat\deltaAAA

2
和のセットを「加算解除」するための効率的なアルゴリズム
自然数Xのマルチセットが与えられた場合、すべての可能な合計のセットを考えます。 sums(X)={∑i∈Ai|A⊆X}sums(X)={∑i∈Ai|A⊆X}\textrm{sums}(X)= \left\{ \sum_{i \in A} i \,|\, A \subseteq X \right\} 例えば、sums({1,5})={0,1,5,6}sums({1,5})={0,1,5,6}\textrm{sums}(\left\{1,5\right\}) = \left\{0, 1, 5, 6\right\}ながら sums({1,1})={0,1,2}sums({1,1})={0,1,2}\textrm{sums}(\left\{1,1\right\}) = \left\{0, 1, 2\right\}。 (和の入力セットのサイズに関して測定される)逆演算を計算するための最も効率的なアルゴリズムは何ですか?具体的には、次のいずれかを効率的に計算できますか? 特定のセットが有効な合計セットであるかどうか。(例えば、{0,1,2}{0,1,2}\left\{0,1,2\right\}、有効であるが、{0,1,3}{0,1,3}\left\{0,1,3\right\}ではありません。) 指定されたセットに合計されるマルチセット。 最小の所与のセットへの合計マルチセット。(たとえば、{1,2}{1、2}\left\{1,2\right\}と{1,1,1}{1、1、1}\left\{1,1,1\right\}両方の合計{0,1,2,3}{0、1、2、3}\left\{0,1,2,3\right\}が、前者が小さいです。)

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