コンピュータサイエンス

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

2
DOUBLE-SATがNP完全であることの証明
参考のために、よく知られているSAT問題をここで定義します。 DOUBLE-SAT問題は次のように定義されます DOUBLE-SAT={⟨ϕ⟩∣ϕ has at least two satisfying assignments}DOUBLE-SAT={⟨ϕ⟩∣ϕ has at least two satisfying assignments}\qquad \mathsf{DOUBLE\text{-}SAT} = \{\langle\phi\rangle \mid \phi \text{ has at least two satisfying assignments}\} NP完全であることをどのように証明しますか? 証明する方法は複数あります。

2
動的プログラミングを使用して再帰アルゴリズムの時間の複雑さを軽減できるのはいつですか?
動的プログラミングは、再帰アルゴリズムの実行に必要な時間を短縮できます。動的プログラミングは、アルゴリズムの時間の複雑さを軽減するのに役立つことを知っています。再帰的アルゴリズムで満たされた場合、動的計画法を使用するとアルゴリズムの時間の複雑さが軽減されるという一般的な条件はありますか?動的プログラミングはいつ使用する必要がありますか?

4
巡回セールスマン問題に適用されたダイスクトラのアルゴリズム
私は初心者(計算複雑性理論の初心者)で、質問があります。 「巡回セールスマン問題」があるとしましょう。ダイクストラのアルゴリズムの次のアプリケーションはそれを解決しますか? 開始点から、2点間の最短距離を計算します。ポイントに行きます。ソースポイントを削除します。次に、現在のポイントから次の最短距離ポイントを計算します... 次の利用可能な最短距離ポイントを移動しながら、すべてのステップでグラフを小さくします。すべてのポイントを訪問するまで。 これは巡回セールスマンの問題を解決しますか。

3
消費電力をキャプチャできる抽象的なマシンはありますか?
アルゴリズムのアルゴリズムの複雑さを報告するとき、基礎となる計算は、最新のCPUに近い抽象的なマシン(RAMなど)で実行されると想定します。このようなモデルにより、アルゴリズムの時間と空間の複雑さを報告できます。さて、GPGPUの普及により、消費電力も考慮することができるよく知られたモデルがあるかどうか疑問に思います。 GPUはかなりの量の電力を消費することがよく知られており、特定の命令は、その複雑さと洗練されたチップ上の位置に基づいて、異なるカテゴリの電力消費に分類されます。したがって、指示のエネルギーは、エネルギーの観点から、単位(または固定)のコストではありません。取るに足らない拡張は、操作コストに重みを割り当てることですが、操作/命令がエネルギーの一定でない単位、たとえば多項式量(またはさらに複雑な例:開始から経過した時間の関数)を要する強力なモデルを探していますアルゴリズムの;または、冷却システムの故障の可能性を考慮して、チップを加熱し、クロック周波数を遅くするなど) 自明ではないコストと障害を組み込むことができるようなモデルはありますか?

1
CoqのSetとTypeの違いは何ですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、コンピューターサイエンススタック交換のトピックになるようにします。 2年前に閉店。 AFAIU型は、Setその要素がプログラムである、またはproposition要素が証明であるにすることができます。したがって、この理解に基づいて: Inductive prod (X Y: Type) : Set := | pair: X -> Y -> prod X Y. 次のコードはコンパイルされるはずですが、次のエラーが原因ではありません。私が変更された場合SetにType、または他TypeとのSetそれは罰金をコンパイルします。誰かが次のエラーの意味を理解するのを手伝ってくれる?Software Foundationsの本を使ってCoqを教えようとしています。 エラー: Error: Large non-propositional inductive types must be in Type.

