コンピュータサイエンス

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

1
「一方向の」コンサートで負けた
あなたと友人は、コンサートのライン上でお互いを失いました。正式には、それぞれが何らかの整数座標にあり、より高い座標に向かって歩くか、所定の位置にとどまることがあります。 あなたとあなたの友人がまったく同じアルゴリズムに従っていると仮定して(そして、いいえ、「if(name == "R B")何もしない:)」と仮定し、あなたの二人の間の最初の距離はでしたあなたに知られている)。バツxx あなたとあなたの友人が出会うまで、予想される歩行距離を最小化するアルゴリズムは何ですか? あなたはあなたの友人とあなた自身が同じ一定の速度で動いていると仮定するかもしれません。 簡単なアルゴリズムの例は次のようになります。 ステージ(0から開始):nnn000 右のwpにステップ歩きます13n3n3^nそれ以外の場合は 2または3n時間単位待機します。1212\frac{1}{2}3n3n3^n このアルゴリズムを見るために、友人は確率1で会います。ステージで何が起こるかを考えます。x一歩進んだ友人が常に歩き、もう一方が常に所定の位置に留まったとしても、両者の距離は x + 1 + 3 + 9 + … + 3 log 3 x = 2 x + x − 1(log3x+1)(log3⁡x+1)(\log_3 x+1)xxxx+1+3+9+…+3log3x=2x+x−12≤3xx+1+3+9+…+3log3⁡x=2x+x−12≤3xx+1+3+9+\ldots+3^{\log_3 x}=2x+\frac{x-1}{2}\leq 3x したがって、反復で、歩くことを選択した友人は、3 log 3 x + 1 = 3 xの距離をカバーするため、確率1になります。log3x+1log3⁡x+1\log_3 x+13log3x+1=3x3log3⁡x+1=3x3^{\log_3 x+1}=3x、背後にいる友人が追いつき、彼らは会います。1414\frac{1}{4} 単純な最適化(歩行距離を短縮する)は、ステップを歩く代わりに、c xステップを歩くことです。ここで、cは2 + …

3
ガロアの定理に複雑な視点はありますか?
ガロアの定理は、係数とラジカルの有理関数を使用して5以上の次数の多項式の根を表現できないと効果的に述べています。 次の形式の決定問題を考えます。「実根多項式与えられ、ppp数kは少なくともkのギャップで 3番目と4番目に高い根pppですか?」 この決定問題の証明証明書は、この多項式の根のセットであり、短い証明書であるため、NPNPNP BUTはガロアの定理ではなく、この証明書を見つける決定論的なアルゴリズムは存在しないと思われます決定質問?(およびこのプロパティがtrueの場合、この質問に対する答えを決定するアルゴリズムが除外されます) それでは、この決定の質問はどの複雑さのクラスにありますか? 私が見たすべてのNP完全な質問には、それらを解決するために利用可能な簡単な指数時間アルゴリズムが常にあります。これがすべてのNP完全な質問に常に当てはまるプロパティであると予想されるかどうかはわかりません。この決定の質問では、これは真実ではないようです。

1
アクターモデルと通信シーケンシャルプロセス(CSP)の違い
私たちが見てみると俳優のモデルと通信シーケンシャル、プロセス、我々は、彼らが両方やろうとしていることがわかり同時実行をに基づいてメッセージパッシング、まだ彼らは別個のものです。 (私たちは、の実装を参照CSPモデルに行く-LANGのゴルーチン(とClojureのの core.async)とにおけるアクターモデルScalaの アッカのツールキット) アクターモデルとCSPの違いの簡単なリストを取得しようとしています。これまでのところ: アクターのメッセージの受け渡しは非同期で、CSPメッセージの受け渡しは同期です アクターは構成可能であり、CSPは(必ずしも)構成可能ではありません 俳優は常に持っている無限の非決定論、CSPがいるかもしれ有界または非有界非決定論を アクターには可変トポロジがあり、CSPには固定トポロジがあります アクターには局所性の原則があり、CSPには局所性がありません 俳優はその行動を中心に設計されていますが、CSPには必ずしもそうとは限りません これは正しいです?不足しているものはありますか? 仮定 「俳優モデル」と言うとき-私はScalaのAkkaフレームワークでの実装の背後にある理論的基礎を意味します

