コンピュータサイエンス

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

3
一部の言語のすべての文字列で構成される言語が、別の言語の一部の文字列が通常のものと同じ長さであることを証明する
だから私はこの問題を頭の中で数日間掻き続けてきました。通常の言語とBがある場合、Aのすべての文字列で構成され、その長さがBの一部の文字列と等しい言語Lが通常の言語であることを示します。AAABBBLLLAAABBB 方程式の形で: L={x∈A∣∃y∈B s.t. |x|=|y|}L={x∈A∣∃y∈B s.t. |x|=|y|}L = \{x \in A \mid \exists y \in B \text{ s.t. } |x| = |y| \} 私の最初の考えは、言語とBの両方のDFAを試してみて、2つの状態を相互にマッピングし、うまくいけば、Lが正規であることを証明する新しいDFAを生成できるように1:1の比率を取得することでした。しかし、私はAとBが同じシンボルセット上にある必要はないことに気付きました。 AAABBBLLLAAABBB これを解決する正しい方法は通常の言語のクロージャープロパティを使用することだと思いますが、文字列自体ではなく文字列の「長さ」のプロパティを開始/使用する方法がわかりません。 誰かが私を正しい方向に向けることができますか?

2
ランダム化されたアルゴリズムは建設的ですか?
から、確率論的方法による証明は非建設的であるとよく言われます。 ただし、確率論的手法による証明は、実際にランダム化されたアルゴリズムを設計し、存在を証明するために使用します。Rajeev Motwani、Prabhakar Raghavanによるランダム化アルゴリズムの p103から引用: 確率的方法による証明は、ランダム化されたアルゴリズムと見なすことができます。この場合、特定の実行でアルゴリズムが適切なパーティションを見つけられない確率を制限する、さらなる分析が必要になります。確率論的方法の思考実験とランダム化アルゴリズムの主な違いは、それぞれがもたらす結果です。確率的方法を使用する場合は、組み合わせオブジェクトが存在することを示すことのみに関心があります。したがって、好ましいイベントがゼロ以外の確率で発生することを示すことに満足しています。一方、ランダム化されたアルゴリズムでは、効率は重要な考慮事項です-非常に小さな成功確率は許容できません。 したがって、ランダム化されたアルゴリズムは、建設的なものではないと見なされていますか? アルゴリズムまたは証明はどのように「建設的」に定義されていますか? ありがとう!


1
Brzozowskiのアルゴリズムの実装に関する問題
私はBrzozowskiのアルゴリズムを実装しようとしましたが、それが特定のクラスの入力に対して次善のオートマトンを作成し、結果に実際に必要なものよりも1つ多い状態があることを発見しました。自明なオートマトンでそれを示すことができます: a b a b a b a b a b >0 0 1 rev *0 0,2 - det >0 - 1 rev *0 - - det >0 1 2 1 1 2 --> 1 1 0 --> 1 2 5 --> 1 - 0,4 --> 1 1 2 *2 …

4
ネストされたビッグO表記
グラフがあるとしましょうでの縁。実行時間がでBFSを実行したい。| E | = O (V 2)G O (V + E )| G ||G||G|| E| =O( V2)|E|=O(V2)|E|=O(V^2)GGGO (V+ E)O(V+E)O(V+E) このグラフの実行時間はで、簡略化すると書くのは自然なことです。O (V 2)O (O (V2)+ V)O(O(V2)+V)O(O(V^2)+V)O (V2)O(V2)O(V^2) このような「ネストされたOを削除する」ショートカットを使用することの落とし穴はありますか(この場合だけでなく、より一般的に)?

2
有向グラフで指定された2つの頂点間の単純なパスで頂点を見つける方法
有向グラフと2つの異なる頂点SおよびTが与えられた場合、SからTへの少なくとも1つの単純なパス上にあるすべての頂点を見つける多項式時間アルゴリズムはありますか? Sの後継でありTの先行でもあるすべての頂点を見つけることは難しくありませんが、これは上記のセットのスーパーセットにすぎません。たとえば、次のグラフについて考えてみます。S-> a; a-> b; b-> c; b-> T; c-> a a、b、cはすべてSの後継でTの前身ですが、SからTへcを通過する単純なパスはありません(cを経由するSからTへのすべてのパスには2回のaとbが含まれるため)。 密接に関連する問題は次のとおりです。有向グラフと3つの異なる頂点SおよびTとIが与えられた場合、SからTへの単純なパスがIを通過するかどうかを決定する多項式時間アルゴリズムがあります。 この後者の問題に対する多項式時間アルゴリズムは、前者に多項式アルゴリズムを構築するために使用できます。これは、Iをグラフ内のすべてのノードで置き換えることによって連続的に適用できるため(または、Sの後続ノードであるすべてのノードに対してより効率的にTの前身)。