2
行列連鎖の乗算とべき乗
それぞれ1000 × 2と2 × 1000の次元の2つの行列とBがあり、(A B )5000を計算する場合、最初に式をA (B A )4999 Bとして書き換えてから、A Bは1000 × 1000の次元ですが、B Aは2 × 2の次元であるため、数値的に評価します。AAABBB1000×21000×21000\times22×10002×10002\times1000(AB)5000(AB)5000(AB)^{5000}A(BA)4999BA(BA)4999BA(BA)^{4999}BABABAB1000×10001000×10001000\times1000BABABA2×22×22\times2 この問題の一般化されたバージョンを解決したいと思います。以下を含む式を最適化するための合理的な効率的なアルゴリズム(ブルートフォースではない)はありますか? 既知の次元の自由行列変数 任意の部分式の積 自然な力に引き上げられた任意の部分式 ...フリーマトリックス変数を具体的なマトリックス値で置き換えた後、数値的に評価するのに必要な作業が最小になるようにするには? 行列チェーン乗算問題は私の問題の特殊なケースです。 編集: これは暫定的な答えです。直感的には正しいようですが、それが正しいことを証明するものはありません。それが正しいことが判明した場合でも、証明に興味があります。(もちろん、正しくない場合は修正してください。) などのべき乗されたすべての積について、因子のすべての巡回置換を検討します。(A1A2…Ak)n(A1A2…Ak)n(A_1 A_2 \ldots A_k)^n (A1A2…Ak)n(A1A2…Ak)n(A_1 A_2 \ldots A_k)^n A1(A2…AkA1)n−1A2…AkA1(A2…AkA1)n−1A2…AkA_1 (A_2 \ldots A_k A_1)^{n-1} A_2 \ldots A_k A1A2(A3…AkA1A2)n−1A3…AkA1A2(A3…AkA1A2)n−1A3…AkA_1 A_2 (A_3 \ldots A_k A_1 A_2)^{n-1} A_3 \ldots …

1
ビッグO表記でチルドとはどういう意味ですか?
私は論文を読んでいて、その時間の複雑さの説明で、時間の複雑さはであると述べています。O~(22n)O~(22n)\tilde{O}(2^{2n}) 私はインターネットとウィキペディアを検索しましたが、このティルダがbig-O / Landau表記で何を示しているのかわかりません。論文自体では、これについての手掛かりも見つかりませんでした。何をしない意味ですか?O~(⋅)O~(⋅)\tilde{O}(\cdot)

2
PTAS定義とFPTAS
私が読んだものから preliminary version of a chapter of the book “Lectures on Scheduling” edited by R.H. M¨ohring, C.N. Potts, A.S. Schulz, G.J. Woeginger, L.A. Wolsey, to appear around 2011 A.D. これはPTASの定義です。 問題の多項式時間近似スキーム(PTAS)は、時間サイズが入力サイズで多項式である近似スキームです。XXX およびFPTASの定義 問題の完全多項式時間近似スキーム(FPTAS) は、時間の複雑さが入力サイズの多項式であり、1 /多項式でもある近似スキームです。XXXϵϵ\epsilon それから作家は言う: したがって、PTASの場合、に比例する時間の複雑さを許容できます入力サイズです。ただし、この時間の複雑さは指数関数的です。FPTASは指数関数的に増加する時間の複雑さを持つことはできませんが、比例する時間の複雑さは問題ありません。最悪の場合の近似に関して、FPTASは、NP困難な問題に対して導出できる最も強力な結果です。|I|1/ϵ|I|1/ϵ|I|^{1/\epsilon}|I||I||I|1/ϵ1/ϵ1/\epsilon1/ϵ1/ϵ1/\epsilon|I|8/ϵ3|I|8/ϵ3|I|^8/\epsilon^3 次に、次の図を提案して、問題のクラス間の関係を示します。 これが私の質問です: PTASとFPTASの定義、どのライターがあると結論んFPTASが指数関数的に成長する時間複雑持つことはできません?そして、それがそのような時間の複雑さを持つことができるならば、それはどんな違いを作りますか?1/ϵ1/ϵ1/\epsilon 時間複雑さのようなのために許容可能であるFPTASそれがためではないPTAS、なぜFPTASはのサブセットであると考えられるPTAS?(n+1/ϵ)3(n+1/ϵ)3(n+1/\epsilon)^3 彼の意味:FPTASは、NP困難な問題について導出できる最も強力な結果です。 全体として、これらが概念に対して正確に何を意味するか、そしてそれらの明確な特性は何かを知りたいのです。 前もって感謝します。