2
バランスを取る必要があるコンピューターの対戦相手へのスコアリングアプローチ
この質問は、私が作成し、いくつかのコンピューターゲームで現在使用されているか、使用される予定のコンピューターの対戦相手に対するアプローチに関するものです。 バックグラウンド 昨年、「Minesweeper Flags」と呼ばれるゲームでコンピューターの対戦相手を改善しようとしたとき(簡単な説明:対戦相手よりも多くの地雷を奪わなければならない、ターンベースのマルチプレイヤーバージョンのMinesweeper )、アルゴリズムの動作を大きく変えました。 。if-else-if-elseのようなアプローチを使用する代わりに、指定された重みを持つ「スコアラー」のセットを使用して、最適な動きを決定しています。 マインスイーパフラッグのようなゲームでは、地雷を奪う可能性が最も高いのは動きを作ることだけですが、それほど単純ではありません。通常、コンピューターがどの動きをするかは、現在のゲーム状態での特定の動きのいくつかの機能に依存します。機能の例: この動きが地雷を採点する確率はどのくらいですか? ここで相手に何かを明かす確率はどれくらいですか? システムの説明 システムは基本的に次のように機能します。 「事前採点者」:現在のゲームの状態に対して事前分析が行われます(掃海艇の旗に関しては、これは通常、すべての確率の計算です) 「得点者」:通常の得点者のセットは、各可能な動きの得点を決定するように求められ、各得点者はそれ自身の基準に従って得点を適用します。得点者は、行われた事前分析の結果を確認できます。 上記のステップで計算されたスコアは合計され、移動のスコアに設定されます。 同じスコアのすべての動きが同じランクになるように、動きはスコアに従ってソートされ、ランク付けされます。 「ポストスコアラー」:上記の結果は、ポストスコアラー自身のルールに従って、任意のフィールドのスコアを任意の方法で変更できる「ポストスコアラー」に送信できます。 プリスコアラー、スコアラー(ウェイト付き)、ポストスコアラーの束を組み合わせると、スコア構成と呼ばれるものになります。 結果例 これは、掃海艇旗にスコアが適用された例です。これは得点されたマップです: そして、これは実際のスコア設定の出力です。可能な動きのランクを示しています。1が最高ランクで、白で強調表示されています。 非常に柔軟なコードを記述したおかげで、このAIへのアプローチは他のゲームにも同様に挿入できます。 長所と短所 以下に、このシステムの長所と短所をいくつか挙げます。 長所 AIのさまざまな構成を非常に簡単に作成できます。 遺伝的アルゴリズムで使用することは可能です:各スコアラーには関連する重みがあり、重みが遺伝子になることができます。 いくつかのツールを使用して、特定の移動が行われた理由と、その移動の主な責任者を確認できます。 ツールを使用して、可能な動きの全体的なスコア/ランクのマップを作成することができます(上のスクリーンショットのように) 人間のプレイ方法にスコアを適用することにより、人間が行うと思われる動きをしようとする「#AI_Mirror」を作成することができます 短所 AIを可能な限り良好にプレイするために、スコア構成を「正しく」調整することは非常に困難です。 ご質問 ここで構築したシステムは、AIの世界で広く知られていますか?実際のAI用語では何と呼ばれますか? このアプローチは理にかなっていますか、または推奨する別のアプローチがありますか? スコア設定を微調整するプロセスを簡単にする方法はありますか? 最後の質問について、私は遺伝的アルゴリズムを使用する可能性を知っています。SARSAについても少し気づいていますここに)。SARSAの問題は、ゲームが終わるまで報酬がわからないことだと思います。最良の動きは、報酬(地雷)をまったく与えない動きであることが多いです。現在の勝つ可能性は、現在のスコア(あなたと対戦相手が何個の地雷を奪ったか)と、現在のマップがどのようなものかによって異なります。 この質問はもともと、今では機能しない人工知能サイトに投稿されました。 このアプローチに使用される(Java)コードは、現在Code Reviewに投稿されています。

