コンピュータサイエンス

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

1
長さを維持する一方向関数
残念ながら、計算の複雑さに関する私のバックグラウンドはまだ弱いですが、私はそれに取り組んでいます。 私が理解しているように、一方向関数の存在の問題は、この分野では非常に重要です。 一方向関数があると仮定すると、長さを維持する一方向関数が存在することをどのように示すことができますか?

3
P対NPと、NPの問題を効率的に解決するNatureの能力との関係は何ですか?
自然がとんでもない(つまりNP)問題を効率的に簡単に計算する方法について考えていました。たとえば、量子システムには2n2n2^n 状態を表す要素ベクトル、ここで nnnパーティクルの数です。これを「解決する」という指数関数的な性質にもかかわらず、自然は余分な時間を必要としませんnnn-粒子システム。 これは完全に有効な仮定ではないかもしれませんが、物理学の行動原理は、自然が常に最も簡単な方法で物事をやりたいと思っていることを私に思わせます。それが真実ではない場合、この質問はおそらく意味がありません。 自然がいくつかの問題を効率的に解決できないことがわかった場合、これは多項式時間でNP問題を解決できるという点で私たちが運命を破られることを意味しますか?物理法則は、P対NPに取り組むのに十分強力な武器ですか?最初の質問/アサーションの逆も当てはまりますか(自然がそれを行うことができる場合、私たちにも同様の方法があるはずです)?


1
トポロジカルソートの手順、その正確さの証明
定義:状態機械の保存された不変条件は、状態に関する述語、が状態に対して真であり、が何らかの状態である場合、は次のようになります。 。PPPP(q)P(q)P(q)qqqq→ rq→rq \rightarrow rrrrP(r )P(r)P(r) 定義:折れ線グラフは、エッジがすべて1つのパス上にあるグラフです。 定義:正式には、状態機械は、セットの要素が「状態」と呼ばれ、関係が遷移関係と呼ばれ、遷移関係のグラフの矢印がトランジションと呼ばれます。状態から状態への遷移は、と記述されます。qqqrrrq→ rq→rq \rightarrow r DAG:有向アシリックグラフ 次の手順は、任意の有向グラフ適用できます。GGG サイクルにあるエッジを削除します。 削除エッジ頂点からパスがある場合に頂点には含まれていません。< u → v ><u→v>あなたuuvvv< u → v ><u→v> 頂点と頂点間にどちらの方向にもパスがない場合は、エッジを追加します。< u → v ><u→v>あなたuuvvv 該当するものがなくなるまで、これらの操作を繰り返します。 この手順は、状態マシンとしてモデル化できます。開始状態はであり、状態はすべてと同じ頂点を持つ可能な有向グラフです。GGGGGG (b)プロシージャがダイグラフで終了する場合、はと同じ頂点を持つ折れ線グラフであることを証明します。HHHHHHGGG ヒント:が折れ線グラフでない場合、何らかの操作が適用可能でなければならないことを示します。HHH (c) DAGであることが手順の保存された不変であることを証明します。 (d)そのことを証明するGGG はDAGであり、手順が終了すると、最終的な折れ線グラフのウォーク関係はトポロジの種類になります。 GGG。 ヒント:述語が P(u 、v )P(u,v)P(u,v)::からの有向パスがあります あなたuu に vvv 2つの頂点について、手順の保存された不変式です u 、v u, vu, \ …