1
GPGPUがある場合、なぜSIMDを使用するのですか?
この質問はStack ExchangeのCSの部分でより適切に処理されると思いました。CUDAやOpenCLなどの言語を使用するGPGPUができたので、マルチメディアSIMD拡張機能(SSE / AVX / NEON)はまだ目的を果たしていますか? 最近、SSE命令を使用してソートネットワークを加速する方法についての記事を読みました。私はこれはかなりきちんとしていると思いましたが、私のcomp arch教授に言ったとき、彼は笑い、GPUで同様のコードを実行するとSIMDバージョンを破壊すると言った。SSEは非常にシンプルで、GPUはより多くの並列処理を備えた大規模で複雑なアクセラレーターであるため、これは疑いありませんが、マルチメディアSIMD拡張機能がGPUを使用するよりも便利なシナリオはたくさんありますか? GPGPUがSIMDを冗長にする場合、インテルはなぜSIMDサポートを増やすのですか?SSEは128ビットでしたが、AVXでは256ビットになり、来年は512ビットになります。GPGPUがデータ並列処理を備えたより優れた処理コードである場合、インテルはなぜこれらのSIMD拡張機能をプッシュするのですか?それらは、同等のリソース(研究と領域)をより大きなキャッシュと分岐予測子に入れることができ、それによりシリアルパフォーマンスが向上します。 GPGPUではなくSIMDを使用する理由

5
将来の量子コンピューターは、2進数、3進数、または4進数の数値システムを使用しますか?
現在のコンピュータはビットを使用しているため、2進数システムを使用しています。しかし、将来の量子コンピュータは単純なビットの代わりにキュービットを使用すると聞いています。 「qubit」という言葉には「bi」という言葉があるので、私は最初に、これは量子コンピュータがバイナリ(base 2)を使用することを意味すると考えました。 しかし、その後、キュービットには3つの可能な状態があると聞きました。0、1、または0と1の重ね合わせです。そのため、これは3値(ベース3)を使用することを意味しているに違いないと考えました。 しかし、1キュビットで2ビットと同じだけの情報を保持できることがわかりました。だから、おそらくこれは彼らが第四級(ベース4)を使うことを意味していると思いました。 それでは、将来の量子コンピュータが使用する数値システムは、2進数、3進数、または4進数ですか?

4
なぜ正規表現に順列がないのですか?(通常の言語でこれができるように見えても)
問題 正規表現で順列を取得する簡単な方法はありません。 順列:数または文字の種類を変更せずに、単語 ( "aabc")を別の順序に取得する。w=x1…xnw=バツ1…バツんw=x_1…x_n 正規表現:正規表現。 確認のため: 「繰り返しのない正規表現順列」答えは、これがより単純であると仮定して、正規表現の代わりにJavaScriptコードを作成します。 「特定のテキスト内の特定の単語のすべての順列を見つける方法」 –答えは正規表現も使用していません。 「すべての{1、2、3、4}を繰り返しなしで照合するための正規表現」 –答えは正規表現を使用しますが、適応可能でも単純でもありません。 この答えはさらに、「正規表現はあなたが望んでいることを実行できません。文字列から順列を生成することはできません」と主張します。 私が探しているソリューションの種類 それは次のような形式でなければなりません: »aabc«(またはその他の開始括弧と終了括弧を使用できます) (aabc)!((abc)に似ていますが、最後に別の記号が付いています) [aabc]!([abc] +に似ていますが、最後に別の記号が付いています) これらのソリューションの利点 彼らです: 簡単 適応可能 再利用可能 これが存在する理由 正規表現は、通常の言語の文法を記述する方法です。彼らはあらゆる種類の通常の言語であるための全力を持っています。 通常の言語は順列に対して十分強力であるとしましょう(以下の証明)–これを表現する簡単な方法がないのはなぜですか? だから私の質問は: (なぜ)私の証拠は間違っていますか? それが正しい場合:順列を表現する簡単な方法がないのはなぜですか? の証拠 正規表現は、正規言語の文法に注意する1つの方法です。通常の言語の文法を記述できます。 通常の言語(アルファベット内の文字数が有限)を説明する別の方法は、(状態の数が有限の)非決定的オートマトンです。 文字数に制限があるため、このオートマトンを作成できます(例:正式:下記を参照) 「abbc」の順列を受け入れる文法: (上の数字を求めてください、おそらく誰かがこの部分をより見栄えよくする方法を知っています) s->ah¹ s->bh² s->ch³ h¹->bh¹¹ h¹->ch¹² h²->ah¹¹(タイプミスなし!同等) h²->bh²² h²->ch²³ h³->ah¹² h³->bh²³ h¹¹-> bc h¹¹-> cb …