2
許容されるヒューリスティックは最適なソリューションをどのように保証しますか?
A *(または他の最適なパス検索アルゴリズム)を使用する場合、使用されるヒューリスティックは許容できる必要があります。つまり、実際のソリューションパスの長さ(または移動)を過大評価してはなりません。 許容されるヒューリスティックは最適なソリューションをどのように保証しますか?直感的な説明を探しています。 必要に応じて、8パズルのマンハッタン距離ヒューリスティックを使用して説明できます。

2
HTMのパフォーマンスに関する批判は何ですか?
私はこの階層的一時記憶(HTM)の存在について最近知りました。私はすでに「Hierarchical Temporal Memory:Concepts、Theory and Terminology」(Jeff Hawkins and Dileep Georgeによる)という文書を読んでいますが、理解しやすいと思われますが、1つの赤い旗は、文書が査読されておらず、なぜそうすべきかを説明しようとしていない詳細に作業します。 いくつかの独立したソースを探してみました。そのパフォーマンスを他のものと比較するいくつかの論文を見つけましたが、なぜそれがうまく機能する(またはそうでない)のかについては説明していません。私はそれが主流の専門家によって軽lookedされていると主張するコメントに気付きましたが、実際の批判を見つけることができませんでした。 HTMのパフォーマンスに関する批判は何ですか?HTMは汎用的であるため、ドメイン固有の批判は、より根本的な問題に関連している必要があります。 さらに、使用するトレーニングデータは膨大で、数か月のトレーニングセッションでも十分です。基本的に、トレーニングの規模や期間に関する批判は関係ありません。

2
Google Code Jam万里の長城問題のより速い解決策はありますか
次のGoogle Code Jamラウンド1Cの質問を検討してください。 万里の長城は無限の線から始まり、すべての場所の高さはです。000 いくつかの部族NNN、N≤1000N≤1000N \le 1000は、開始日DDD、開始強度SSS、開始西座標WWW、開始東座標Eのパラメーターに従って、壁を壁に攻撃します。EEE。この最初の攻撃は、DDD日、範囲[W,E][W,E][W,E]、強度SSSます。[W、E]内に[W,E][W,E][W,E]高さ&lt;Sの万里の長城の部分がある場合&lt;S&lt;S< S、攻撃は成功し、その日の終わりに、[W,E][W,E][W,E]の高さ&lt;S&lt;S< Sは高さになるSSS(またはその日、他の攻撃が同じセグメントに強度ヒットした場合)S′&gt;SS′&gt;SS' > S 各部族は退却する前に最大攻撃を実行し、各攻撃はその前の攻撃から繰り返し決定されます。すべての部族は、いくつか持っている、、および攻撃の彼らの順序を決定します。お待ちしております攻撃の間に日を、彼らは攻撃範囲に移動します各攻撃(ネガティブ=西、正の単位を=東)、ただし、範囲のサイズは同じままであり、各攻撃の後、その強さも一定の値で増加/減少します。100010001000δDδD\delta_DδXδX\delta_XδSδS\delta_SδD≥1δD≥1\delta_D \ge 1δXδX\delta_X 問題の目標は、攻撃している部族の完全な説明が与えられれば、攻撃が成功する数を決定することです。 約20秒で動作するソリューションをコーディングできました。実装したソリューションにはO(AlogA+(A+X)logX)O(Alog⁡A+(A+X)log⁡X)O(A\log A + (A+X)\log X)時間かかります。ここで、A=A=A =攻撃の総数シミュレーション(最大100000010000001000000)、およびX=X=X =攻撃範囲の一意のエッジポイントの総数(最大200000020000002000000)。 高いレベルで、私のソリューション: すべての部族情報を読み込みます 攻撃範囲のすべての一意のXXX座標を計算しますO(A)O(A)O(A) 最小の高さの値を追跡するXXX範囲上の遅延更新されたバイナリツリーとして壁を表します。リーフは、間に何もない2つのXXX座標のスパンであり、すべての親ノードは、子によってカバーされる連続的な間隔を表します。- O(XlogX)O(Xlog⁡X)O(X \log X) すべての部族が実行するすべての攻撃を生成し、日ごとにソートしますO(AlogA)O(Alog⁡A)O(A \log A) 各攻撃について、成功するかどうかを確認します(logXlog⁡X\log Xクエリ時間)。日が変わったら、未処理のすべての成功した攻撃をループし、それに応じてウォールを更新します(logXlog⁡X\log X各攻撃の\ log X更新時間)。- O(AlogX)O(Alog⁡X)O(A\log X) 私の質問はこれです:よりも良い方法はありか?おそらく、部族の連続攻撃の線形性を利用する戦略的な方法はありますか?20秒は、意図したソリューションには長すぎると感じます(ただし、Javaはそのせいかもしれません)。O(AlogA+(A+X)logX)O(Alog⁡A+(A+X)log⁡X)O(A\log A + (A+X)\log X)