3
フォレスト内のすべてのノードの高さを見つける
私にはフォレスト、つまり有向エッジがあり、サイクルがない(有向または無向)ノードがあります。頂点高さを、vvv入力エッジがない場合は0として定義するか、高さ0の頂点に到達するために逆方向に移動するエッジの最大数を定義します。 また、ノードの平均次数は小さな定数、たとえば2程度であることも知っています。すべての頂点の高さを見つけるには、2つのアルゴリズムを考えることができます。 歩行アルゴリズム 入力エッジのない頂点について、とマークしh = 0h=0h=0ます。 各頂点について、出て行くエッジをたどり、以前の高さがより小さければ、遭遇した各頂点の高さを更新します。h = 0h=0h=0 フロンティアアルゴリズム 通過マークのない着信エッジを持つ頂点の、およびフロンティアとしてこれらをマークします。h = 0h=0h=0 すべてのフロンティア頂点について、親がフロンティア以下に子を持っているかどうかを確認します。もしそうであれば、親に加え、その子の中で最大の高さがあることをマークします。親がフロンティアにいるとマークします。111 フロンティアを超えるものがなくなるまで、2を繰り返します。 私の質問: この問題に名前はありますか、そして最もよく知られている最速の解決策はありますか? 私はすべての頂点から単に上に行くことが最も速い解決策であると考える傾向があります。私は正しいですか?h = 0h=0h=0

4
「仮説」とはどういう意味ですか?
関数の引数が仮引数と呼ばれているのはどういう意味ですか?私はこの用語をFortran以外で使用したことはありませんが、コンピューターサイエンスの一般用語ですか?ダミーとして渡され、ダミーとして渡されない引数の例は何ですか? 私はこの定義を見つけましたが、わかりませんが、仮引数は参照によって渡される変数のようです。この場合、Fortranではすべての変数がダミー変数ですか?(混乱) 編集:私は次のエッセイに出くわしただけで、Fortranの引数/関数呼び出しのテモノロジーをよりよく理解するのに役立ちました:Dortor Fortran:引数のためにここに来ました

