コンピュータサイエンス

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

1
ノードの完全なバイナリツリーの深さはどれくらいですか?
この質問では、完全なバイナリツリーの次の定義を使用します†: 最後のレベルを除くすべてのレベルが完全に満たされ、最後のレベルのすべてのノードが左側にある場合、レベルのバイナリツリーは完全です。TTTNNN 以下はAlgorithmsからの抜粋です。 これ()は、ノードを持つ完全なバイナリツリーの深さでもあります。(より正確には、です。)logNlog⁡N\log NNNN⌊logN⌋⌊log⁡N⌋⌊\log N⌋ 上記の抜粋が真実なのはなぜですか? †もともとここで定義

2
関係構成を計算する
定義:を自己ループのないDAGとし、およびをグラフとします。G=(V,E)G=(V,E)G=(V,E)X⊆GX⊆GX \subseteq GY⊆GY⊆GY \subseteq G 入力:。出力:リレーショナル構成リレーショナル構成 in。X,YX,YX,Y X∘YX∘YX \circ YO( | E| | V| )O(|E||V|)\mathcal{O}(|E||V|) ケース1:。およびに対する2つのforループ:ランタイム。|E|≤|V||E|≤|V||E| \le |V|E(X)E(X)E(X)E(Y)E(Y)E(Y)≤O(|E|2)≤O(|E||V|)≤O(|E|2)≤O(|E||V|) \le \mathcal{O}(|E|^2) \le \mathcal{O}(|E||V|) ケース2:|V|≤|E||V|≤|E||V| \le |E| グラフを描く:(。エッジをから黒、赤と呼びます。(V(G),E(X)∪E(Y))(V(G),E(X)∪E(Y))(V(G),E(X) \cup E(Y))(O(|V|)+O(|2E|)))(O(|V|)+O(|2E|)))(O(|V|)+\mathcal{O}(|2E|)))E(X)E(X)E(X)E(Y)E(Y)E(Y) トポロジカルにソートします(Kahn:)。最初のレベルをにすると、エッジはレベルから高いレベルに移動します。O(|V|)+O(|E|)O(|V|)+O(|E|)\mathcal{O}(|V|) + \mathcal{O}(|E|)000 このグラフを2回描画します。 最初のコピーで、偶数レベルで始まるすべての赤いエッジと奇数レベルで始まるすべての黒いエッジを削除します:。O(E)O(E)\mathcal{O}(E) 2番目のコピーでは、「黒の偶数」と「赤の奇数」をすべて削除します:。O(E)O(E)\mathcal{O}(E) 最初のコピーの場合: レベルすべてのノードuuu2i2i2i レベルすべてのノードvvv2i+12i+12i+1 レポートエッジ(実行時)。(u,v)(u,v)(u,v)O(V2)≤O(EV)O(V2)≤O(EV)\mathcal{O}(V^2) \le \mathcal{O}(EV) 2番目のコピーの場合: " " についても同じです。2i+12i+12i+1 報告されたノードを結合し、重複する を破棄します(グラフ表現でこれが可能であることを願っています)。O(V2)&lt;=O(EV)O(V2)&lt;=O(EV)\mathcal{O}(V^2) <= \mathcal{O}(EV) いくつかの人が私のアルゴリズムを調べて、 合ってます …


2
の定義
私は第3版のCLRSアルゴリズムのテキストを扱っています。第3章では、次で始まる漸近表記について議論を始めます。 ΘΘ\Theta表記。私は最初の定義を理解しました: Θ(g(n))={f(n)|∃c1,c2&gt;0,n0∈N:0≤c1g(n)≤f(n)≤c2g(n) ∀n≥n0}Θ(g(n))={f(n)|∃c1,c2&gt;0,n0∈N:0≤c1g(n)≤f(n)≤c2g(n) ∀n≥n0}\Theta(g(n)) = \{ f(n)\,|\, \exists\, c_1, c_2 > 0, n_0 \in \mathbb{N}: 0 \leq c_1 g(n) \leq f(n) \leq c_2 g(n)\ \ \forall n \geq n_0\} しかし、次のページのテキストには次のように書かれています: の定義 Θ(g(n))Θ(g(n))\Theta(g(n)) すべてのメンバーが f(n)∈Θ(g(n))f(n)∈Θ(g(n))f(n) \in \Theta(g(n)) 漸近的に負でない、つまり f(n)f(n)f(n) いつでも負にならない nnn十分に大きいです。(漸近的に正の関数とは、十分に大きなすべてに対して正の関数ですnnn。)したがって、関数g(n)自体は漸近的に非負でなければならず、そうでなければセット Θ(g(n))Θ(g(n))\Theta(g(n)) 空です。 関数が負である場合のセットについての最後の部分 Θ(g(n))Θ(g(n))\Theta(g(n))は空であり、正の関数の一般的な要件は混乱を招くようなものです。誰かが私にとってこの定義を明確にでき、それが何を意味するのか、例を挙げて可能であれば、それは大いに評価されます。