1
パーセプトロンは忘れることができますか?
ユーザーが分類されたサンプルを継続的に追加し、モデルをオンラインで更新できるオンラインWebベースの機械学習システムを構築したいと思います。パーセプトロンまたは同様のオンライン学習アルゴリズムを使用したいと思います。 しかし、ユーザーは間違いを犯し、無関係な例を挿入する場合があります。その場合、例のセット全体でパーセプトロンを再トレーニングすることなく、特定の例を削除するオプションが必要です(非常に大きい場合があります)。 これは可能ですか?

1
任意のカバーを頂点カバーに変換する
平面グラフが与えられ、各エッジの長さ平面stへの埋め込みを示すようにします。さらに、各点が含まれる点のセットがあります。さらに、任意の点、までの測地線距離が最大1のが存在することを保持します。(距離は内の最短距離として測定されます。)G 1 C C ∈ C G P G C ∈ C P GG = (V、E)G=(V,E)G=(V,E)GG\mathcal{G}111CCCC ∈ Cc∈Cc \in CGG\mathcal{G}pppGG\mathcal{G}c∈Cc∈Cc \in CpppGG\mathcal{G} 上記の条件に当てはまるが与えられた、簡単に頂点カバーに変換したり、別の言い方をすれば、同じカーディナリティのに変換したり、任意のを配置できると主張したい は頂点にあり、はカバーしています。、C '、C ∈ C ' G G C ' GCCCC′C′C'c∈C′c∈C′c \in C'GG\mathcal{G}GGGC′C′C'GGG 私のアプローチは、エッジの方向を決めて、円弧の終了頂点でのポイントを移動することでした。しかし、これまでのところ、からを生成する正しい方向を見つけることができませんでした。C ′ CCCCC′C′C'CCC 誰にもアイデアがありますか?


2
二分木の色を赤黒木にする
一般的なインタビューの質問は、特定のバイナリツリーが高さのバランスが取れているかどうかを判断するアルゴリズムを提供することです(AVLツリー定義)。 赤黒木で似たようなことができるのかと思っていました。 任意の未着色のバイナリツリー(NULLノード)が与えられた場合、ノードが赤黒ツリーのすべてのプロパティを満足するようにノードを赤/黒に色付けできるかどうかを判断できる「高速」アルゴリズムがあります。 (この質問のような定義)? 最初の考えは、NULLノードを削除して、結果のツリーが赤黒ツリーになり得るかどうかを再帰的に検証しようとすることでしたが、それはどこにも行かないようでした。 私は論文を(簡単に)ウェブ検索しましたが、この問題に対処していると思われるものを見つけることができませんでした。 単純なものが欠けている可能性があります。

2
密なNP完全言語はP = NPを意味します
ような多項式が存在する場合、言語は密であると言いますすべての換言すれば、任意の所与な長さのためにの長さの唯一の多項式多くの単語が存在ではないJ⊆Σ∗J⊆Σ∗J \subseteq \Sigma^{*}ppp|Jc∩Σn|≤p(n)|Jc∩Σn|≤p(n) |J^c \cap \Sigma^n| \leq p(n)n∈N.n∈N.n \in \mathbb{N}.nnnnnnJ.J.J. 私が現在勉強している問題は、次のことを示すように求めています 密な完全言語が存在する場合、NPNPNPP=NPP=NPP = NP テキストが示唆しているのは、 -への多項式簡約を検討し、要素も生成しながら、指定された式を満たそうとするアルゴリズムを構築すること333SATSATSATCNFCNFCNFJc.Jc.J^c. 私が思っているのは もっと直接的な証拠はありますか?この概念はより一般的な設定で知られていますか?

