コンピュータサイエンス

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

1
取る一連の問題
各問題の最も効率的なアルゴリズムが取る決定問題の無限シーケンスを知っていますか? Θ(nk)Θ(nk)\Theta(n^k) 時間、場所 kkk 限りなく増加しますか? たとえば、kクリークを見つけるには、 Θ(nk)Θ(nk)\Theta(n^k)、このシーケンスは{1-clique、2-clique、3-clique、...}のようになります。しかし、おそらくk-cliqueにはより効率的なアルゴリズムがあるため、この答えは正しくありません。 編集: 時間階層定理含み(「Pは、(DTIMEに崩壊しませんnknkn^k)固定の場合 kkk")、そのようなシーケンスが存在する必要があります。 コメントでいくつかの議論の後、一般的なNP問題は良い候補ではありません。それだけかかる場合O(n)O(n)O(n) 証明書をチェックする時間(または O(nc)O(nc)O(n^c)、 どこ ccc から独立した定数です kkk)、それは P≠NPP≠NPP\neq NP

1
最小線形配置の分岐および境界
私はこのブランチとバウンドの問題を解決しようとしていますが、コストよりも優れたおおよそのコスト関数を思い付くことができませんでした。 まあ言ってみれば GGG のグラフです んnn ノード { 1 、2 、3 、... 、N }{1,2,3,…,n}\{1, 2, 3, \ldots , n\}。順列のためにfff のノードの GGG、各エッジの重み (x 、y)(x,y)(x,y) になります | f(x )− f(y)||f(x)−f(y)||f(x)-f(y)|。総重量GGGエッジの重みの合計になります。あなたは考えることができますfff のノードの再ラベル付けとして GGG、 どこ f(x )f(x)f(x) ノードの新しいラベルです バツxx。 順列を見つけようとしています fff その結果、最小総重量は GGG。 これを解決しようとすると、私が思いつくことができるのは、これまでに完了した各エッジの重みの合計であるおおよそのコスト(バックトラックツリーノードごとに)を見つけ、最小コストノードから続行することだけです。誰かがより良い近似式で私を助けてくれるかどうか疑問に思っています。

1
参照リクエスト:事前に安全性チェックを実行して、動的言語のリストの手順を最適化する
science fairプロジェクトでは、Pythonのソートルーチンの最適化を実装しました。アイデアは、各比較中に実行する必要がある安全性チェック(タイプチェックや文字幅チェックなど)をソートループの外に移動し、それらすべてを1つのパスで実行することです。次に、チェックの結果に基づいて、ポートフォリオから最適化された比較関数が選択されます。したがって、たとえば、チェックですべてのオブジェクトが同じタイプであると判断された場合、選択された比較関数は、通常必要な「オブジェクトタイプの互換性がある」チェックをスキップできます。等。 私はこれを論文として書き上げる必要があり、現在文献レビューに取り組んでいます。他の動的言語/一般的に同様の手法を説明した論文はありますか?

2
静的型チェッカーなしの完全関数型プログラミング言語
完全な関数型プログラミングをテーマとするすべての論文は、全体性を保証するために、ある種の静的型チェックを利用しています。これは、簡単にホイを検討することは、言語をチューリング完全にすることを意味します。問題は、全体の機能を保証する型付けされていない/動的に型付けされた形式はありますか? 編集する 言い換えれば、部分的な関数を構築することは不可能であり、合計関数のみを構築することを可能にする形式が存在するため、型チェッカーや終了解析のようなフィルタリングステージは必要ありません。

1
長方形の構築サイクル
固定長サイクルを構築する必要があります。これには、 x長方形の内側にコーナーが含まれます。nnnkkkwwwhhh 例: w=5h=3w=5h=3w = 5\\h=3 n=12k=6n=12k=6n = 12\\k = 6 少なくともコーナーが必要であり、コーナーの数と非コーナー要素の数は偶数である必要があることはすでにわかっています。444 次に、指数関数的な時間の複雑さで実行される再帰的アルゴリズムを記述しますが、この処理をはるかに高速に実行できるという強い思いがあります。 問題は、どの正方形がサイクルに確実に含まれるかわからないため、すべての可能性をカバーするために最初のフィールドでアルゴリズムを実行することですが、いくつかのブランチを複数回検索していることを認識しています。w2w2\frac w2 また、サイクルが存在する場合、サイクルが(0、0)のコーナーまたは(0、1)のコーナーで始まることも発見しました このことをスピードアップする方法について誰かがアイデアを持っていますか? ごきげんよう!

2
DAGにエッジを追加するとサイクルが発生するかどうかを確認する
初めに:これはプログラミングコンテストの問題ですが、進行中の問題ではありません。残念ながら、公開されていないため、このタスクへのリンクは提供できません。それは、2011年にワルシャワコンピュータサイエンススクールが主催したポーランドのローカルプログラミングコンテストの1つからのものでした。 エッジのない頂点のあるグラフと、有向エッジのリストがあります。上の番目の第番目のエッジグラフに追加されています。グラフに1秒後にサイクルが発生することを知りたい。VVV (1≤V≤5⋅105)(1≤V≤5⋅105)(1 \le V \le 5 \cdot 10^5)EEE (1≤E≤5⋅105)(1≤E≤5⋅105)(1 \le E \le 5 \cdot 10^5)iiiiii 最も明白な解決策は、各エッジを追加した後にDFSを実行することですが、時間かかります。別の解決策は、トポロジー的にソートされたグラフを維持し、エッジを追加するときに、トポロジーの順序を乱さないように配置することです。これには最大で時間かかります。私はGoogleでいくつかの調査を行いましたが、これが最速のオンラインアルゴリズムのようです。O((V+E)2)O((V+E)2)O((V + E)^2)O(V2)O(V2)O(V^2) 事前にすべてのエッジを知っているので、オフラインアルゴリズムを使用できます。私が考えることができる最速のオフラインアルゴリズムは、バイナリ検索です。番目の2番目以降のグラフにサイクルが含まれている場合、明らかに他の2番目のサイクルがあります。したがって、バイナリ検索を実行してDFS時間を実行することで最小のを見つけることができます。それぞれが時間を費やすため、このソリューションの全体の複雑さは。kkkl≥kl≥kl \ge kkkkO(logE)O(log⁡E)O(\log E)O(V+E)O(V+E)O(V + E)O((V+E)logE)O((V+E)log⁡E)O((V + E) \log E) かなり高速ですが、もっと高速なオフラインアルゴリズムはあるのでしょうか。私が考えることができる1つのことは、このエッジがグラフに追加された時間に等しい各エッジの重みを与えることです。次に、このタスクは、最小の最大エッジウェイトを持つサイクルを見つけることと同じです。それがどこにつながっているかはわかりません。

1
述語論理の有効性決定可能性問題へのPCPの削減の証明の要素を解釈する目的は何ですか?
私の質問は、2004年の本、Logic in Computer Science:Modeling and Reasoning Systems(2nd Edition)のテキストの一部に直接関連しているため、次のディスカッションのコンテキストを提供するために、Michael HuthとMark Ryanによる本を逐語的に引用する: 述語論理における妥当性の決定問題は決定不可能です。が与えられた場合、かどうかを決定するプログラムは存在しません。φφ\varphiφφ\varphi 証明:前述のように、述語論理の有効性は決定可能であり、それによって(不溶性の)Post対応問題を解決します。対応問題のインスタンス与えられた場合: 有限の空間と時間内で均一に構築できる必要があるため、すべてのインスタンスに対して、のような述語論理のいくつかの公式上記の対応問題インスタンス解がある場合に限ります。CCCs1s2。。。sks1s2...sks_1 s_2 ... s_k t1t2。。。tkt1t2...tkt_1 t_2 ... t_kφφ\varphiφφ\varphiCCC 関数シンボルとして、定数と2つの関数シンボルおよびを選択します。それぞれに1つの引数が必要です。私たちが考える空の文字列、またはワードとして、そしてとあれば、それぞれ1、象徴0との連結のためのスタンドビットのバイナリ文字列である、我々は長期的なように、そのアップをコーディングでき。このコーディングはその単語のスペルを逆にすることに注意してください。これらの数式を読みやすくするために、ような用語を。eeef0f0f_0f1f1f_1eeef0f0f_0f1f1f_1b1b2。。。blb1b2...blb_1 b_2 ... b_lfbl(fbl−1。。。(fb2(fb1(e)))。。。)fbl(fbl−1...(fb2(fb1(e)))...)f_{b_l}(f_{b_{l−1}}...(f_{b_2}(f_{b_1}(e)))...)fbl(fbl−1。。。(fb2(fb1(t)))。。。)fbl(fbl−1...(fb2(fb1(t)))...)f_{b_l}(f_{b_{l−1}}...(f_{b_2}(f_{b_1}(t)))...)fb1b2。。。bl(t)fb1b2...bl(t)f_{{b_1}{b_2}...{b_l}}(t) また、2つの引数を期待する述語記号も必要です。意図した意味は、が表す用語であるようなインデックスシーケンスがあることですおよびは。したがって、はと同じインデックスのシーケンスを使用して文字列を作成します。だけが使用するのに対し、は使用し。PPPP(s、t)P(s,t)P(s,t)(私1、私2、。。。、私メートル)(i1,i2,...,im)(i_1,i_2,...,i_m)ssss私1s私2。。。s私メートルsi1si2...sims_{i_1} s_{i_2}...s_{i_m}tttt私1t私2。。。t私メートルti1ti2...timt_{i_1} t_{i_2}...t_{i_m}ssstttssss私sis_itttt私tit_i 私たちの文は粗い構造 where where setφφ\varphiφ1∧φ2⟹φ3φ1∧φ2⟹φ3\varphi_1 \wedge \varphi_2 \implies \varphi_3 φ1def=k⋀私=1P(fs私(e)、ft私(e))φ1=def⋀i=1kP(fsi(e),fti(e))\varphi_1 \stackrel{def}{=} \bigwedge\limits_{i=1}^k P\left(f_{s_i}(e),f_{t_i}(e)\right) φ2def=∀v、wP(v、w)→k⋀私=1P(fs私(v)、ft私(w))φ2=de f∀ V 、WP(v 、w )→⋀i = 1kP(fs私(v )、ft私(w ))\varphi_2 \stackrel{def}{=} …

1
長方形包含階層DAGの推移的な削減
私は、長方形包含階層DAGの推移的な削減を見つけるためのアルゴリズムを探しています。つまり、最初の長方形に2番目の長方形が含まれている場合、1つの長方形から別の長方形への有向エッジが存在します。O(|V|+|E|)O(|V|+|E|)O(|V| + |E|) つまり、できるだけ多くのエッジを削除して、uからvに到達できた場合、任意のvとuについて、エッジを削除した後でも到達できるようにします。 四角形は一意であると想定して、DAGを処理します。 これは、たとえば、Srikant / Agrawal 1996からの量的相関ルールマイニングで役立ちます。ここでは、超矩形の祖先に関心があります。近い祖先を決定することは、近い子孫を決定することに似ています。この種のルールマイニングは、Agrawal / Srikant 1994による標準(つまり「ブール」)相関ルールマイニングのAPRIORIアルゴリズムに関連しています。 同様の問題は、標準のDAGの推移的な削減です。これは次のとおり です。DAGの推移的な削減 参考文献 Agrawal、Srikant-相関ルールをマイニングするための高速アルゴリズム(1994) Agrikal、Srikant-大規模なリレーショナルテーブルでの量的相関ルールのマイニング(1996)

1
結果
我々が知っている等価であり、多項式階層に崩壊番目のレベル。PP=RP,coPP=coRP,PP=coPP=coRP=RP=ZPP=BPP⊆P/polyPP=RP,coPP=coRP,PP=coPP=coRP=RP=ZPP=BPP⊆P/poly\mathsf{PP=RP},\mathsf{coPP=coRP},\mathsf{PP=coPP=coRP=RP=ZPP=BPP\subseteq P/poly}222 他の自明でない崩壊と結果は何ですか?

1
nセットの2つのセットを指定:移動距離の合計を最小化
2セット S、TS、TS, T それぞれの んんn内のポイント、私は全単射を見つけたい、は最小化され、はユークリッド距離。RkRk\mathbb{R}^ka :S→ Ta:S→Ta : S \rightarrow TΣS ∈ Sd(s 、a (s ))Σs∈Sd(s、a(s))\sum_{s \in S} d(s, a(s))ddd この輸送問題はアースムーバーの距離問題の特殊なケースであることは承知していますが、重み付けされていない(ポイントを超えている)ため、3次ハンガリー方式よりも効率的なアルゴリズムがあるかどうか疑問に思っています。

1
クリティカルエッジを分割すると便利なのはいつですか?
一部のコンパイラには、制御フローグラフの重要なエッジを分割するユーティリティ関数があります。これはそれ自体最適化としてではなく、他の分析と変換を単純化するために行われていると思います。クリティカルエッジの分割が役立つのはどのような場合ですか?

3
特定の言語の規則性を証明する
私はこの問題をこの1時間ほどいじっていて、信じられないほど困惑しています。 レッツA={0ku0k∣k≥1 and u∈Σ∗}A={0ku0k∣k≥1 and u∈Σ∗}A = \{\; 0^ku0^k \mid k ≥ 1 \text{ and }u ∈ Σ^*\;\}。ことを示しAAA規則的です。 この言語は明らかにパンピング補題を満たしていますが、それは規則性を決定付けるものではありません。この言語が正規であることをいったいどのように証明しますか?私はすべての通常の方法(閉ざされているなど)を知っていますが、私が一生続けるには適切な条件を理解することができません。

2
私たちはより良いことができますか
この質問に対する答えは「いいえ」であると、私は(愚かにも判明しました)確信しています。なぜ私は尋ねるのですか? それは、EPFLの並列プログラミングコースのAleksandar Prokopec博士が、さまざまな特性を主張するデータ構造を導入しているためです。これらの特性は保持している場合、そうです、私により良いでバランスの取れたバイナリツリーを構築することが可能でなければならないこと時間。O ( nログn )O(んログ⁡ん)O(n\log n) 私はこれを信じていないので、私の考えのどこに欠陥があるのだろうと思います。 データ構造は、conc-treeリストです。標準形式では、通常のバイナリツリーのように見えconcat、ノードの左右のサブツリーの高さが2以上異なることがないことを保証する操作が付属しています。予想通りconcat、複雑さはです。O (ログn )O(ログ⁡ん)O(\log n) しかし、リストと呼ばれるコンクツリーリストのビルダーバリアントがありAppendます。このバリアントは、複数のサブツリーで一時的な高さの違いを可能にします。このバリアントでは、償却済み時間の追加が要求されます。O (1 )O(1)O(1) そのため、要素を追加すると複雑さが必要になるようです。んんnO (n )O(ん)O(n) ただし、このバリアントの特徴は、が2の累乗であるときは常に、完全にバランスのとれた二分木(これまでに挿入されたすべての要素を含む)になることです。したがって、一時的な不均衡は許容されますが、ツリーは2挿入のすべてのパワーで均衡になります。んんn このバリアントでは、ノードと呼ばれる新しいクラスのノードAppendが導入され、サブツリーの高さが1つ以上異なることが許可されているノードです。ただし、挿入ごとに、このような一時ノードはすべて削除されます。2k2k2^k Wikipediaのページのページは、(基本的なデータ構造の記述と見かなり簡潔なアルゴリズムを説明しappend、特定のメソッドを)。 したがって、が2の累乗の場合、要素を挿入するためのコストはあり、バランスのとれたバイナリツリーを構築しました。またはそうです。んんnO (n )O(ん)O(n) で別の質問私は、特定の値のためのアルゴリズムのためのステップ数を述べることができる場合、私は効果的に」尋ねのために例えば、、整数である、私は複雑さを述べるできるようにするには、この十分ですすべての値?」んんnn =2kん=2kn = 2^kkkkんんn Yuval Filmusの答えから、答えは「いいえ」であることがわかりますが、「多くの場合、はで単調であると予想されます。その場合、控除は成立します。」TTTんんn したがって、この場合、要素の挿入に複雑さあり、要素ごとに平衡バイナリツリーがある場合、このコンクツリーバリアントアプローチで平衡バイナリツリーを構築するコストは。んんnO (n)O(ん)O(n)2k2k2^kO (n )O(ん)O(n) ここで何が問題になっていますか?正直に言うと、このバリアントに対して要求された償却済み追加時間がわかりません。多くの場合、挿入にはコストがかかりますが、一時ノードで何が起こっているかを見ると、全体的な挿入コストは償却されたように見え。O (1 )O(1)O(1)O (1 )O(1)O(1)AppendO (ログん)O(ログ⁡ん)O(\log n) これが当てはまる場合、バランスの取れたバイナリツリーを構築すると、驚くほどのコストがかかります。O (nログn )O(んログ⁡ん)O(n\log n) 長い質問で申し訳ありませんが、問題のアルゴリズムについて詳しく説明していません。代わりに、ウィキペディアを見回してください。

2
意味保存の健全性(または正確性)または完全性
用語をある言語から別の言語に変換する場合、直感的に望ましいプロパティは、セマンティクスの保持です(たとえば、ここではCPS変換に使用されます)。 s⇓v⟹c(s)⇓c(v)s⇓v⟹c(s)⇓c(v) s \Downarrow v \implies c(s) \Downarrow c(v) しかし、これを古典的な用語の正しさ(または健全性)と論理システムの完全性と一致させることで、少し問題があります。通常、私は上記のステートメントをの完全性プロパティと見なし(正しさの定義を逆にします)。ccc ただし、直感的には、コンパイラーは完全ではなく正しいはずです(たとえば、型チェックは正しいプログラムを除外することが多いため)。上記の文の逆は、が単射である場合にのみ当てはまります。たとえば、ソース言語にブールとその演算が含まれていて、コンパイルでChurch-encodingを使用して置き換えられた場合、ターゲット言語はブールリテラルからコンパイルされた用語のブール演算を評価できます。ソース言語が評価できないラムダ抽象化。ccc 上記のステートメントがの完全性プロパティであると仮定するのは正しいのでしょうか?ccc 私はまた、非単射コンパイラは通常正しくないという私の結論で正しいのでしょうか?


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