2
演算子の左関連付けを維持しながら、文法の左再帰を削除する
この演習に問題があります: λ計算の次のあいまいな文法をGとします。 E → v | λv.E | EE | (E) ここで、Eは単一の非終端記号、λv.EはEの変数vに関する抽象化を表し、EEはアプリケーションを表します。 L(G ')= L(G)となるようなLL(1)文法G'を定義し、次の通常の規則を課すことでGのあいまいさを解決します。 抽象化は正しい連想です。 アプリケーションは関連付けられたままです。 アプリケーションは、抽象化よりも優先されます。 G 'のLL(1)解析テーブルと、文字列の解析時に取得された解析ツリーを表示しますλv1. λv2. v1v2v1。 あいまいさの設定の優先順位と関連付けを排除し、次の文法を取得しました。 E -> EF | F F -> λv.G | G G -> (E) | v これはLL(1)ではありません。これは、生成E -> EFが再帰的に行われるためです。しかし、私が得るその生産から左再帰を排除します: E -> FE¹ E¹-> FE¹ | ɛ F -> …

2
MIN-2-XOR-SATおよびMAX-2-XOR-SAT:それらはNPハードですか?
との複雑さはどのですか?彼らはPですか?それらはNPハードですか?MIN-2-XOR-SATMIN-2-XOR-SAT\text{MIN-2-XOR-SAT}MAX-2-XOR-SATMAX-2-XOR-SAT\text{MAX-2-XOR-SAT} これをより正確に定式化するには、 Φ ( x)= ∧ん私C私、Φ(バツ)=∧私んC私、\Phi\left(\mathbf x\right)={\huge\wedge}_{i}^{n}C_i, ここで、あり、各節の形式はまたはです。x =( x1、… 、xメートル)バツ=(バツ1、…、バツメートル)\mathbf{x} = (x_1,\dots,x_m)C私C私C_i(x私⊕ Xj)(バツ私⊕バツj)(x_i \oplus x_j)(x私⊕ ¬ Xj)(バツ私⊕¬バツj)(x_i \oplus \neg x_j) 問題がに割り当て見出すことであるを満たすこと。この問題は、線形方程式modシステムに対応するため、にあります。2-XOR-SAT2-XOR-SAT\text{2-XOR-SAT}バツバツ\mathbf{x}ΦΦ\PhiPPP222 問題がに割り当て見出すことである満たされる節の数を最大にします。問題がに割り当て見出すことである満たされる節の数を最小限に抑えます。これらの問題の複雑さは何ですか?MAX-2-XOR-SATMAX-2-XOR-SAT\text{MAX-2-XOR-SAT}バツバツ\mathbf{x}MIN-2-XOR-SATMIN-2-XOR-SAT\text{MIN-2-XOR-SAT}バツバツ\mathbf{x} MINまたはMAX-True-2-XOR-SAT NP-hardに触発されていますか?

2
NP完全問題は、最大でも多項式空間を使用して解決できます(ただし、指数時間を使用している場合)。
NPCとPSPACEとの関係について読み、最悪の場合の多項式空間要件を持つアルゴリズムを使用してNPC問題を決定論的に解決できるかどうかを知りたいのですが、潜在的に指数時間(2 ^ P(n)ここでPは多項式)を取ります。 さらに、一般的にEXPTIMEに一般化できますか? 私がこれを求めている理由は、NPC問題の縮退したケースを解決するためのプログラムを書いたためであり、ハードインスタンスのために非常に大量のRAMを消費する可能性があり、より良い方法があるのだろうか?参照については、https://fc-solve.shlomifish.org/faq.htmlを参照してください。

3
コードブロックを定義するためにインデントを使用しているPythonと前身以外のプログラミング言語はどれですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Computer Science Stack Exchangeで話題になるようにします。 9か月前に閉鎖されました。 Pythonは、コードブロックを構文的に定義するためにインデントを使用することで有名です。(Python言語リファレンスの複合ステートメントを参照してください)。Pythonを何年も使用した後も、この構文機能に興味を持ち、非常に気に入っています。 しかし、私は疑問に思います:Pythonとその「前身」(*)言語ABC は別として、コードブロックの定義にインデントを使用する他のプログラミング言語がありますか?コードブロックとは、ここでは「何らかの方法で1つのコンポーネントとして扱われる複数のステートメント」を意味します。 私は特に実用的なプログラミング言語に興味がありますが、難解な言語にも言及する価値があります。 (*): " Predecessor "は、ここでより良い単語を知るというデフォルトの単語の選択です。グイド・ヴァンロッサム、パイソンの作成者は、PythonとABCに関するインデントとの関係を説明したインタビューで、このような「グループ化するためのインデントの選択は、Pythonで新しい概念ではありませんでした。私はABCからこれを継承しました。」

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