3
バイナリ最小ヒープのキーの増加とキーの減少
バイナリヒープの多くの議論では、通常、min-heapでサポートされている操作として減少キーのみがリストされています。たとえば、CLR 6.1章およびこのウィキペディアのページ。通常、min-heapのキーが増加しないのはなぜですか?増加した要素(x)を最小の子と繰り返し交換することにより、O(height)で、子がxより大きくなるまでそれを行うことができると思います。 例えば IncreaseKey(int pos, int newValue) { heap[pos] = newValue; while(left(pos) &lt; heap.Length) { int smallest = left(pos); if(heap[right(pos)] &lt; heap[left(pos)]) smallest = right(pos); if(heap[pos] &lt; heap[smallest]) { swap(smallest, pos); pos= smallest; } else return; } } 上記は正しいですか?そうでない場合、なぜですか?はいの場合、min-heapのキーがリストされないのはなぜですか?

1
チューリングマシンに関連する興味深い計量空間
この質問では、すべての入力で停止するチューリングマシンのみを考慮します。もし、その後によって我々は、そのコードであるチューリングマシン表す。T K Kk∈Nk∈Nk \in \mathbb{N}TkTkT_kkkk 次の機能を検討してください s(x,y)=min{k∣|L(Tk)∩{x,y}|=1}s(x,y)=min{k∣|L(Tk)∩{x,y}|=1}s(x,y) = \min\{k \mid |L(T_k) \cap \{x,y\}| = 1\} つまり、s(x,y)s(x,y)s(x,y)は、ストリングx、yの 1つを正確に認識する最小のチューリングマシンのコードです。x,y.x,y.x,y.次のマップを定義できます d(x,y)={2−s(x,y)0if x≠y,otherwise.d(x,y)={2−s(x,y)if x≠y,0otherwise.d(x,y) = \left\{ \begin{array}{ll} 2^{-s(x,y)} & \mbox{if } x \ne y, \\ 0 & \mbox{otherwise.} \end{array} \right. d(x,y)d(x,y)d(x,y)が\ Sigma ^ {*}にメトリック空間(実際にはウルトラメトリック)を誘導することをすぐに確認できますΣ∗.Σ∗.\Sigma^{*}. ここで、f:Σ∗↦Σ∗f:Σ∗↦Σ∗f:\Sigma^{*} \mapsto \Sigma^{*}が一様に連続する関数である場合、すべての再帰言語Lに対して、f−1(L)f−1(L)f^{-1}(L)も再帰的であることを証明したいと思います。 言い換えれば、fffをすべてのϵ&gt;0ϵ&gt;0\epsilon > 0に対してδ&gt;0δ&gt;0\delta > 0ようなマップとし、文字列x,y∈Σ∗x,y∈Σ∗x,y \in \Sigma^{*} …

1
補数のPDAを構築し
このため、も可能であるかどうかは疑問に思って。したがって、単語を区別することができますPDA のw ∈ { n個のB N C N | N ≥ 0を}の残りの部分から{ * B * C * }としても私には矛盾した鳴り、それを受け入れるかもしれません。{ anbncn| N ≥ 0 } ∉ C F L{anbncn∣n≥0}∉CFL\{a^n b^n c^n \mid n \geq 0\} \not\in \mathrm{CFL}W ∈ { Anbncn| N ≥ 0 }w∈{anbncn∣n≥0}w\in\{a^n b^n c^n \mid n \geq 0\}{ a∗b∗c∗}{a∗b∗c∗}\{a^*b^*c^*\} 私はPDAの非決定論的な性質を利用する必要があると思いますが、私はアイデアを失っています。アドバイスをいただければ幸いです。

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