コンピュータサイエンス

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

1
一意の要素を持つリストの距離を編集
リスト間のレーベンシュタイン距離編集距離はよく研究された問題です。しかし、各リストで要素が複数回出現しないことがわかっている場合、可能な改善についてはあまり見つけることができません 。 また、要素が比較可能/ソート可能であると仮定します(ただし、比較するリストは最初からソートされていません)。 O(min(m,n)s)O(min(m,n)s)O(\min(m,n)s)O(min(s,m,n)s)O(min(s,m,n)s)O(\min(s,m,n)s)sss より正式には、 与えられた2つの文字列間の編集距離は 文字が繰り返されないという約束で、どの程度効率的に計算でき ますか?s,t∈Σ∗s,t∈Σ∗s,t \in \Sigma^* ΣΣ\Sigmaは非常に大きなアルファベットです。

1
AM-completeの既知の問題/ AM-completeは明確に定義されていますか?
アーサー・マーリンの複雑性クラスに完全な問題があるかどうか興味があります。Graph Non-Isomorphism(GNI)は AMの問題の標準的な例のようですが、おそらく完全なものではありません。 AMの「完全な」問題が明確に定義されているのではないかと思っています。AM = BP.NPであるため、AMへの「リダクション」は、決定論的な複雑度クラスに使用するカープリダクションではなく、3SATへのランダムリダクションに依存しているようです。それでは、Karp削減にはエラーがないため、「Karp削減AM問題」には実際には意味がないため、「完全な」問題の通常の概念は無効になりますか?

2
インメモリインデックスに適したスナップショットテーブルデータ構造
私は、非常に具体的なユースケース向けにインメモリオブジェクトデータベースを設計しています。単一のライターですが、効率的な同時読み取りをサポートする必要があります。読み取りは分離する必要があります。クエリ言語はありません。データベースは次のもののみをサポートします。 属性/属性のセットによってオブジェクト/ -sを取得します(式のサポートがあるかもしれません、例えばx.count < 5) オブジェクトの属性を取得 クエリは、上記の任意の数の操作で構成される必須のスクリプトです。データサイズは<<メモリであるため、ほとんどの属性のすべてのオブジェクトとインデックスは、スワップすることなく快適に収まるはずです。 必要なのは、オブジェクトの属性インデックスのデータ構造です。これは、書き込み時のO(n)であり、書き込みの同時実行性をサポートしませんが、理想的にはO(1)スナップショット(書き込み時のコピー)およびO(logN)アクセスをサポートする必要があります。理想的には、バージョン間で最大限の構造共有を行うことで、読み取りの同時実行性を高めることができます。 私はCTries、コンカレントBST、コンカレントスプレイツリーを見ていましたが、ここで本当に正しい方向を見ているかどうかはわかりません。上記の構造は、私が気にしない挿入の複雑さに多くの注意を払っています。 質問:すぐに使用できるユースケースに適した既知のデータ構造はありますか? 編集:もう少し考えた後、永続的なBST / Splayツリーが機能するようです。ライターは「マスター」コピーを更新し、クエリは実行の開始時にツリーを取得し、完了後に破棄します。しかし、より良い解決策があるかどうかはまだ興味があります。

1
ボールのペアでビンを埋める
少なくともボールが含まれるビンは、fullと呼ばれます。私たちの目標は、できるだけ多くのビンをいっぱいにすることです。kkk 最も単純なシナリオでは、ボールが与えられ、それらを任意に配置できます。その場合、明らかにできることは、 binを任意に選択し、それぞれにボールを入れることです。nnn⌊n/k⌋⌊n/k⌋\lfloor n/k \rfloorkkk 次のシナリオに興味があります組のボールが与えられます。各ペアの2つのボールを2つの異なるビンに入れる必要があります。その後、敵が来て、各ペアから1つのボールを削除します。削除後に最大数のフルビンを確保するにはどうすればよいですか?nnn 簡単な戦略は、ビンのペアを選択することです。各ビンのペアをボールペアで満たします(各ビンにはボールがあり、各ペアから1つのボールがあります)。次に、敵が何を削除したかに関係なく、各ビンペアに少なくとも1つのフルビンがあります。⌊n/(2k−1)⌋⌊n/(2k−1)⌋\lfloor n/(2k-1) \rfloor2k−12k−12k-12k−12k−12k-1 より多くのフルビン()を達成する戦略はありますか?⌊n/(2k−1)⌋⌊n/(2k−1)⌋\lfloor n/(2k-1) \rfloor

