コンピュータサイエンス

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

1
セットのパーティションを表すコンパクトな方法は何ですか?
セットパーティションを表すための効率的なデータ構造が存在します。これらのデータ構造は、UnionやFindなどの操作には時間的に複雑ですが、スペース効率は特に高くありません。 セットのパーティションを表すスペース効率の良い方法は何ですか? 以下は、考えられる開始点の1つです。 N個の要素 を持つセットのパーティション数は、N番目のベル数であるB Nであることを知っています。したがって、N個の要素を持つセットのパーティションを表すための最適な空間の複雑さは、 log 2(B N)ビットです。そのような表現を見つけるために、(N要素のセットのパーティションのセット)と(1からB Nまでの整数のセット)の間の1対1のマッピングを探すことができます。NNNBNBNB_NNNNNNNログ2(BN)log2⁡(BN)\log_2(B_N)NNN111BNBNB_N 計算するのに効率的なそのようなマッピングはありますか?「効率的」とは、このコンパクトな表現を、またはlog 2(B N)の時間多項式で、操作が簡単な表現(リストのリストなど)との間で変換したいということです。NNNログ2(BN)log2⁡(BN)\log_2(B_N)

1
決定論的な文脈自由言語のためのポンプの補題?
通常の言語のポンピングレンマは、特定の言語が通常ではないことを証明するために使用できます。また、文脈自由言語のポンピングレンマ(オグデンの補題とともに)を使用して、特定の言語がコンテキストフリーでないことを証明できます。 決定論的な文脈自由言語のためのポンプレンマはありますか?つまり、言語がDCFLではないことを示すために使用できるポンピングレンマに類似したレンマはありますか?言語がDCFLではないことを示すために私が知っているほとんどすべての証明手法は本当に複雑であり、もっと簡単な手法があることを望んでいたので、私は興味があります。

3
DFTのクロスエッジとフォワードエッジの違い
深さ優先ツリーには、ツリーを定義するエッジがあります(つまり、トラバーサルで使用されたエッジ)。 他のノードのいくつかを接続するいくつかの残りのエッジがあります。クロスエッジとフォワードエッジの違いは何ですか? ウィキペディアから: このスパニングツリーに基づいて、元のグラフのエッジは3つのクラスに分けることができます。ツリーのノードからその子孫の1つを指す前方エッジ、ノードからその祖先の1つを指す後方エッジ、そしてどちらもしないクロスエッジ。時々、スパニングツリー自体に属するエッジであるツリーエッジは、フォワードエッジとは別に分類されます。元のグラフが無向の場合、そのエッジはすべてツリーエッジまたはバックエッジです。 あるノードから別のノードを指すトラバーサルで使用されていないエッジは、親子関係を確立しませんか?

1
ML型推論の指数コストの簡潔な例
OCamlのような関数型言語での型推論のコストは非常に高くなる可能性があることに私の注意が向けられました。各式について、対応する型の長さが式の長さに対して指数関数的であるような一連の式があるという主張です。 以下のシーケンスを考案しました。私の質問は次のとおりです。同じ型を実現する、より簡潔な式のシーケンスを知っていますか? # fun a -> a;; - : 'a -> 'a = <fun> # fun b a -> b a;; - : ('a -> 'b) -> 'a -> 'b = <fun> # fun c b a -> c b (b a);; - : (('a -> 'b) -> 'b -> …

2
意思決定問題が複雑性理論でよく使用されるのはなぜですか?
ウィキペディアから: 計算問題のタイプ:最も一般的に使用される問題は、意思決定問題です。ただし、複雑さのクラスは、関数の問題、カウントの問題、最適化の問題、プロミスの問題などに基づいて定義できます。 また、NPコンプリート、NPハード、NPなどの定義は、意思決定問題に対してのみ定義されていることも確認しました。なぜそうなのでしょうか。 他の問題を同等に意思決定問題に変換できるからですか?

3
効率的な計算の概念
多項式時間のチューリングマシンアルゴリズムは、最悪の場合の実行時間が入力サイズの多項式関数によって制限されている場合に効率的であると見なされます。私は強い教会チューリング論文を知っています: Turingマシンで合理的な計算モデルを効率的にシミュレーションできます しかし、私は -calculusのアルゴリズムの計算の複雑さを分析するための確かな理論を知りません。λλ\lambda 既知のすべての計算モデルについて、計算効率の概念はありますか?計算可能性の質問だけに役立つが、計算の複雑さの質問には役に立たないモデルはありますか?


1
誘導誘導とは何ですか?
誘導誘導とは何ですか? 私が見つけたリソースは次のとおりです。 5.7章の最後にあるHoTT本。 nLabの記事 帰納的帰納的定義と呼ばれる論文 このブログの投稿では、帰納的誘導型についても触れています 最初の2つの参照は私には短すぎますが、後の2つは専門的すぎます。誰でも簡単に説明できますか?Agdaコードがあればもっと良いでしょう。

