コンピュータサイエンス

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

3
なぜほとんどのミューテックス実装は不公平なのですか?
私の理解では、mutexの最も一般的な実装(たとえば、C ++のstd :: mutex)は公平性を保証していません-つまり、競合のインスタンスで、ロックがスレッドの順序で取得されることを保証していません lock()と呼ばれます。実際には、(できれば一般的ではありませんが)競合が多い場合に、mutexの取得を待機しているスレッドの一部がmutexを取得できない可能性さえあります。 これは私には役に立たない振る舞いのようです-公平なミューテックスは、プログラマーが望んでいる/期待することにより一致した振る舞いをもたらすように思えます。 mutexが通常公平に実装されない理由は「パフォーマンス」ですが、それが何を意味するのかを理解したいと思います。特に、mutexの公平性要件を緩和すると、パフォーマンスがどのように向上しますか?「フェアな」ミューテックスを実装するのは簡単なようです-スレッドをスリープ状態にする前に、lock()がミューテックスのリンクリストの末尾に呼び出しスレッドを追加し、次にロック解除()で次のスレッドをポップしてくださいその同じリストの頭とそれを目覚めさせます。 ここで見逃しているミューテックス実装の洞察は、より良いパフォーマンスのために公平性を犠牲にすることが価値があると考えられた理由を説明していますか?

1
APXハード問題のコレクション
誰もが「Garey&Johnson」を知っています。これは、NP硬度の証明に変換するために問題を変換する必要があるときにいつでも参照できる私の参照です。しかし、最近、APX耐性の証明が必要であることに気づきました。APX耐性であることが示されている同様の(そして最新の..?)問題の集まりがあるのでしょうか。 誰かがこのようなことを知っていますか?そのような問題を体系的に収集しているウェブサイトがないとは思えませんが、Googleのスキルは不十分のようです。