1
ポイントのセットをカバーするために最小数の直線を見つけることの使用は何ですか?
コンピュータサイエンスには、2Dの特定のポイントセットをカバーする最小数の直線を見つけるという一般的な問題[1] [2]があります。 私は多くの論文をスキャンしましたが、それらのどれも問題の明確な動機を持っていません。 この問題を解決するための用途は何ですか?これを説明する論文はありますか?

2
一般化されたXOR-SATは効率的に解決可能ですか?
XOR-3-SATがどのように効率的に解けるかを見てきました(たとえば、ブール充足可能性問題については、Wikipediaエントリの「XOR充足可能性」セクションを参照してください)。 基本的な質問を疑問に思っています: XOR-k-SATは、句ごとにリテラルの量が異なる数式では効率的に解決できますか? 句ごとのリテラルの量を3を超えて増やすことができるかどうか、また、句の長さを混在させることができるかどうかを知りたいです。

2
シェーファーの定理がP = NPであることを証明しないのはなぜですか?
これはおそらく愚かな質問ですが、私にはわかりません。別の質問で、彼らはシェーファーの二分法定理を思いついた。私には、すべてのCSP問題がPまたはNP完全のいずれかであるが、その間にないことを証明しているように見えます。すべてのNP問題は多項式時間でCSPに変換できるので(CSPはNP完全であるため)、なぜこれはPとNP完全の間にスペースがないことを証明しないのですか? たとえば、私の考えでは、整数因数分解は充足可能性の問題として書き直すことができるため、シェーファーの定理を使用して、PまたはNP完全でなければならないが、間にはないはずです(どちらかがわからなくても)。 質問全体を見る別の方法:シェーファーの定理を使用して整数因数分解がPであるかNP完全であるかを判断できないのはなぜですか? 編集:David Richerbyの回答に応えて(コメントするには長すぎます): 興味深いが、まだ完全には理解していない。シェーファーの定理を使用しながら関係ガンマのセットを定義する場合、制限を課すことができます。たとえば、アリティ2の関係のみを使用するようにガンマを制限する場合があります(問題はPにあります)。ガンマにどのような制限を課すことができますか? なぜCSP(gamma)のすべてのインスタンスが(Lと同型?)Lとまったく同じになるような制限を課せないのですか?たとえば、不均一な数値の整数分解を変換する場合、2つの除数の1つはxn .. x3 x2 1として表されるバイナリです。この数値を1より大きくしたいので、関係(xnまたは..またはx3またはx2)。したがって、ガンマにはn-1のor-relation関係があると言います。しかし、or関係を使用して、L以外のインスタンスを言語に含めることは望ましくないため、or関係のx2..xnには否定を許可しません。もちろん、特定の変数のみがそこで使用されるという制限を課す必要もあります。 このようにしてCSP(gamma)を整数因数分解と同型にすることはできませんか?主な質問は、ガンマにどのような制限を課すことができるかということです。 編集2:ユバル・フィルマスの回答に応えて。 デビッドの答えとほぼ同じですが、あなたの答えを理解し、正しいようです。たとえば、分解を3-satに減らしてから、分解がNP完全であると結論付けることができますが、3-satにはおそらく分解でない他のインスタンスがあるためです。 私が理解できない部分は、インスタンスが(非)任意である場合です。たとえば、2 SATは、arity 2の句のみが許可されているため、私にとっては任意ではないように見えます(ただし、証明は上限であり、この場合は上限がPであるため、証明がまだ保持されていることを認める必要があります)。 おそらくもっと良い例は、NP完全性の例です:上記のリンクされた質問。1人の回答者がシェーファーの完全な証明を与えます。ただし、入力には重要な制限を課しています(2-SAT句とxor-clausesは許可されますが、それ以外は何も行われません)。もちろん、証明で考慮されるCSPの問題は元の問題とまったく同じであるため、証明はまだ保持されています。 私が理解できない部分は、なぜ因数分解のために同様のことができないのですか?もちろん、それを3-SATに減らすことは意味がありませんが、数値を因数分解して(4ビットの)数値のみを因数分解するCSPインスタンスを与えることができます。(これが可能だと思われる場合は、END-OF-SKIPに進んでください)。 分解インスタンス。 入力: (N =)(因数分解する数値の4ビット) (M =)(最初の除数の最小値の4ビット) m 4 m 3 m 2 m 1n4n3n2n1n4n3n2n1n_4n_3n_2n_1m4m3m2m1m4m3m2m1m_4m_3m_2m_1 それでは、これをCSPインスタンスに変換しましょう INPUT: のための単項ドメイン及びため(N及びMが与えられたことを示します)mは5。。m 1n5。。n1n5。。n1n_5..n_1m5。。m1m5。。m1m_5..m_1 ドメイン{0,1}の変数: (D =)(最初の約数) (E =)(2番目の約数)e 4 e 3 e 2 e 1d4d3d2d1d4d3d2d1d_4d_3d_2d_1e4e3e2e1e4e3e2e1e_4e_3e_2e_1 関係: …