1
高速なコンピューターと低速なコンピューターを考えると、低速アルゴリズムを実行する高速コンピューターは、高速アルゴリズムを実行する低速コンピューターよりもどのくらいのサイズになりますか?
この質問の出典は、私が受講している学部課程から来ています。これは、アルゴリズムの分析の概要をカバーしています。これは宿題ではなく、CLRSで質問されます。 MIPSで実行されている低速マシンとy MIPSで実行されている高速マシンがあります。また、同じクラスで実行時間の複雑さが異なる2つのアルゴリズムがあります。1つの「低速」アルゴリズムはT (n )= c 1 n 2で実行され、「高速」アルゴリズムはT (n )= c 2 n log nで実行されます。。xxxyyyT(n)=c1n2T(n)=c1n2T(n) = c_1n^2T(n)=c2nlognT(n)=c2nlog⁡nT(n) = c_2n \log n 高速アルゴリズムは低速マシンで実行し、高速アルゴリズムは低速マシンで実行します。低速アルゴリズムを実行する高速マシンが高速アルゴリズムを実行する低速マシンに勝るようなnの最大値はいくつですか? これまでの私の解決策: すべてのnのセットを見つけるnnnc 2 n log nとなるような nは自然数です。c2nlognx>c1n2yc2nlog⁡nx>c1n2y\frac{c_2n\log n}{x} > \frac{c_1n^2}{y}nnn これはこれまでのところ私の仕事です: {n:c2nlog2nx>c1n2y,n∈N}={n:n<c2yc1xlog2n,n∈N}{n:c2nlog2⁡nx>c1n2y,n∈N}={n:n<c2yc1xlog2⁡n,n∈N}\{n : \frac{c_2 n \log_2 n}{x} > \frac{c_1 n^2}{y}, n \in \mathbb{N}\} = \{n : n …

2
入力インスタンスを制御できない場合、オラクルは役に立ちますか?
が問題のオラクルである としましょう。しかし、このオラクルを入力インスタンスで呼び出すことはできません。代わりに、を呼び出すたびに、ランダムなインスタンスとソリューションが返されます。したがって、私はが実際に任意の困難な問題を解くことができることを知っています、私はそれを解きたいものを特定することができません。N P F F N PFFFN PNP\mathbb{NP}FFFFFFN PNP\mathbb{NP} そのようなオラクルを使用して完全な問題をより速く解決することは可能ですか?オラクルを素朴に使用するには、すべてのソリューションをチェックするのに十分なオラクルを呼び出すことによって時間を必要とするため、私の直感はノーと言っています。これを証明する方法が思いつかない。 O (2 n)N PNP\mathbb{NP}O (2ん)O(2ん)O(2^n)

1
新しいドメイン固有のプログラミング言語を正式に説明する
私は社会学習の慣習を表現するためにドメイン固有の言語を実装しようとしています。実装の一部は、言語の正式な記述-その「計算」、記号、および論理式です。 私のアプローチは、文法を記述することによって言語を記述することですが、関係、対話、より理論的なアプローチを必要とする期待やロジックの説明などの概念もあります。 この説明に役立つ例と参考文献(論文、本)をお願いしたいと思います。私はこのタスクに比較的有能に近づいていると感じているので、完全な手持ちを求めているわけではありませんが、この分野の理論家の助けをいただければ幸いです。

3
「少なくともn個の入力が真」の回路サイズ
ブール入力が個あり、しきい値nが与えられているとします。少なくともn個の入力がtrueの場合にtrueと評価されるブール回路を構築する必要があります。AND、OR、NOT、またはXORゲートを使用できます(ファンイン2つに制限され、任意のファンアウトがあります)。漸近的にこの回路をどれくらい小さくできますか?メートルmmんnnんnn 適度にタイトな上限があれば幸いです。私はそのような回路を再帰的に構築する方法を考え続けていますが、良いものを見つけることができません。また、許可されたゲートのその他の合理的な根拠の結果も役立ちます。

1
-SATから -SATに変換することで、句の数をどれだけ減らすことができますか?
kkk -SATのインスタンスから始めて、問題を(k+m)(k+m)(k+m) -SATのインスタンスに変換しようとすると、句ごとに(k+m)(k+m)(k+m)リテラルがあるため、条項の総量は? 投稿後、条項の数を減らすことは保証できないことを知りました。ただし、nnn句がある場合、「縮小」手法によってn/k+O(1)n/k+O(1)n/k + O(1)句のようなものを取得できるでしょうか。 もしそうなら、節の総数をどれだけ減らすことができることをどれだけ保証できますか?たとえば、n_k句を指定してkkk -SATで開始する場合、この句を(k + m) -SATに変換すると、新しい句の新しい量であるn_ {k + m}が保証されます。nknkn_knk+mnk+mn_{k+m}(k+m)(k+m)(k+m) さらに重要なのは、この変換をどのように実行するかです。

4
大きなデータにアルゴリズムを適用する
大きなデータ(つまり、メインメモリに完全にロードできないデータ)に一般的なアルゴリズム(並べ替え、検索など)を効率的に適用する方法と、それらのアルゴリズムのコストを考慮してアルゴリズムを効率的に適用する方法を教える本またはチュートリアルはありますか?外部メモリからのブロック転送?たとえば、ほとんどすべてのアルゴリズムの教科書では、BおよびB +ツリーを使用してデータをディスクに格納できるとされています。ただし、実際にこれを行う方法、特にデータがディスク上に存在する場合のポインタの処理については説明されていません。同様に、多くの本は検索技術を教えていますが、二次記憶に存在するデータを考慮していません。 クヌースの本をチェックしました。これらのアイデアについて説明していますが、実際にそれらを高級言語に適用する方法はまだわかりませんでした。これらの詳細について説明している参考資料はありますか?

1
言語を受け入れるマシンのセットが場合にのみ決定可能であることを示す方法は?
言語がであることを証明するためにあなたの助けをお願いします は場合に決定可能です。L={⟨M⟩|L(M)∈NP∖P}L={⟨M⟩|L(M)∈NP∖P}L=\{\langle M \rangle \mathrel| L(M) \in \mathrm{NP}\smallsetminus \mathrm{P} \}P=NPP=NP\mathrm{P}=\mathrm{NP} 場合、私はそれが空のチューリングマシンの言語だと取得します。したがって、は問題です—しかし、それは求められていることではないため、混乱しました。P=NPP=NP\mathrm{P}=\mathrm{NP}LLLco-REco-RE\text{co-RE} を表示するには、との問題も表示する必要があることを知っています。P=NPP=NP\mathrm{P}=\mathrm{NP}NPCNPC\mathrm{NPC}PP\mathrm{P} 何か助けは?ありがとう!

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