1
グラフの最も一般的な祖先の類似アルゴリズム
私は型システムに取り組んでいて、最も低い共通の祖先に似ているように見える問題を見つけました。2つのタイプがある場合、同じターゲットタイプになる変換の最小シーケンスを見つける必要があります。単純なタイプツリーがある場合、結果を取得する方法はわかっていますが、残念ながら、もう少し複雑なグラフ構造があります。 そのグラフにはいくつかの重要なポイントがあります。これは単方向であり、ループは形成されません。タイプの数に制限がないため、静的に作成することはできません。パスの距離は一般的に非常に短いです。それは、多くのショートカットエッジを持つツリーのように「感じ」ます。 最初は最低の共通祖先を調べましたが、それは主にツリーアルゴリズムとして記述されています。私はそれを適応させることができるという希望をまだあきらめていません。他の可能性は、より一般的な経路探索アルゴリズムです。 私は誰かが以前にこの問題、または同様の問題を見たことがあることを願っています。何かが存在している必要があると思い込み、間違った用語/名前を検索しているだけであることは十分によく知られているようです。 これをより正式に説明するための私の試みは次のとおりです。 グラフがあり、各頂点に1組の出力エッジます。グラフは動的で、場合によっては無限なので、グラフ全体に対してG = \ {V、E =(V_x、V_y)\}の形式を作成する方法はありません。G = { V}G={V}G = \{ V \}V= { E=Vバツ}V={E=Vx}V = \{ E=V_x \}G = { V、E= (Vバツ、Vy)}G={V、E=(Vバツ、Vy)}G = \{V, E=(V_x,V_y)\} パスは、そのノードから利用可能なエッジのいずれかをたどることにより、頂点から形成されます。。このパスの長さは、シーケンス内の頂点の数と同じです。可能なサイクルはありません。2つのノード間のすべてのパスのセットは、として表されます。Pんメートルバツ=Vん、。。。、VメートルPんメートルバツ=Vん、。。。、VメートルPnm_x = V_n, ..., V_mPn m = {Vん、。。。、Vメートル}Pんメートル={Vん、。。。、Vメートル}Pnm = \{ V_n, ..., V_m \} は有限のステップ数で空であると判断できることに注意してください。セット全体を列挙することは実際には不可能です。Pn mPんメートルPnmPn mPんメートルPnm 問題は、2つの頂点から3番目の頂点への最短経路を見つけることです。すなわち、所与の、ある見つけるパスするようと存在し、最小です。Va、VbVa、VbV_a, V_bVcVcV_cPacバツPacバツPac_xPbcyPbcyPbc_yl e …

2
O(n)の関数もo(n)の関数もすべてΘ(n)にありますか?
私の講義の1つは次のように述べています。 (f(N )= O (N )∧ F(n )≠ o (n ))⟹f(n )= Θ (n )(f(ん)=O(ん)∧f(ん)≠o(ん))⟹f(ん)=Θ(ん)( f(n)=O(n) \land f(n)\neq o(n) )\implies f(n)=\Theta(n) たぶん私は、定義の中で何かが欠けているんだけど、例えばバブルソートは、とではないそれもありませんそれが最良の場合の実行時間ですので、。O (ん2)O(ん2)O(n^2)o (ん2)o(ん2)o(n^2)θ (ん2)θ(ん2)\theta(n^2)Ω (n )Ω(ん)\Omega(n) ここで何が欠けていますか?

1
ラムダ計算における自由および拘束
Slonnegerの「Syntax and Semantics of Programming Languages」の一部を以下に示します。 変数は、同じラムダ式内でバインドされ、フリーの両方で発生する可能性があります。たとえば、λx.yλy.yxでは、最初のyがフリーで、他の2つはバインドされています。 自由変数は、λxの直後のyであると想定しています。バインドされたyはλy.yで、直感的に把握できます。したがって、((λx.yλy.yx)a)b)は(yλy.ya)b)に減少し、次にbbaに減少しますか?これがどのようになってきたのか誰かが説明できますか?結局、それは式bです。誰かがおそらくバインドされた変数と自由変数のより多くの例を提供できますか?

1
有向グラフの最大独立セットを見つける方法は?
私はこの問題を解決しようとしています。 問題:与えられたnnn 正の整数、あなたの仕事は2つの数がないように整数の最大数を選択することです a,ba,ba, b その中で aaa で割り切れる bbb。 最大独立セットとこのセットのサイズを見つける必要があります。サイズは、ケーニッヒの定理によって見つけることができます。しかし、どのようにして最大独立セットを見つけることができますか(つまり、どの頂点がセットの一部であるか)。 私もいくつか検索をして、ここで何かを見つけました: If removing a vertex does not change minimum path cover then I can get the desired result without that vertex. しかし、私は根本的な定理を理解していません。どんな助けも大いに役立ちます。