2
算術コーディングへのハフマンコーディングの一般化はありますか?
ハフマン符号化、算術符号化、および範囲符号化の関係を理解し​​ようとするとき、ハフマン符号化の欠点が分数ビットパッキングの問題に関連していると考え始めました。 つまり、シンボルに240の可能な値があり、これをビットにエンコードする必要がある場合、8は256の可能な値を表すことができるため、「フル」8は必要ないとしても、シンボルごとに8ビットでスタックすることになります。シンボルごと。この問題の解決策は、「フラクショナルビットパッキング」と呼ばれるもので、乗算を使用して2のべき乗ではない「ビットシフト」が可能です。2のべき乗の乗算がシフトするのx * 2 == x << 1と同じようにx * 4 == x << 2、2のべき乗すべてに対して同様に続きます。そのため、代わりに乗算することにより、2のべき乗でない値で「シフト」し、小数ビットサイズのシンボルにパックできます。 。 この問題はハフマンコーディングと同様です。結局、長さが小数ビットサイズでなければならないコードが作成されるため、このパッキング効率は低くなります。ただし、フラシトンビットパッキングのソリューションは、固定サイズのシンボルを想定しているため、単に使用することはできません。 問題は、算術コーディングに似たものを達成するために、フラクショナルビットパッキングと同様のアイデアでハフマンコーディングを改善するための論文や解決策はありますか?(または反対の結果)。

2
HORN-SATはLINにありますか。もしそうなら、それはなぜP =​​ LINを示していないのですか?
Complexity Zooは、を決定論的チューリングマシンが線形時間で解決できる決定問題のクラスであると定義しています。L INLINLIN L IN⊆ PLIN⊆PLIN \subseteq P HORN-SATは解けるため(命題ホーン公式の充足可能性をテストするための線形時間アルゴリズム(1984)に示されているように)O (n )O(n)O(n) (命題)ホーン公式が満足できるかどうかを決定するための新しいアルゴリズムが提示されます。ホーン式の場合含まK異なる命題文字をし、それらが正確であると仮定すると、P 1、... 、P K、時間にこの紙実行に提示2つのアルゴリズムO (N )、Nを発生回数の合計でありますAのリテラルの。あAAKKKP1、… 、PKP1,…,PKP_1,…, P_KO (N)O(N)O(N)NNNあAA なぜそれを結論づけられないのかしら L IN= PLIN=PLIN = P HORN-SATもログスペース削減の下で完全であることが証明されていることを考えると?私は何かを逃しているに違いない。それともよく知られた事実ですか?PPP (私はまだ1984年の論文を徹底的に調べたので、線形時間でHORN-SATを解くためのアルゴリズムを完全に理解していないため、その意味を誤解している可能性があります。)

2
言語にベリファイアがないことを示すことにより、言語が計算可能に列挙可能でないことを示すことができますか?
計算可能に列挙可能(ce、再帰的に列挙可能に相当、半決定可能に相当)セットの定義の1つは次のとおりです。 決定可能言語がある場合に限っCEである V ⊆ Σ *(検証と呼ばれる)stはすべてのためのx ∈ Σ *、A⊆Σ∗A⊆Σ∗A \subseteq \Sigma^*V⊆Σ∗V⊆Σ∗V\subseteq \Sigma^*x∈Σ∗x∈Σ∗x\in \Sigma^* が存在するときに限り、Y ∈ Σ * ST ⟨ X 、Y ⟩ ∈ Vが。x∈Ax∈Ax\in Ay∈Σ∗y∈Σ∗y\in\Sigma^*⟨x,y⟩∈V⟨x,y⟩∈V\langle x, y \rangle \in V したがって、言語がceではないことを示す1つの方法は、その言語に対して決定可能な検証者がないことを示すことです。この方法は、言語が実際にはCEではないことを示すのに役立ちますか?VVV

2
DFSがスペースの複雑さを持っていると見なされるのはなぜですか?
これらのメモによると、DFSは空間の複雑さを持っていると見なされます。ここで、はツリーの分岐係数であり、は状態空間内のパスの最大長です。b mO (b m )O(bm)O(bm)bbbメートルmm 同じことが、Uninformed SearchのこのWikibookページでも述べられています。 現在、DFSに関するWikipediaの記事の「情報ボックス」は、アルゴリズムのスペースの複雑さについて次のことを示しています。 O ()O (| V| )O(|V|)O(|V|)、繰り返しなしでグラフ全体をトラバースする場合、重複ノードを排除せずに、暗黙的グラフの検索された最長経路長O (O(O())) これは、DFSのスペースの複雑さ、つまりであると私が考えたものにより似ています。ここで、はアルゴリズムが到達する最大長です。mO(m)O(m)O(m)mmm なぜこれが事実だと思いますか? まあ、基本的には、現在見ているパスのノード以外のノードを保存する必要はないので、Wikibookと私が紹介したメモの両方が提供する分析でを掛けても意味がありません。に。bbb さらに、Richard KorfによるIDA *に関するこの論文によると、DFSのスペースの複雑さはであり、は「深度カットオフ」と見なされます。dO(d)O(d)O(d)ddd では、DFSの正しいスペースの複雑さは何ですか? それは実装に依存すると思うので、異なる既知の実装のスペースの複雑さの説明をいただければ幸いです。

