コンピュータサイエンス

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

3
なぜ正規表現は共用体、連結、スター演算で定義されているのですか?
定期expresssionは再帰的に定義されます いくつかのために、A ∈ Σは、正規表現ですaaaa∈Σa∈Σa \in \Sigma は正規表現です。εε\varepsilon は正規表現です。∅∅\emptyset ここで、 R 1及び R 2は、正規表現では、正規表現であります(R1∪R2)(R1∪R2)(R_1 \cup R_2)R1R1R_1R2R2R_2 ここで、 R 1及び R 2は、正規表現では、正規表現であります(R1∘R2)(R1∘R2)(R_1 \circ R_2)R1R1R_1R2R2R_2 ここで、 R 1は正規表現であり、正規表現です。(R1)∗(R1)∗(R_1)^*R1R1R_1 この定義は、64ページの シプサー、マイケル。計算理論入門、第3版。Cengage Learning、2012年。 さて、以下の質問です。 定義にintersection、complementまたはreverse操作が含まれていないのはなぜですか? 我々は4番目の項目を変更する場合は、私たちはそれぞれの正規言語のために、すなわち、同等の定義を得るのですか、修正正規表現とその逆はありますか?R1∩ R2R1∩R2R_1 \cap R_2 この定義が完全かつ明確に定義されていることを知っていますが、他の同等の明確に定義された完全な定義よりもなぜ好ましいのですか?



4
なぜ抽象化と速度を犠牲にする必要があるのですか?
高水準言語が速度の点で低水準言語に到達できないように見えるのはなぜですか?高水準言語の例としては、Python、Haskell、Javaがあります。低レベル言語を定義するのは難しいですが、Cを例に考えてみましょう。比較はインターネット1のいたるところにあり、Cの方がはるかに高速で、時には10倍以上であることに同意しています。11^1 そのようなパフォーマンスの大きな違いを引き起こすのは何ですか?なぜ高級言語が追い付かないのですか? 最初はこれがすべてのコンパイラーの責任であり、将来的には改善されると信じていましたが、最も人気のある高水準言語のいくつかは何十年も前から存在しており、速度に関してはまだ遅れています。C構文ツリーと同様にコンパイルして、マシンコードを生成する同じ手順を実行することはできませんか?それとも構文自体に関係があるのでしょうか? 例:11^1 コンピュータ言語ベンチマークゲーム ジュリアのベンチマークページ

1
パターンデータベースへのインデックス作成-Korfの最適ルービックキューブソリューション
楽しいプロジェクトとして、Richard KorfのC#実装-パターンデータベースを使用したルービックキューブの最適解の検索に取り組んでいます。 https://www.cs.princeton.edu/courses/archive/fall06/cos402/papers/korfrubik.pdf 私は実際にそれを働いています、私は私のソリューションを改善しようとしています。 Korfが彼の論文で注目していることの1つは、パターンデータベースに格納してインデックスを付ける方法です。理想的には、ルービックキューブのインスタンスを使用して配列へのインデックスを生成したいと思います。 私の質問は、このインデックスを生成する最良の方法についてです。 私の解決策は、最小限の完全なハッシュを生成することです。これには、パターンデータベース全体が見つかるまですべてのキューブをメモリに保持し、それに基づいて最小限の完全なハッシュを生成することが含まれます。MPHの実行には、パターンデータベースのサイズに応じて数時間かかりますが、ディスクに保存するので、一度だけ実行する必要があります。結局、MPHだけを格納しているキューブ自体を捨てることができます。このようにして、ランダム化されたルービックキューブを取得し、パターンを適用してから、MPHで配列のインデックスを調べて、解の長さの見積もりを取得します。 KorfとShultzは、「Large Scale Breadth-First Search」と呼ばれる2005年の論文でキューブのインデックスを決定するためのより良い方法を説明していると思います。 https://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf このペーパーでは、順列の辞書式順序に基づいてインデックスを生成するアルゴリズムについて説明します。基本的に、順列{1、2、3}を取得し、それがインデックス0で最小であることを計算できます。{1、3、2}は、次のインデックス1などです。 このアルゴリズムをルービックキューブに適用してパターンデータベース内のインデックスを取得できるように思えますが、実際にどのように機能するかを理解するのに苦労しています。 たとえば、コーナーのみのパターンデータベースには、エッジステッカーが外されたすべてのルービックキューブが含まれています。このセットには正確に88,179,840のキューブがあります。ルービックキューブのコーナーキューブは、24の異なる状態のいずれかになります。8番目のコーナーキューブの状態は他の7つに基づいて計算できるため、コーナーのみのパターンデータベースのキューブはそれぞれ0〜23の7つの値を持っています。 たとえば、{0、3、6、9、9、12、15、18、21}は、すべてのエッジステッカーが削除された「解決済み」キューブを定義します。 前面を90度回転すると、順列は{0、3、11、23、12、15、8、20}になります。 これらの種類の順列からインデックスを取得する方法はありますか?