1
回路サイズをチューリングマシンの実行時間に関連付ける方法
http://rjlipton.wordpress.com/2009/05/27/arithmetic-hierarchy-and-pnp/から、 定義、 M[x,c]M[x,c]M_{[x,c]} 入力に対して次のように動作する確定的チューリングマシンとして yyy。マシンが扱うxxx 確定的プログラムとして、そしてシミュレート xxx 入力時 yyy。同時に、マシンはステップの実行を停止するカウンターを実行します|y|c|y|c|y|^c。マシンがカウンターが停止する前に受け入れる場合は、受け入れます。それ以外の場合は拒否されます。 しましょう f(i,c)f(i,c)f(i,c) 最小の自然数になるように M[i,c]M[i,c]M_{[i,c]}入力を間違える yyy。次に、P≠NPP≠NPP \neq NP true、関数 f(i,c)f(i,c)f(i,c) 常に定義されます。 定理:無限の数があると仮定します iii 存在する ccc そのため f(i,c)>22|i|+cf(i,c)>22|i|+cf(i,c) > 2^{2^{|i|+c}} 次に、無限に多くの nnn、SATには回路サイズがあります nO(logn)nO(log⁡n)n^{O(\log n)}。 証明:しましょう i>1i>1i>1 そして ccc そうなる f(i,c)>22|i|+cf(i,c)>22|i|+cf(i,c) > 2^{2^{|i|+c}} 定義する n=2|i|+c−1n=2|i|+c−1n = 2^{|i|+c-1}。ご了承くださいccc せいぜい lognlog⁡n\log n。そして、 M[i,c]M[i,c]M_{[i,c]} すべての上 yyy 長さの …

3
時間内に実行されるチューリングマシンの数
この質問に答えるための戦いの半分は、それを正確に定式化することだと思います!検索エンジンはあまり出てこないので、これがよく知られているのかよく研究されているのか疑問に思っていました。 私の考え:この質問を定式化する最も簡単な方法は私のタイトルのとおりであると思います:定数与えられると、すべての入力でステップ以下で実行されるTMの数がそこにありますサイズ、そしてどのように多くのTMが使用することをしているテープ正方形またはサイズのすべての入力に少ない?これは質問をする最も直接的で簡単な方法のようですが、たとえば、関数を指定すると、時間内に実行されるTMの数はすべてのサイズ入力について(またはこれらのTMはどのくらい「密」か)?これは私には難しいようです。T 、S 、K ∈ Nt、s、k∈Nt,s,k \in \mathbb{N}tttkkkssskkkp (k )p(k)p(k)p (k )p(k)p(k)kkkkkk おそらく、テープのアルファベット(またはGodelの番号付け?)を修正する必要があります。どちらの方法でも、異なるが同型の状態図を持つ2つのTMは同じまたは異なると見なすことができます。 当面の問題は、無限の数があることです。基準を満たすTMをすべて取り、「デッドステート」を追加します。これに対処する方法は2つ考えられます。1つ目(私は好きではありません)は、追加のパラメーターを追加することです。説明の長さが TMが基準をいくつ満たしますか?2番目の方法(私が好む)は、サイズ入力で同等の 2つのTMを考慮することです。そのような入力すべてについて、TMがまったく同じ動作をする場合(同じ状態に入り、テープに同じように書き込み/移動する)。次に、各等価クラスの最小TMに制限するか、基準を満たす等価クラスの数を尋ねます。≤ L≤L\leq L≤ K≤k\leq k 編集:コメントでVorが指摘したように、2番目のアプローチの問題は、その時点での回路と基本的に同じであることです。では、最初のものはどうですか?または、この質問を形式化するより良い方法はありますか? 参考文献/文学、考え、または回答は非常に興味深く、高く評価されます!

5
プログラミング言語とチューリングマシンの正確な関係は何ですか?
yacc、bison、flex、lexについてよく知らないので、間違っている場合は修正してください。ただし、プログラミング言語もTuringマシンであり、Turingマシンはタプル where、、、 as input、は遷移関数として、 =左へのステップ数、 =右へのステップ数、 = "スタンバイ"、は初期状態、(Q,Γ,b,Σ,δ,q0,F)(Q,Γ,b,Σ,δ,q0,F)(Q, \Gamma, b, \Sigma, \delta, q_0, F)QQQΓΓ\Gammab∈Γb∈Γb \in \GammaΣ⊆Γ∖{b}Σ⊆Γ∖{b}\Sigma \subseteq \Gamma \smallsetminus \{ b \}δ:Q×Γ→Q×Γ×{L,R,N}δ:Q×Γ→Q×Γ×{L,R,N}\delta: Q \times \Gamma \rightarrow Q \times \Gamma \times \{ L, R, N \}LLLRRRNNNq0∈Qq0∈Qq_0 \in QF⊆QF⊆QF \subseteq Q 終了状態のセットです。 プログラミング言語の実装は、チューリングマシンの実装とどの程度似ていますか?上記のようなチューリングマシンが定義されたことでプログラミング言語が実装されたときに何が行われると言えるのでしょうか?もしそうなら、プログラミング言語が定義されているときに、チューリングマシンの定義のように見えるモデルを使用できないのはなぜですか?代わりに、BNFのような何かが標準のようです。

