コンピュータサイエンス

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

1
Ukkonenのアルゴリズムの実行時間はアルファベットサイズにどのように依存しますか?
Ukkonenのアルゴリズムの漸近的な実行時間、おそらく線形(?)時間でサフィックスツリーを構築するための最も一般的なアルゴリズムの問題に関心があります。 これは、ダンガスフィールドによる本「ストリング、ツリー、シーケンスのアルゴリズム」からの引用です(セクション6.5.1)。 "... Aho-Corasick、Weiner、Ukkonen、およびMcCreightアルゴリズムはすべてスペースを必要とするか、O (m )時間境界を最小のO (m log m )およびOに置き換える必要があります(m log |Θ (m | Σ |)Θ(m|Σ|)\Theta(m|\Sigma|)O (m )O(m)O(m)O (m ログm )O(mログ⁡m)O(m \log m) "。O (m ログ| Σ | )O(mログ⁡|Σ|)O(m \log|\Sigma|) [ mmmは文字列の長さ、はアルファベットのサイズ]ΣΣ\Sigma なぜそうなのか分かりません。 スペース:まあ、サイズ配列を使用してノードからの分岐を表す場合、実際、Θ (m | Σ |)スペース使用になります。ただし、私の知る限り、ハッシュテーブル(Pythonの辞書など)を使用してブランチを保存することもできます。その後、O (1 )の子ノードにアクセスできる一方で、すべてのハッシュテーブルにΘ (m )ポインターのみを格納します(ツリーにはΘ (m )エッジがあるため)。Θ (| Σ |)Θ(|Σ|)\Theta(|\Sigma|)Θ (m | Σ …


2
すべての入力で最大50ステップで停止するチューリングマシンのセットは決定可能ですか?
LET 。Fが決定可能か再帰的に列挙可能かを決定する必要があります。決定的だと思いますが、それを証明する方法がわかりません。F= { ⟨ M⟩ :Mは最大50ステップですべての入力に対して停止するTMです}F={⟨M⟩:M is a TM which stops for every input in at most 50 steps}F = \{⟨M⟩:\text{M is a TM which stops for every input in at most 50 steps}\} 私の考え この「50ステップ」の部分はすぐに私にとってRサインを回します。特定の入力用の場合は、決定可能です。ただし、ここではすべての入力用です。無限の入力をチェックすることで、問題はco-REであると考えるようになります。つまり、その補数は受け入れられます。 おそらく、構成を確認し、50ステップ後のすべての構成が状態を受け入れないことを確認できます。どうすればよいですか?

2
ルール110チューリングはどのように完了しますか?
セルオートマトンのルール110のウィキペディアのページを読みましたが、それらがどのように機能するかは多かれ少なかれ知っています(ルールのセットが次の1または0を描画する場所を決定します)。 私はちょうどチューリングが完了していると読みましたが、「ルール110」で「プログラム」する方法を推測することさえできませんか?


5
二部グラフの最大独立セット
私はバイパライトグラフの最大独立セットを見つけようとしています。 「1998年5月13日-ワシントン大学-CSE 521-ネットワークフローのアプリケーション」というメモで次のことがわかりました。 問題: 二部グラフ与えられると、可能な限り大きな独立集合を見つけます。ここで、およびです。セットの要素間にのエッジがない場合、セットは独立しています。G = (U、V、E)G=(U,V,E)G = (U,V,E)うん′∪ V′U′∪V′U' \cup V'うん′⊆ UU′⊆UU' \subseteq UV′⊆ VV′⊆VV' \subseteq VEEE 解決: 頂点フローグラフを作成します。各エッジには、から までの無限の容量エッジがあります。各には、からまで単位容量エッジがあり、各には、から までの単位容量エッジがあります。U∪V∪{s,t}U∪V∪{s,t}U \cup V \cup \{s,t\}(u,v)∈E(u,v)∈E(u,v) \in Euuuvvvu∈Uu∈Uu \in Usssuuuv∈Vv∈Vv \in Vvvvttt 有限容量カット検索と、と。レッツ と。セットは、カットを横切る無限の容量のエッジがないため、独立しています。カットのサイズは。これは、独立セットを可能な限り大きくするために、カットを可能な限り小さくします。(S,T)(S,T)(S,T)s∈Ss∈Ss \in St∈Tt∈Tt \in TU′=U∩SU′=U∩SU' = U \cap SV′=V∩TV′=V∩TV' = V \cap TU′∪V′U′∪V′U' \cup V'|U−U′|+|V−V′|=|U|+|V|−|U′∪V′||U−U′|+|V−V′|=|U|+|V|−|U′∪V′||U - U'| …

3
線は2セットのポイントを分離します
2セットのポイントを線で区切ることができるかどうかを識別する方法がある場合 我々は2つの点の集合有するおよび分離する線が存在する場合と、その結果、すべての点のみ線の一方の側に、そしてすべての点とのみ他方の側に。B A B A A B BAAABBBAAABBBAAAAAABBBBBB 私が思いついた最も素朴なアルゴリズムは、と凸多角形を構築し、それらの交差をテストすることです。凸多角形の構築に関しては、時間の複雑さは必要があると思われ。実際、時間の複雑さの改善は期待していませんが、改善できるかどうかはわかりません。しかし、少なくとも、そのような線があるかどうかを判断するためのより美しい方法があるはずです。B O (n log h )AAABBBO(nlogh)O(nlog⁡h)O(n\log h)

3
2つのアルゴリズムの比較にランタイムではなく比較を使用する理由
いくつかのCS研究論文では、2つのアルゴリズムの効率を比較するために、実際の計算時間自体ではなく、アルゴリズムの主要な比較の総数が使用されていることに気付きました。両方のプログラムを実行し、アルゴリズムの実行に必要な合計時間をカウントすることで、どちらが優れているかを比較できないのはなぜですか?

1
ランダムテストグラフアルゴリズムの入力を生成しますか?
アルゴリズムをテストする場合、一般的なアプローチはランダムテストです。ある分布(通常は均一)に従ってかなりの数の入力を生成し、それらに対してアルゴリズムを実行して、正当性を検証します。最新のテストフレームワークでは、いくつかの制限がありますが、アルゴリズムシグネチャを指定して自動的に入力を生成できます。 入力が数字、リスト、または文字列の場合、そのような入力を簡単に生成します。ツリーはより難しくなりますが、それでも簡単です(確率的な文脈自由文法または同様のアプローチを使用)。 ランダムグラフを(効率的に)生成するにはどうすればよいですか?通常、グラフをランダムに均一に選択することは、望むものではありません。それらは接続されているか、平面であるか、サイクルフリーであるか、他のプロパティを満たしている必要があります。拒否サンプリングは、潜在的に膨大な望ましくないグラフのセットのため、次善のようです。 注目すべき有用な分布は何ですか?ここで有用なのは グラフは手元のアルゴリズムを十分にテストする可能性が高く、 効果的かつ効率的に生成できます。 ランダムグラフには多くのモデルがあることを知っているので、この点でグラフ生成に最適な洞察に感謝します。 「あるアルゴリズム」が一般的すぎる場合は、テスト中のアルゴリズムの具体的なクラスとして、最短パス検索アルゴリズムを使用してください。テスト用のグラフは、接続されており、かなり高密度である必要があります(高い確率で、または少なくとも予想)。テストの場合、最適な解決策は、最短のパスの周りにランダムなグラフを作成して、目的の結果を知ることです(別のアルゴリズムを使用する必要はありません)。

2
無向グラフ上の最短経路?
だから私はこの(多少基本的な)質問はここに属していると思った: サイズが100のノードのグラフが10x10のパターンで配列されているとします(チェス盤を考えてください)。グラフは無向であり、重み付けされていません。グラフを移動するには、3つのスペースを前方に移動し、1つのスペースを右または左に移動します(チェスナイトがボード上を移動するのと同様)。 開始ノードが固定されている場合、ボード上の他のノードへの最短パスをどのように見つけますか? 実行可能な移動であるノード間にのみエッジがあると想像しました。したがって、この情報が与えられたら、開始ノードから終了ノードまでの最短パスを見つけたいと思います。 私の最初の考えは、各エッジは重み1で重み付けされるということでした。しかし、グラフは無向であるため、ジクストラは理想的なフィットではありません。したがって、私は深さ優先検索の変更された形式を使用してそれを行うことにしました。 しかし、検索を使用して最短経路を取得する方法を視覚化することはできませんでした。 私が試したもう1つのことは、開始ノードをルートとしてツリー形式でグラフを配置し、次に希望の終了ノードを与えた最も浅い(最も低い行番号)結果を選択することでした...これはうまくいきましたが、非常に効率的ではなかったため、大きなグラフでは機能しません。 誰かが私にこの方向性を正しい方向に向けるようなアイデアを持っていますか? どうもありがとうございました。 (グラフの視覚化を試みましたが、評判が悪いためできませんでした)

4
言語証明するポンピング補題を用いて
私はそれを証明するために、ポンプの補題を使用しようとしている、正規ではありません。L = { (01 )m2m| M ≥ 0 }L={(01)m2m∣m≥0}L = \{(01)^m 2^m \mid m \ge0\} これは私がこれまでに持っているものです:が規則的であり、pをポンピング長とし、w = (01 )p 2 pとします。|のような ポンピング分解w = x y zを考慮してください。y | > 0および| x y | ≤ P。LLLpppw = (01 )p2pw=(01)p2pw = (01)^p 2^pw = x yzw=xyzw = xyz| y| >0|y|>0|y| >0| xy|≤p|xy|≤p|xy| \le …

1
分散アルファベータプルーニング
私は、分散アーキテクチャでアルファ-ベータプルーニングを使用してチェスのミニマックス検索ツリーを処理できる効率的なアルゴリズムを探しています。私が見つけたアルゴリズム(PVS、YBWC、DTSは下記参照)はすべてかなり古い(1990年が最新)。それ以来、多くの大きな進歩があったと思います。この分野の現在の標準は何ですか? また、私が読んだ研究論文からは理解できないので、DTSについての馬鹿の説明を教えてください。 上記のアルゴリズム: PVS:原理変動の分割 YBWC:ヤングブラザーズウェイトコンセプト DTS:動的なツリー分割 ここですべて議論されます。

3
特定の半径の最大包囲円
私は次の問題へのアプローチを見つけようとします: 点と半径のセットが与えられたら、円の中心点を見つけて、円がそのセットの最大数の点を含むようにします。実行時間はなければなりません。SSSrrrO(n2)O(n2)O(n^2) 最初は、最小の包囲円問題に似ているように見えましたが、これはで簡単に解決できます。アイデアは、任意の中心を設定し、すべての点を囲むことでした。次に、段階的に、左/右端の点に触れるように円を置き換え、指定された半径に円を縮小します。明らかに、これは機能しません。O(n2)O(n2)O(n^2)SSS

1
アルゴリズムが指数関数的に高速なアルゴリズムを受け入れるような決定問題
Hromkovičの困難な問題に対するアルゴリズム(第2版)には、次の定理があります(2.3.3.3、117 ページ)。 (決定可能)決定問題のあるすべてのアルゴリズムのためにこのようなことをA解くことPは別のアルゴリズムが存在するA "も解決Pを、さらに満たしては、PPPAAAPPPA′A′A'PPP ∀∞n∈N.TimeA′(n)=log2TimeA(n)∀∞n∈N.TimeA′(n)=log2⁡TimeA(n)\qquad \forall^\infty n \in \mathbb{N}. \mathrm{Time}_{A'}(n) = \log_2 \mathrm{Time}_A(n) の最悪の場合の実行時間であるAサイズの入力にN及び ∀ ∞「以外のすべての有限多くのための」手段。TimeA(n)TimeA(n)\mathrm{Time}_A(n)AAAnnn∀∞∀∞\forall^\infty 証拠は与えられておらず、私たちはこれをどのようにすればよいか分かりません。実際、これは非常に直感に反します。定理はどのように証明できますか?

3
この言語は、ツインプライムを使用して定義されていますか?
させる L = { an∣ ∃P ≥ n個 p、p + 2 は素数} です。 L={an∣∃p≥n p, p+2 are prime}.\qquad L = \{a^n \mid \exists_{p \geq n}\ p\,,\ p+2 \text{ are prime}\}. ある、通常の?LLL この質問は一見不審に見えましたが、それは双子の素数予想と関係していることに気付きました。私の問題は、推測がまだ解決されていないということです。そのため、言語が規則的であると判断する方法はわかりません。

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