2
すべての重みが正になるように定数を追加するだけでは、負の重みを持つ最短経路を見つけられないのはなぜですか?
私は現在、アルゴリズムの概要を読んでいて、すべてのパスが正であることを確認することに依存するジョンソンのアルゴリズムを採用しました。 アルゴは、すべてのエッジに対して正であり、最短経路関係の正確さを維持する新しい重み関数(w ')を見つけることに依存しています。 これは、w(s)、h(d)の値を計算して、wの元の値に追加します。 私の質問は、グラフの最小のwを見つけてすべてのエッジに追加しないのはなぜですか?これは両方の条件を満たすため、計算量が少なくて済みます。

2
普遍的/既存の定量化?
タイプの普遍的かつ実存的な定量化の目的を理解するのに苦労しています。私は、構造の計算に基づいておもちゃの言語を書いて遊んでいます。理解を深めるために、モルトとヘンクについて読んでいます。 CoCにラムダとフォーラルの両方の抽象化がある理由がわかりません。 (∀ X :A 。B )(λ X :A 。B )(λバツ:あ。B)(\lambda x:A . B) (∀ X :A 。B )(∀バツ:あ。B)(\forall x:A . B) ラムダは、型が手動で渡されるシステムではすべてを包括しているようです。つまり、次のこと (∀ X :* 。λ A :X 。)(∀バツ:∗。λa:バツ。a)(\forall x : *. \lambda a : x. a) と置き換えることができます (λ X :* 。λ A :X 。)(λバツ:∗。λa:バツ。a)(\lambda x : *. \lambda …

3
整数線形計画法の場合、ブールにキャスト
次の制約を整数線形プログラムで表現したいと思います。 y={01if x=0if x≠0.y={0if x=01if x≠0.y = \begin{cases} 0 &\text{if } x=0\\ 1 &\text{if } x\ne 0. \end{cases} 私はすでに整数変数を持っていますが、ことが約束されています。上記の制約を整数線形計画法ソルバーでの使用に適した形式でどのように表現できますか?- 100 ≤ X ≤ 100x,yx,yx,y−100≤x≤100−100≤x≤100-100 \le x \le 100 これはおそらくいくつかの追加の変数を導入する必要があります。追加する必要がある新しい変数と制約は何ですか?1つの新しい変数できれいに実行できますか?二? 同様に、これは制約を強制する方法を尋ねています y≠ 0 の場合に限り 、X ≠ 0。y≠0 if and only if x≠0.y \ne 0 \text{ if and only if } x …

2
最小公約数
基本的に、問題は次のとおりです。正の数のセットの場合、の任意の要素の約数ではない最小数、つまり見つけます。SSSdddSSS∀x∈S, d∤x∀x∈S, d∤x\forall x \in S,\ d \nmid x n = | S |を表す n=|S|n=|S|n = |S|およびC=max(S)C=max(S)C = \max(S) 。関数F(x)= xをF(x)=F(x)=F(x) = 除算しない最小素数を考えます。F(x)\ leq \ log xであることが簡単にわかります。また、セットSの場合、F(S)= Sの要素を分割しない最小素数とします。上限がありますxxxF(x)≤logxF(x)≤log⁡xF(x) \leq \log xSSSF(S)=F(S)=F(S) = SSS F(S)≤F(lcm(S))≤F(Cn)≤nlogC.F(S)≤F(lcm⁡(S))≤F(Cn)≤nlog⁡C.F(S) \leq F(\operatorname{lcm}(S)) \leq F(C^n) \leq n \log C. したがって、111からn \ log Cまでのすべての数値を列挙しnlogCnlog⁡Cn \log C、Sの要素を除算しないかどうかをチェックする単純な総当たりアルゴリズムSSSは多項式であり、時間の複雑さはO(n2logC)O(n2log⁡C)O(n^2 \log C)です。 …

2
アルゴリズムに関する優れた数学の本[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 私は数学的優雅さと厳格さの吸盤です、そして今、アルゴリズムとアルゴリズム分析に関するそのような文献を探しています。今では、どのアルゴリズムがカバーされているかは問題ではありませんが、それらがどのように提示および処理されるかは非常に重要です。使用するすべての概念を厳密かつ抽象的な方法で定義する非常に明確で正確な言語を最も重視しています。 私は、Cormen、Leiserson、Rivest、Steinによる古典的なアルゴリズムの紹介がかなり巧妙であるが、数学をうまく処理せず、その証明と定義については非公式です。Sipserの計算理論入門は、その点では優れているように見えますが、それでも数学からアルゴリズムへのシームレスな移行は提供していません。 誰かが何かをお勧めできますか? 注意:アルゴリズムは、グラフ、配列、セット、リスト、ツリーなどの古典的な非自明な抽象データ構造を使用して、必要なデータの管理に少なくとも侵入する必要があります。データ構造の使用と管理の問題を完全に無視したとしても、あまり興味はありません。しかし、私はそれらで解決された問題についてはあまり気にしません。

1
NP完全問題を解決するためのすべての既知のアルゴリズムは建設的ですか?
暗黙的に証明書を生成せずにNP完全問題に正しく「はい」を出力する既知のアルゴリズムはありますか? 私は、充足可能性のオラクルを満足のいく割り当てファインダーに変えるのは簡単であることを理解しています:変数を繰り返し、毎回充足可能性のオラクルに元の問題との変数の結合を解決するように要求します。 しかし、そのようなラッパーは便利でしょうか?すべてのsatソルバーが可能な割り当ての空間を検索しますか? または、ソルバーが数学的定理を利用して、解が存在しなければならないことを証明できる、ある種のNP完全問題(巡回セールスマン、サブセット合計など)がありますか?矛盾によって証明をしたいですか?

1
Big-Oh時間の複雑性に複数の変数を含めることはできますか?
たとえば、2つの文字列の分析が必要な文字列処理を行っているとします。彼らの長さがどうなるかについての情報はありませんので、彼らは2つの異なる家族から来ています。アルゴリズムの複雑さをまたはと呼んでも問題ありませんか単純なアルゴリズムを使用するか、最適化されたアルゴリズムを使用するかによって異なります)。O (n + m )O (n ∗ m )O(n∗m)O(n * m)O (n + m )O(n+m)O(n + m) 同様に、選択したアルゴリズムが実際には2つのステージを必要とするとします。最初の文字列のセットアップフェーズでは、初期コストを発生させずに他の文字列をいくつでも処理できます。構造とそれに続く任意の数の計算があると言うのが適切だと考えられますか?O (m )O (n )O(n)O(n)O (m )O(m)O(m) どちらの計算も線形であるため、それらをと呼ぶのが適切でしょうか?O (n )O(n)O(n)

2
充足可能性の問題の解決策を見つけることは、充足可能性を決定することよりも難しいですか?
与えられたブール式が計算上満足できるものであるかどうかを決定する問題は、実際に式の解を見つけることとは計算的に異なりますか? 言い換えれば、ブール変数の「正しい設定」を明示的に決定せずに、特定の式が満足できることを見つける別の方法はありますか?それとも、すべての可能な証明が多項式時間で「正しい設定」に短縮されますか? 私の無知を許して、私は工学部の学生です。ウィキペディアは、SATまたはUNSATを見つけるだけの行為がNP完全であることを示唆しているようです。

1
停止中のオラクルでは解決できない既存の問題はありますか?
停止しているオラクルが利用可能であれば(または、同等にハイパーコンピューティングと考えれば)、ほとんどの問題は取るに足らないものであることを理解しています。ただし、チューリングマシンでは停止問題が不可能であることを示す引数を適用すると、チューリング+オラクルがチューリング+オラクルの停止問題を決定することが不可能であることも示されます。停止中のオラクルでは解決できない問題の実際的で実用的な例はありますか? 注:「オラクル」とは、オラクル自体を備えたTM ではなく、標準のチューリングマシンのオラクルを意味します。

3
NDTMの答えを効率的にフリップできないのはなぜですか?
NDTMの回答を効率的にフリップすることは不可能であると何度か読みました。しかし、その理由はわかりません。たとえば、O (n )で実行されるNDTM 場合、このテキスト(セクション3.3 )では、別のNDTM TがO (n 100)時間でMの答えを反転する方法をどのように決定できるかが不明確であると述べています。MMMO (n )O(n)O(n)TTTO (n100)O(n100)O(n^{100})MMM 私の問題は次のとおりです。NDTM は、受け入れ状態につながる一連の非決定的な選択が存在する場合に出力します。さらに、小さな(対数)オーバーヘッドのみですべてのNDTMをシミュレートできるユニバーサルNDTM N Uが存在します。それでは、なぜTを次のように構築できないのでしょうか。最初に、時間O (n log n )で可能なはずのユニバーサルNDTMでMをシミュレートします。次に、1-Mの答えを出力します。これは、時間O (n log n )で任意の線形NDTMの答えを反転できることを意味します。111NUNUNUO (n ログn )O(nlog⁡n)O(n\log n)O (n ログn )O(nlog⁡n)O(n\log n)

2
指定された文字列を受け入れ、他の指定された文字列を拒否する最小のDFA
二組を考えるとのアルファベットを超える文字列のΣ、我々は計算することができ、最小決定性有限オートマトン(DFA)MようにA ⊆ L (M )とL (M )⊆ Σ * ∖ B?A 、Bあ、BA,BΣΣ\SigmaMMMA ⊆ L (M)あ⊆L(M)A \subseteq L(M)L (M)⊆ Σ∗∖ BL(M)⊆Σ∗∖BL(M) \subseteq \Sigma^*\setminus B つまり、は一連の正の例を表します。Aのすべての文字列は、DFAによって受け入れられる必要があります。 Bは否定的な例のセットを表します。Bの文字列はDFAで受け入れられません。ああAああABBBBBB DFA最小化手法を使用して、これを解決する方法はありますか?受け入れ状態、拒否状態、および「ドントケア」状態の3種類の状態を持つDFAのようなオートマトンを作成することを想像できます(「ドントケア」状態で終わるすべての入力を受け入れることができます)または拒否されました)。しかし、これを通常のDFAに最小化する方法を見つけることができますか? ポジティブな例とネガティブな例を考えると、これをDFAの学習の問題と考えることができます。 これは、正規表現ゴルフNP-Completeに触発されてい ます。、DFAではなく正規表現に対して同様の質問をします。

2
依存型理論の宇宙
依存型理論については、ホモトピー型理論のオンラインブックで読んでいます。 セクション1.3にタイプ理論章、それの階層構造の概念導入ユニバース:U0:U1:U2:⋯U0:U1:U2:⋯\mathcal{U}_0 : \mathcal{U}_1 : \mathcal{U}_2 : \cdots、ここで すべてのユニバースUiUi\mathcal{U}_iは、次のユニバース要素ですUi+1Ui+1\mathcal{U}_{i+1}。さらに、私たちの宇宙は累積的であると仮定します。つまり、ithithi^{\mathrm{th}}宇宙のすべての要素は(i+1)th(i+1)th(i+1)^{\mathrm{th}}宇宙の要素でもあるということです。 それでも、付録Aのさまざまなタイプの形成ルールを見ると、一見したところ、宇宙がバーの上に前提として表示されている場合、同じ宇宙が下に表示されています。たとえば、連産品タイプ形成ルールの場合: Γ⊢A:UiΓ⊢B:UiΓ⊢A+B:Ui(+-FORM)Γ⊢A:UiΓ⊢B:UiΓ⊢A+B:Ui(+-FORM)\dfrac{\Gamma \vdash A : \mathcal{U}_i \quad \Gamma \vdash B : \mathcal{U}i}{\Gamma \vdash A + B : \mathcal{U}_i}(+\mbox{-}FORM) だから私の質問は、なぜ階層が必要なのですか?どのような状況で、宇宙から階層の1つ上の階層にジャンプする必要がありますか?任意の組み合わせで与えられたか、本当に私には明らかにされていませんメートルを:U私は、あなたがタイプで終わることができますBでないでU I。より詳細には:付録A.2.4、A.2.5、A.2.6、A.2.7、A.2.8、A.2.9、A.2.10、A.3.2、いずれかのセクションで形成ルール言及U Iで前提と判断、または判断のみ。Am:UiAm:UiA_m: \mathcal{U}_iBBBUiUi\mathcal{U}_iUiUi\mathcal{U}_i この本は、ユニバースを割り当てる正式な方法があることも示唆しています: 引数が正しいかどうか疑わしい場合は、その引数をチェックする方法は、引数に出現するすべてのユニバースに一貫してレベルを割り当てることを試みることです。 レベルを一貫して割り当てるためのプロセスは何ですか? U:UU:U\mathcal{U}:\mathcal{U}UjUj\mathcal{U}_jUiUi\mathcal{U}_ij>ij>ij > i

2
2つの正規表現が等しいかどうかを判断するアルゴリズム
2つの任意の正規表現が与えられた場合、それらが同じ文字列のセットと一致するかどうかを判断するための「効率的な」アルゴリズムはありますか? より一般的には、2つの一致セットの共通部分のサイズを計算できますか? これを行うにはどのアルゴリズムがあり、それらはどの複雑なクラスに住んでいますか? クリーネスターを許可しない場合、それによって画像が変更されますか?

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