2
計算の少なくとも1つのブランチで停止する非決定的チューリングマシン
Michael Sipserからの私のテキストをここで見ています。彼は、すべての計算ブランチがすべての入力で停止する場合、非決定論的チューリングマシンが決定者であると述べています。すべての入力に対して少なくとも1つの分岐で停止するが、他のループではループする可能性のある非決定性チューリングマシンと呼ばれる場所をどこかで見たのを覚えていると思います。そのようなものの名前はありますか?この章の後半で「ベリファイア」という単語を参照していますが、これは適合していないようです...これはアルゴリズムを指していると思います。 言語Aのベリファイは、アルゴリズムです ベリファイアの時間はの長さでのみ測定するため、多項式時間ベリファイアはの長さの多項式時間で実行されます。言語は、多項式の時間検証器があれば、多項式で検証可能です。あAAVVVA = { w ∣ V 受け付け ⟨ wは、C ⟩ いくつかの文字列cの} 。A={w∣V accepts ⟨w,c⟩ for some string c}.A=\{w\mid V\text{ accepts }\langle w,c\rangle\text{ for some string c}\}.wwwwwwあAA

3
停止問題の意味
停止問題は次のように定義されます。 HTM={⟨M,w⟩∣M halts on input w}HTM={⟨M,w⟩∣M halts on input w}H_{TM} = \{ \langle M, w \rangle \mid \text{\(M\) halts on input \(w\)}\} どういう意味かわかりません。ですHTMHTMH_{TM} それらのすべてが単語を受け入れる/拒否するようなチューリングマシンのコレクション www?それは特定の言葉ですか?それとも、アルファベットの単語を意味しますか? ありがとう

4
最初にDFAに変換する代わりにNFAを直接使用する実際のレクサーはありますか?
私はコンパイラでCourseraクラスを受講していますが、レクサーに関するレッスンでは、非決定性有限オートマトン(NFA)を使用して正規表現を解析する間に、決定論的有限オートマトン(DFA)との間に時空間トレードオフがあることを示唆しています。私が正しく理解している場合、トレードオフはNFAが小さいことですが、すべての可能な状態を同時に考慮する必要があるため、ほとんどの場合DFAに変換されるため、トラバースに時間がかかります。「実際の」生活でDFAの代わりにNFAを使用するレクサー、つまり、単なる概念実証ではなく、本番環境で使用されるコンパイラーはありますか?

1
完全な二分木の極小値を見つける方法は?
完全な二分木の極小値を見つける方法は? 考慮してください nnn完全二分木-node、いくつかについて。各ノードは実数ラベル付けされています。ノードにラベルを付ける実数はすべて異なると想定できます。ノードラベルの場合は極小であるラベルよりも小さいすべてのノードのに接合されているエッジによって。TTTn=2d−1n=2d−1n = 2^d − 1dddv∈V(T)v∈V(T)v \in V(T)xvxvx_vv∈V(T)v∈V(T)v \in V(T)xvxvx_vxwxwx_wwwwvvv あなたは、それぞれの完全なバイナリツリー与えられているが、標識は唯一以下で指定された暗黙的な方法:各ノードのために、あなたは価値判断できすることにより、プロービングノード。極小値を見つける方法を示してのみ使用プローブのノードに。TTTvvvxvxvx_vvvvTTTO(logn)O(log⁡n)O(\log n) TTT 帰属:これは、Jon KleinbergとEva Tardosによる本「Algorithm Design」の第5章「Divide and Conquer」の問題6のようです。

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