4
カッコウハッシュが動的な完全ハッシュよりも優れている点は何ですか?
動的な完全ハッシュテーブルとカッコウハッシュテーブルは、最悪の場合のO(1)ルックアップと予想されるO(1)時間の挿入と削除をサポートする2つの異なるデータ構造です。どちらもO(n)補助スペースと、操作のためにハッシュ関数のファミリーへのアクセスが必要です。 これらのデータ構造はどちらもそれ自体で美しく、素晴らしいと思いますが、これらのデータ構造が他のデータ構造よりもいつどのように望ましいかはわかりません。 これらのデータ構造の1つが他のデータ構造よりも明確な利点を持っている特定のコンテキストはありますか?それとも、ほとんど交換可能ですか?

3
Halting Problemの決定不能性の証明は、結果を逆にすることでごまかしますか?
チューリングの停止問題を理解するのに苦労しています。 彼の証明は、与えられた入力に対してコンピューターが永久に停止するかループするかを決定できる魔法のマシンが存在することを前提としています。次に、出力を逆にする別のマシンを接続しますが、矛盾があるため、HHHHHHHは存在できません。 私の懸念は、答えを逆にしたため間違っていると言っているように見えることです。類推として、特定の入力で正しい答えを出力し、他の入力で間違った答えを出力するというマシンがある場合。次に、Aの結果を逆にする別のマシンを接続して、2つのマシンの組み合わせがAの定義方法と矛盾するようにします。2台のマシンは、Aが正しい回答を出力するように定義されている入力に対して誤った回答を生成し、Aが誤った回答を出力するように定義されている入力に対して正しい回答を出力します。これは矛盾と呼ばれますか?したがって、一部の入力で正しい答えを出力し、他の入力で誤った答えを出力するマシンは存在しませんか?AAAAAAAAAAAAAAA

3
NFAを使用せずに正規表現からDFAを作成する方法は?
目的は、正規表現からDFAを作成することであり、「通常のexp> NFA> DFA変換」を使用することはオプションではありません。それをどのように行うべきですか? 私は教授にこの質問をしましたが、彼は私たちが直観を使うことができると言って、親切に説明を拒否しました。だから私はあなたに尋ねたかった。 「通常のexp> NFA> DFA変換」はオプションではありません。そのような変換は、かなり複雑な正規表現を変換するのに多くの時間がかかるからです。たとえば、特定の正規表現「regex> NFA> DFA」の場合、人間には1時間かかります。30分以内に正規表現をDFAに変換する必要があります。