2
最小制約値とは何ですか?
制約充足問題では、ヒューリスティックを使用してbactrackingソルバーのパフォーマンスを改善できます。単純なバックトラッキングソルバーに一般的に与えられる3つのヒューリスティックは次のとおりです。 最小残り値(この変数にまだ有効な値の数) 度ヒューリスティック(この変数の影響を受ける他の変数の数) 最小制約値(他の変数に対して他のほとんどの値を残す値) 最初の2つはかなり明白で、実装は簡単です。最初に、ドメイン内に残っている値が最も少ない変数を選択します。タイがある場合は、他のほとんどの変数に影響を与える変数を選択します。このようにして、ソルバーの親ステップが不適切な割り当てを選択した場合、他の多くの要素に影響を与える最小の値が残っている変数を選択すると、より早く発見できるため、時間を節約できます。 これらはシンプルで明確に定義されており、実装も簡単です。 最小制約値は、どこを見ても明確に定義されていません。人工知能:現代のアプローチ(ラッセル&ノーヴィグ)は次のように述べています。 制約グラフ内の隣接する変数の選択が最も少ない値を優先します。 「最小制約値」を検索すると、この教科書に基づいた多くの大学のスライドショーが表示されただけで、アルゴリズムでこれを行う方法についての詳細はありませんでした。 このヒューリスティックの唯一の例は、値の1つの選択が隣接する変数のすべての選択を排除し、もう1つの値は排除しない場合です。この例の問題は、これが取るに​​足らないケースであり、潜在的な割り当てが問題の制約との整合性がチェックされるとすぐに排除されることです。したがって、私が見つけたすべての例で、最小の制約値のヒューリスティックは、冗長なチェックを追加することによる小さな悪影響を除いて、実際にはソルバーのパフォーマンスにまったくメリットがありませんでした。 私が考えることができる他の唯一のことは、各割り当ての隣接する変数の可能な割り当てをテストし、この変数の可能な割り当てごとに存在する隣接の可能な割り当ての数を数え、この変数の値を並べることですその値が選択された場合に使用可能なネイバー割り当ての数に基づく。ただし、これによりランダムな順序よりも改善されるかどうかはわかりません。これには、多数の変数の組み合わせのテストと、カウントの結果に基づく並べ替えの両方が必要になるためです。 誰でも最小制約値のより有用な説明を提供し、その最小制約値のバージョンが実際にどのように改善をもたらすかを説明できますか?

5
O(n)の複雑さで順序付けされた単語の頻度
Java開発者のポジションへのインタビュー中に、私は次のことを尋ねられました。 2つのパラメーターを取る関数を記述します。 テキストドキュメントを表すStringおよび 返すアイテムの数を提供する整数。 最も頻度の高い単語が最初に出現する単語の頻度で並べられた文字列のリストを返すように関数を実装します。ソリューションは時間で実行する必要がありますはドキュメントの文字数です。O(n)O(n)O(n)nnn 以下は私が(疑似コードで)答えたものです、それはソートのためにではなく時間です。どうやって回するのかわからない。 O(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n)O(n)O(n)O(n) wordFrequencyMap = new HashMap<String, Integer>(); words = inputString.split(' '); for (String word : words) { count = wordFrequencyMap.get(word); count = (count == null) ? 1 : ++count; wordFrequencyMap.put(word, count); } return wordFrequencyMap.sortByValue.keys 誰かが知っているか、誰かが私にいくつかのヒントを与えることができますか?

5
すべての整数線形計画法の問題はNPハードですか?
私が理解しているように、ハンガリーのアルゴリズムは多項式時間-O(n 3)で解決できるため、割り当て問題はPにあります。また、割り当ての問題は整数線形計画法の問題であることも理解していますが、ウィキペディアのページではこれがNP困難であると述べています。私にとって、これは割り当ての問題がNP-Hardにあることを意味します。 しかし、割り当ての問題はPとNPハードの両方に存在することはできません。そうでない場合、PはNPに等しくなりますか?ウィキペディアのページは、すべてのILP問題を解決するための一般的なアルゴリズムがNPハードであることを単に意味しているのですか?他のいくつかの出典では、ILPはNP-Hardであると述べているため、これは一般的に複雑性クラスについての私の理解を本当に混乱させています。

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