3
量子コンピューターが古典的なコンピューターよりも効率的であるという証拠はありますか?
ショアーのアルゴリズムはしばしば引数として使用されます。因数分解の問題は、古典的なコンピューターの既知のアルゴリズムよりも速く解決できます。それでも、古典的なコンピューターが整数を効率的に因数分解できないことの証明はありません。 古典的なコンピュータよりも速くいくつかの問題を解決できる実際の証明量子コンピュータはありますか?

3
抽象データ型とオブジェクトの違いは何ですか?
Programmers.SEの答えは、クック(エッセイ特徴づけるオブジェクトはのADTではありませんが言うように) オブジェクトは、代数としてではなく、型の値に対する特性関数のように動作します。オブジェクトは型の抽象化ではなく手続き型の抽​​象化を使用します ADTは通常、プログラム内で固有の実装を持っています。言語にモジュールがある場合、ADTの複数の実装を持つことは可能ですが、それらは通常相互運用できません。 クックのエッセイでは、クックの論文で使用されているセットの特定の例では、オブジェクトは特徴的な関数と見なすことができるように思えます。オブジェクトは、一般的に特徴的な機能と見なすことはできないと思います。 また、Aldritchの論文相互運用性の力:なぜオブジェクトが避けられないのか ¹が示唆する クックの定義は、本質的に動的ディスパッチをオブジェクトの最も重要な特性として識別します これとアランケイが彼が言ったときに同意する 私にとってのOOPとは、メッセージング、ローカルでの保持と状態プロセスの保護と非表示、およびすべてのものの極端な遅延バインディングのみを意味します。 ただし、Aldritchの論文に対するこれらの関連する講義スライドでは、Java クラスはADTであり、Javaインターフェースはオブジェクトであることが示唆されています。実際、インターフェース「オブジェクト」を使用すると相互運用できます(上記の箇条書きのいずれかで示されるOOPの主要機能の1つ) )。 私の質問は 特徴的な関数はオブジェクトの主要な特徴ではなく、フランクシアラーは誤解していると私は言いますか? 動的ディスパッチを使用していなくても、Javaインターフェースを介して互いに通信するデータはオブジェクトの例ですか?どうして?(私の理解は、動的ディスパッチの方がより柔軟であり、そのインターフェースは、objective-C / smalltalk / erlangスタイルのメッセージングに向けたステップであることです。) 依存関係の逆転の原則の考え方は、ADTとオブジェクトの区別に関連していますか?(WikipediaのページまたはThe Talking Objects:A Tale About Message-Oriented Programmingを参照してください)私はこの概念に不慣れですが、プログラムの「レイヤー」間にインターフェースを追加することを含むことを理解しています(Wikipediaのページ図を参照)。 必要に応じて、オブジェクトとADTの違いの他の例/説明を提供してください。 ¹ (2013年発行)本論文では、読みやすいですし、Javaの例でクックの2009年の論文をまとめたものです。この質問に答えるのではなく、少なくともそれを流し読みすることを強くお勧めします。