1
重ね合わせ計算における冗長性の除去
重ね合わせ計算で定理を証明する場合、3種類のルールを扱います。 ルールの生成:句AとBのペアから、元のペアを維持しながら新しい句Cを生成します(一般的な場合の重ね合わせなど)。 書き換えルール:句Aから新しい句Bを生成します。たとえば、等価反射性、等価因数分解。単位方程式との重ね合わせも書き換えルールとみなすことができます。 ルールの排除:包摂、トートロジーの排除などの句を削除します。 問題は、我々は、厳格な書き換えを行うことができ、第二のカテゴリーに関しては、ある置き換える新しいものと、元の句を、または私たちは、元維持しなければならないのと同様に新しいものを?等値性反射の場合、前者を実行できるように見えますが、等式因数分解と単位方程式との重ね合わせの場合、これが完全性を維持するかどうかはすぐにはわかりません。 どちらであるかを知る一般的な方法はありますか?または、それぞれのケースで実行する必要があるリストは?

3
画像のシャノンのエントロピー
画像のシャノンのエントロピー[plog(1 / p)]は、2つのピクセルまたはピクセルのグループを比較するための確率論的方法です。3x3のマトリックスを持つ画像にピクセル強度値があるとします。 1 1 2 2 3 3 4 4 5 3x3マトリックスの別の画像には、強度値を持つピクセルのグループがあります。 5 5 6 6 7 7 8 8 9 その場合、画像のシャノンのエントロピーは同じになります。この場合、エントロピー値は、実際には画像が異なるものの同じであることを示します。したがって、この手法を使用した画像マッチングは役に立ちません。監視された分類に基づくと、私はシャノンのエントロピーの訓練されたデータベースに基づいて画像を分類します、私たちはエントロピーの概念を使用して2つの画像間の類似性を見つけます。

1
文字列連結のコルモゴロフ複雑度
もしあるコルモゴロフ複雑性ストリングの、K(s)K(s)K(s)s∈{0,1}∗s∈{0,1}∗s \in \{0,1\}^* 我々は(または反証)次の文を証明することができます: 「すべての文字列非圧縮性文字列の接頭辞である。すなわちごとに文字列存在の文字列ように」? ssssssrrrK(sr)≥|sr|K(sr)≥|sr|K(sr) \geq |sr| 非常に非公式な(そしてあまり意味がない)方法で: ; 十分に大きい非圧縮文字列を選択した場合、を「使用」して、指定された文字列圧縮率を「マスク」できますか?K(r)≤|r|+O(1)K(r)≤|r|+O(1)K(r) \leq |r| + O(1)rrrO(1)O(1)O(1)sss 同様の(ただし異なる)結果は、任意の、次のようなと見つけることができますcccsssrrrK(sr)&gt;K(s)+K(r)+cK(sr)&gt;K(s)+K(r)+cK(sr) > K(s) + K(r) + c

2
入門プログラミングコースの指導に関する参考資料
新学期がもうすぐ始まるので、プログラミング入門コースの指導に関する研究に興味があります。大学のコースを改善したいのですが、そのトピックに関する科学論文を探しています。 私が見た1つの傾向は、一部の学生(小グループ)がコンピューターに興味を持っているか、すでにプログラミングの知識を持っているということです。彼らは元気でたくさん学びます。しかし、大多数の学生はプログラミングの最初のステップで苦労しています(Eclipseをセットアップするのは難しい、最初の多くのエラーなど)。これは私の見解ですか、それとも文献に記載されていますか? 学生にとって、この「最初のステップ」をプログラミングにできるだけ簡単にしたいと考えています。最初のスタートとして、「Javaでのオブジェクト指向プログラミングのアートへの優しい入門」を見つけました。

3
コンパイラーは、配列への交互アクセスを検出してメモリーにインターリーブできますか?
配列が別の方法でアクセスされるループを最適化するコンパイラを設計することは可能ですか?たとえば、次のようになります。 // int[] a,b int sum = 0; for(int i = 0; i &lt; n; i++) { sum += a[i] + b[i]; } 通常のシーケンシャルアレイ装置と、a[i]及びb[i]互いに離れメモリであってもよいです。したがって、優れたコンパイラ最適化はそれを検出しa[i]、b[i]常に「同時に」アクセスされることを検出し、インターリーブされた配列を格納します。a[0] b[0] a[1] b[1] ...つまり、1つのメモリアクセスでa[i]との両方を取得できますb[i]。

1
与えられたnセットのうち少なくともkの小さなスーパーセットを見つける
セットが与えられ、それらの和集合のサイズがます。与えられたセットのうち少なくともを含む小さなセットを作成します。nnnmmmkkknnn がある多項式よりも小さいと仮定しましょう。つまり、です。この場合、最適化問題のための効率的な(多項式)アルゴリズムがあります。mmmnnnm&lt;P(n)m&lt;P(n)m < P(n) 与えられたセットのうち少なくともを含む最小のセットを見つけます。kkknnn