2
グラフ同型写像へのグループ同型写像
計算の複雑さに関するいくつかのブログを読んで(たとえば、こちら)、2つのグループが同型かどうかを判断する方が、2つのグラフの同型をテストするよりも簡単であるという考え方を理解しました。たとえば、記載されているページでは、グラフ同型はグループ同型よりも一般的な問題であると述べています。 したがって、私は次のポーズを取っています グループが与えられた場合、誰かが|のサイズ多項式のグラフΓ (G )の構築を与えることができます 。G | その結果、Γ (G )≅ Γ (H )GGGΓ (G )Γ(G)\Gamma(G)| G ||G||G|グループのための Gと H ?Γ (G )≅Γ (H)⟺G ≅HΓ(G)≅Γ(H)⟺G≅H\Gamma(G) \cong \Gamma(H) \iff G \cong HGGGH?H?H?

3
NFAはイプシロン遷移をどのように使用しますか?
下の写真では、このNFAが何を受け入れているかを正確に把握しようとしています。 私を混乱させているのは、ジャンプ。ϵϵ\epsilonq0q0q_0 場合は入力すると、両方のシステムに移動しと(状態を受け入れますか)?000q0q0q_0 q1q1q_1 が入力された場合、システムは両方の移動します111q1q1q_1とq2q2q_2ますか? 入力がない場合(空の文字列)、システムはq1q1q_1(状態を受け入れる)にのみ移動しますか

1
コンパイル時間の保証に向けてさらに調査しないのはなぜですか?
私はそれがすべてコンパイル時間であり、プログラムをコンパイルするとその実行について多くの保証が行われるという考えが大好きです。一般的に、静的型システム(Has​​kell、C ++など)は、動的型システムよりも強力なコンパイル時保証を提供するようです。 私が理解していることから、Adaはコンパイル時のチェックに関してさらに進んでおり、実行前にさまざまなバグを検出することができます。また、ある時点で、デリケートなフィールド(プログラミングエラーが人命にかかわる可能性がある場合)に選択されたことを考えると、かなり安全だと考えられています。 今、私は疑問に思う:より強力な静的保証が、より文書化され安全なコードにつながるなら、なぜ私たちはその方向でもっと研究しないのか? 欠落しているように見えるものの例はint、基礎となるアーキテクチャのビット数によって決定される範囲を持つジェネリック型を定義する代わりに、範囲を持つことができる言語です(次の例でInt [a..b]は、 aおよびbを含む): a : Int [1..24] b : Int [1..12] a + b : Int [2..36] a - b : Int [-11..23] b - a : Int [-23..11] または(これをAdaから): a : Int [mod 24] b : Int [mod 24] a + b : Int [mod …

5
2 ** xはexp(x)よりも計算が速いですか?
私がこの質問をする方法で明らかになるであろう素朴さ、そして私がそれを求めているという事実を許してください。 数学者は、通常、expexp\expを使用します(理論により)理論上最も単純な/最も基本的なものです。しかし、コンピューターはすべてをバイナリで実行するように見えるので、コンピューター上で計算する2**xよりも高速Math::exp(x)ですか?

4
正規ではない正規言語の連合
私はその質問に出くわしました: 「2つの正規言語の例を挙げましょう。それらの和集合は正規言語を出力しません。」 通常の言語は組合のもとで閉鎖されていると思うので、これは私にとってかなり衝撃的です。つまり、2つの標準言語を使用してそれらを結合する場合は、標準言語を取得する必要があります。 そして、私はその証拠を理解していると思う:私の言葉では、言語が規則的であれば、それらを認識するオートマトンが存在する。すべての状態(結合)を取得し、エントリポイントに新しい状態を追加し、イプシロンを使用して新しい状態の遷移関数を変更した場合、問題ありません。また、すべての州などからのパスが存在することを示します。 どこが間違っているのか、あるいは質問にアプローチする別の方法を教えてください。 質問の出典、演習4、フランス語。 また、交差点でも同じ質問がされます。

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