1
デカルト積による有限デカルト積のサブセットの最小カバーの検索
2つの有限集合のデカルト積のサブセットが与えられた場合、デカルト積そのものであるセットによる最小のカバーを見つけたいと思います。私× JI×JI \times J 例えば、との積所与およびJ = { 1 、2 、3 }、Iは、サブセット観察することができる{ (A 、2 )、(B 、3 )、(B 、2 )}そして、最小数のデカルト積でそれをカバーしようとします。私= { A 、B 、C}I={A,B,C}I=\{A,B,C\}J= { 1 、2 、3 }J={1,2,3}J=\{1,2,3\}{ (A 、2 )、(B 、3 )、(B 、2 )}{(A,2),(B,3),(B,2)}\{(A,2), (B,3), (B,2)\} そうするには、2つの方法があり及び{ A 、B } × { 2 } + { B } × { …

1
長方形のピースでカバーするNP硬度(Google Hash Code 2015 Test Round)
Googleハッシュコード2015テストラウンド(問題の説明)では、次の問題について尋ねられました。 入力:マークされた正方形がいくつかあるグリッド、しきい値、最大面積T ∈ N A ∈ NMMMT∈ NT∈NT \in \mathbb{N}A ∈ NA∈NA \in \mathbb{N} 出力:各長方形が少なくともT個のマークされた正方形を含み、各長方形が最大でAの面積を持つように、整数座標がである一連のばらばらの長方形の可能な最大の総面積。MMMTTTAAA Googleの用語では、グリッドはピザであり、マークされた正方形はハムであり、ばらばらの長方形はスライスです。 我々は明らかに、追加の入力を追加することにより、意思決定の問題にこの問題を修正してくださいすることができと答えは「総面積以上である条件を満たす互いに素長方形のセットがあること聞かせてn個の正方形が」。N ∈ Nn∈Nn \in \mathbb{N}んnn 私の質問: Googleの問題は候補者に特定のインスタンスの計算問題に対して「できるだけ良い」解決策を見つけるように求めましたが、一般的な問題(その決定の言い回し)はNP完全である可能性が高いと思います。ただし、NP硬さを示すための削減は見つかりません。(NPメンバーシップは即時です。)この問題がNP困難であることをどのように証明しますか? 問題の視覚化に役立ついくつかの例を次に示します。検討によって4グリッド{ 0 、1 、2 、3 } × { 0 、1 、2 、3 }マーク四角で、(1 、1 )、(0 、2 )及び(2 、2 )、と図式表現マークされた正方形を示すには:444444{ 0 、1 、2 、3 } × { 0 …

2
プログラム分析で最小固定小数点(lfp)が重要である理由
プログラム分析における最小不動点(lfp)の重要性についての全体像を把握しようとしています。たとえば、抽象的な解釈はlfpの存在を使用しているようです。プログラム分析に関する多くの研究論文も、不動点を見つけることに重点を置いています。 より具体的には、ウィキペディアのこの記事:Knaster-Tarski Theoremは、lfpがプログラムのセマンティクスを定義するために使用されると述べています。 どうしてそれが重要ですか?どんな簡単な例でも私を助けてくれます。(私は全体像を取得しようとしています)。 編集 私の言い回しは間違っていると思います。lfpの重要性については触れません。私の正確な質問(初心者)は:lfpの計算はプログラム分析にどのように役立ちますか?たとえば、なぜ/どのように抽象的な解釈がlfpを使用するのか?抽象ドメインにlfpがない場合はどうなりますか? うまくいけば、私の質問はより具体的になりました。

3
なぜセマフォの代わりにモニターを使うのですか?
私は現在、私の大学の同時プログラミングコースに参加しており、最近モニターの概念について話し始めました。相互排除の必要性については理解していますが、なぜモニターを使うのか分かりません。 私が理解しているように、モニターは常に1つまたはまったくプロセスがクリティカルセクションにないことを保証します。セマフォでそれを実現できます。さらに、セマフォを使用してモニターを実装します(またはモニターを実装するための少なくとも1つの可能性があります)。 では、なぜセマフォを備えたセマフォとまったく同じことを実装するのでしょうか?どのようなメリットがありますか?

4
テープがチューリングマシンの定義に含まれていないのはなぜですか?
テープ/テープがTuring Machineの正式な定義に含まれていない理由を知りました。たとえば、WikipediaのページでのTuringマシンの正式な定義について考えてみましょう。HopcroftおよびUllmanに続く定義には、有限の状態セット、テープアルファベット、空白記号、初期状態、最終状態セット、および遷移関数。どれもテープそのものではありません。ΓのB ∈ ΓのQ 0 ∈ Q F ⊆ Q δ :(Q ∖ F )× Γ → Q × Γ × { L 、R }QQQ ΓΓ\GammaB ∈ Γb∈Γb \in \Gammaq0∈ Qq0∈Qq_0\in QF⊆ QF⊆QF\subseteq Qδ:(Q ∖ F)× Γ → Q × Γ × { L 、R }δ:(Q∖F)×Γ→Q×Γ×{L、R}\delta:(Q\backslash F)\times \Gamma\rightarrow Q\times\Gamma\times\{L,R\} チューリングマシンは常にテープ上で動作すると見なされ、遷移機能はその頭の移動、シンボルの置換、状態の変化として解釈されます。それで、なぜテープはチューリングマシンの数学的定義から外されているのですか? …

1
加重されていない二部グラフの最大マッチングのサイズをどれだけ速く計算できますか?
重み付けされていない2部グラフの最大マッチングのサイズを、最大マッチングの計算よりも効率的に(たとえば、より高速に)計算する方法はありますか? ロングショットですが、このような使い捨ての計算を回避することは、多くの場合興味深い問題です。 動機 私が解決しようとしている問題は 、2つのセットのサイズが異なるmatch-2です。小さいセットのすべての頂点をカバーするマッチングがあるかどうかを確認する必要があります。最大マッチングのサイズを知ることで、それが小さいセットのサイズ以下であるかどうかを確認できます(そのようなことが可能である場合、結果が「はい」の場合は常に、小さいセットをカバーするマッチングがあります「あなたはそのサイズが何であるかを効果的に知っていますが、その場合にのみです)、しかしそれは厳密に必要ではありません:サイズを計算せずに答えを計算する方法があるならば、それは私にとって良いことです。

3
XOR関係を持つ2-SATはNP完全ですか?
「2-SAT with XOR-relations」の多項式アルゴリズムがあるかどうか疑問に思っています。2-SATとXOR-SATは両方ともPにありますが、その組み合わせですか? 入力例: 2-SATパート: (a or !b) and (b or c) and (b or d) XOR部分: (a xor b xor c xor 1) and (b xor c xor d) つまり、入力は次のブール式です。 (a∨¬b)∧(b∨c)∧(b∨d)∧(a⊕b⊕¬c)∧(b⊕c⊕d).(a∨¬b)∧(b∨c)∧(b∨d)∧(a⊕b⊕¬c)∧(b⊕c⊕d).(a \lor \neg b) \land (b \lor c) \land (b \lor d) \land (a \oplus b \oplus \neg c) …

1
量子コンピューターの方が高速なアルゴリズムの種類は何ですか?
私はCSの初心者で、アルゴリズムを学んでいます。量子コンピューターを使ったとしても、その一般的なソーティングアルゴリズムは時間を超えることはできないと聞きました。ただし、因数分解アルゴリズムがはるかに高速になることも知っています。一般的に言えば、どのようなアルゴリズムが量子コンピュータで大幅に高速になるでしょうか?nlognnlog⁡nn\log n

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