1
#Pは累乗で閉じられていますか?モジュロ?
複雑度クラスは次のように定義されます#P#P\newcommand{\sharpp}{\mathsf{\#P}}\sharpp #P ={F| ∃ 多項式時間NTM M ∀ のx 。f(x )= #受け入れるM(x )}#P={f|∃ 多項式時間NTM M ∀バツ。f(バツ)=#受け入れるM⁡(バツ)}\qquad \displaystyle \sharpp = \{f \mid \exists \text{ polynomial-time NTM } M\ \forall x.\, f(x) = \#\operatorname{accept}_{M}(x)\}。 は、加算、乗算、および二項係数の下で閉じていることが知られています。停電かどうか気になっていた。たとえば、関数と別の関数が与えられます。またはg ^ {f}も\ sharpp関数であることは本当ですか? #P#P\sharpp#P#P\sharppfff#P#P\sharppgggfgfgf^{g}gfgfg^{f}#P#P\sharpp 質問に回答した後の編集です。 ( modulo)は関数ですか?関数が与えられ。次に、( modulo)は関数ですか?fffggg#P#P\sharppF PFP\newcommand{\FP}{\mathsf{FP}}\FPhhhfffhhh#P#P\sharpp


1
抽象構文ツリーを指数関数未満の時間で解析できませんか?
問題の抽象的な説明 私の見たところ、解析解除とは、ASTからトークンストリームを作成することを意味し、再度解析すると、等しいASTが生成される、つまりparse(unparse(AST)) = AST保持されるはずです。 これは、同じASTを生成する有効な解析ツリーを見つけることと同じです。 言語は、eBNFバリアントを使用した、コンテキストフリーのS属性の文法で記述されます。 したがって、アンパーサーは、すべての文法制約が保持されている通過ノードを通過する有効な「パス」を見つける必要があります。これは基本的に、文法生成規則へのASTノードの有効な割り当てを見つけることを意味します。これは一般に制約充足問題(CSP)であり、バックトラックすることにより、解析と同様に解決できます。O (eん)O(eん)O(e^n) 幸いなことに、構文解析では、GLRを使用してでこれを行うことができます(またはより適切に文法を制限します)。AST構造は文法生成規則構造に非常に近いので、実行時間が解析よりも悪い実装を見て本当に驚きました。XTextは解析にANTLRを使用し、解析解除にバックトラックを使用しています。O (ん3)O(ん3)O(n^3) ご質問 コンテキストフリーのS属性文法は、パーサーとアンパーサーが共有する必要があるすべてのものですか、それとも、たとえば、解析手法/パーサーの実装に制約がありますか? この問題は一般的にではないと感じています-天才がこれを手伝ってくれるでしょうか?O (eん)O(eん)O(e^n) StackOverflowでこの質問に対する回答を受け取りませんでした。ここで質問することを提案されましたが、私は冗長性が嫌いなので、ここで回答するように頼むことを許してくれるといいのですが。

1
セットパッキングと同様の問題
セットのファミリーに電話する F={S1,…,Sk}F={S1,…,Sk}\mathcal{F} = \{S_1, \dotsc, S_k\} 各セットの場合「多様」 Si∈FSi∈FS_i \in \mathcal{F}少なくとも1つの一意の要素があります。最大の多様なセットを見つけるための可能なアプローチは何ですかSSS セットの家族で FF\mathcal{F}? 1つのアプローチは、変更されたセットパッキング問題を解決することです。と思いますF={S1,…,Sk}F={S1,…,Sk}\mathcal{F}=\{S_1,\dotsc,S_k\}。しましょうKKK 要素のサブセットである K⊂⋃SiK⊂⋃SiK \subset \bigcup S_i、そして F−K={S1∖K,…,Sk∖K}F−K={S1∖K,…,Sk∖K}\mathcal{F}_{-K}=\{S_1 \setminus K,\dotsc, S_k \setminus K\}。次に、最大多様セットSSS から得られる最大の最大集合パッキングに対応 F−LF−L\mathcal{F}_{-L} どこ LLL のすべての非固有要素のセットです FF\mathcal{F}。 しかし、選択するための良いヒューリスティックは何ですか KKK?それとも、より良いアプローチがありますか?

2
決定的なforループを使用してフィボナッチ数列のn番目の項を見つけることは可能ですか?
私はJohn Zelle著の本の「Introduction to Computer Science」を使用しており、第3章(数値による計算)の最後に、おそらく決定的なforループを使用しているフィボナッチ数列のn番目の項を見つけるように求められます。構造はまだ導入されています。 これは可能ですか?思いつく限りのことを試しました。 **私はifステートメントなどを使用してそれを解決する方法を知っています。しかし、この本はまだ決定構造をカバーしていませんが、それでも私は(ユーザーから与えられた)n番目の用語を見つけるように求めてきます。これがこれまでカバーしてきたことなので、 "for"ループを使用してこれを行う方法を知っているとしか推測できません。

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