コンピュータサイエンス

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

1
ハノイの塔の複雑さ
私はハノイの塔の複雑さについて次の疑問にぶつかりました。 NPにありますか? 回答の試行:ペギー(証明者)が問題を解決し、ビクター(検証者)に提出したとします。ビクターはソリューションの最終状態が(線形時間で)正しいことを簡単に確認できますが、ペギーの各移動を確認して、彼女が違法な移動を行わなかったことを確認する以外に選択肢はありません。Peggyは最低2 ^ | disks |を作成する必要があるため -1移動(証明可能)、ビクターも追随する必要があります。したがって、Victorには多項式時間検証(NPの定義)がないため、NPに含めることはできません。 PSPACEにありますか?そのように思えますが、私は上記の推論を拡張する方法を考えることができません。 PSPACE完全ですか?そうではないようですが、私にはあいまいな考えしかありません。ToHが特定のインスタンスである自動計画は、PSPACE完全です。PlanningにはToHよりもはるかに難しいインスタンスがあると思います。 更新:入力=、ディスクの数。出力=各ステップでのディスク構成。これを更新した後、私はこの入力/出力形式が意思決定の問題に適合しないことに気付きました。この種の問題に対するNP、PSPACEなどの概念を取り込むための正しい形式化についてはわかりません。nnn アップデート#2:KavehとJeffのコメントの後、私は問題をより正確にすることを余儀なくされました。 入力intのペアとするディスクの数です。ディスクが行った一連の移動が、最初の移動から(disk-number、from-peg、to-peg)(disk-number、from-peg、to-peg)...の形式で書き留められている場合最後に、バイナリでエンコードされ、番目のビットを出力します。(n,i)(n,i)(n,i)nnniii エンコードについてより具体的にする必要があるかどうかを教えてください。この場合、Kavehのコメントが当てはまると思いますか?

4
一方向ネットワーク遅延の測定
これは、私が作成したネットワーク遅延の測定に関するパズルです。解決策は不可能だと思いますが、友人は同意しません。どちらにしても説得力のある説明を探しています。(これはパズルとして提起されていますが、NTPは言うまでもなく、オンラインゲームなどの通信プロトコルの設計と経験に適用できるため、このWebサイトに収まると思います。) 次の図に示すように、2つのロボットが2つの部屋にあり、一方向の待ち時間が異なるネットワークで接続されているとします。ロボットAがロボットBにメッセージを送信する場合、ロボットBが到着するのに3秒かかりますが、ロボットBがロボットAにメッセージを送信する場合、到着するのに1秒かかります。レイテンシは変化しません。 ロボットは同一であり、クロックの共有はありませんが、時間の経過を測定できます(たとえば、ストップウォッチがあります)。ロボットA(メッセージが3秒遅れる)とロボットB(メッセージが1秒遅れる)がどちらであるかはわかりません。 往復時間を発見するプロトコルは次のとおりです。 whenReceive(TICK).then(send TOCK) // Wait for other other robot to wake up send READY await READY send READY // Measure RTT t0 = startStopWatch() send TICK await TOCK t1 = stopStopWatch() rtt = t1 - t0 //ends up equalling 4 seconds 一方通行の遅延を決定するプロトコルはありますか?ロボットは、メッセージ送信の遅延が長いロボットを検出できますか?

1
固定サイズの既存のデータ構造があり、新しい要素が挿入された場合、最も古い/最後の要素を押し出しますか?
新しい要素が挿入された場合に最も古い/最後の要素をプッシュするデータ構造を探しています。たとえばD、構造を表します。Dタイプの3つの要素が含まNumber Dのデフォルト値に初期化される1, 2とし3。 D = [ 1 、2 、3 ]D=[1、2、3]D = [1, 2, 3] 場合にNumber値が含まれていることが5中に挿入されD、3押し出さされ、一方1及び2右にシフトされます。 D = [ 5 、1 、2 ]D=[5、1、2]D = [5, 1, 2] 最初に頭に浮かぶのは配列ですが、定義にはプッシュ動作が含まれていません。


3
逆アッカーマンよりも成長が遅い関数は、実行時の境界に表示されますか?
一部の複雑なアルゴリズム(union-find)には、漸近時間の複雑さに現れるほぼ一定の逆アッカーマン関数があり、ほぼ一定の逆アッカーマン項が無視される場合、最悪の場合の最適時間です。 最もよく知られている最悪の場合の時間を与える、逆アッカーマンよりも基本的に遅くなる関数(多項式または指数などの変換の下でアッカーマンと等価ではない関数の逆関数)を含む実行時間を持つ既知のアルゴリズムの例はありますか根本的な問題を解決するための複雑さ?

4
順序を無視して2つの整数を圧縮する
順序付けられたペア(x、y)を順序付けられていないペア{x、y}(セット)と比較すると、理論的にはxは最初に来るかyが表現するために正確に1ビットを必要とするかの違いは1ビットだけです。 したがって、x、yが2つの異なる32ビット整数であるセット{x、y}が与えられた場合、それらを63ビット(64ではなく)にパックできますか?63ビットの結果から元の32ビット整数を復元できますが、順序を復元することはできません。

4
コンピューターを構築するためのコンポーネントとして人間を使用していますか?
始める前に、特にこれが現実の問題ではないため、これがトピックの端にあることに気付きます(このサイトの質問のヘルプを読みました)。しかしながら: Googleに関連するものが見つかりません 純粋な観点から、確かにコンピューターサイエンスの範囲内に収まらなければなりませんか? いずれにせよ、境界を越えた場合、他のSEサイトの熱心なユーザーであるため、謝罪し、閉鎖を歓迎するので、問題を理解します。 警告はさておき、私は長い間、個々の人間が実際のタイムスケールでは解決できない問題を解決するために、人間を個別の論理コンポーネントとして使用して、機能するコンピューティングシステムを構築できるかどうか疑問に思っていました。たとえば、機械なしで島に立ち往生した多くの人間が、脱出するためにいくつかの複雑な数字を処理する必要があると想像してください。 システム内の他のグループから入力を受け取り、単純な決定(おそらくバイナリ決定ではないかもしれません)を行い、出力を他のグループに渡すように人々を配置することを想像します。 それから、データと計算の流れを制御するためにある種のプログラミング言語を開発し、個人が全体的な問題を理解することなく、この言語を使用して複雑な問題を解決できると思います。 ですから、上記は答えられる質問ではありませんが、研究、書籍、論文など、達成するために必要なこと、対処できる問題の種類、制御言語の種類を知っている人はいますか?より複雑な問題を処理するために、アーキテクチャをどのように拡張できるか? 本質的に、「理想的な」アトミック(自己完結型など)および標準のコンピューティングユニットで自由に配置できるものを探していると思います。人間の観点で考えているだけです。 このアイデアは魅力的で魅力的です。いつか試してみて、どんなパフォーマンスが達成できるかを見てみたい!ここでタグを検索していたので、私が使用していたタグは申し訳ありませんが、フィールド内に存在していると確信していますが、私が考えていることの正しい用語がわからないことにすぐに気付きました...

1
プログラムを終了するためのコンパイラを完全に最適化していますか?
Andrew W. Appelの著書「MLのModern Compiler Implementation」では、第17章で、計算可能性理論は新しい最適化変換を発明することが常に可能であることを示し、完全に最適化するコンパイラーが停止する問題を解決することを証明することに進むと述べています:プログラム出力を生成せず、停止しないQは、最適な表現であるOpt(Q)に簡単に置き換えることができ、「L:goto L」です。したがって、完全に最適化されたコンパイラは、停止する問題を解決できます。 だから私の質問はこれです:プログラムを終了するための完全に最適化されたコンパイラは存在しますか?私の唯一の考えは次のとおりです。プログラムは終了することが保証されていますが、それはまだ任意に複雑である可能性があり、具体的な最適化コンパイラCの場合、おそらくCを入力として受け取り、何らかの形でより悪いプログラムを生成するプログラムを構築できますある種のコーナーケース。 また、自分自身をプログラムの終了に制限することの意味は何ですか?

2
文脈自由言語は補完の下で閉じられますか?
文脈自由言語は補完の下で閉じられていません、私たちはそれを知っています。 私の知る限り、一部の文字サブセットでコンテキストフリー言語は、complement(!?)の下で閉じられます。a∗b∗a∗b∗a^*b^*a,ba,ba,b これが私の議論です。各CF言語は、半線形パリフイメージます。半線形集合は補数の下で閉じられます。半線形セットを表すベクトルのセットは、線形文法に簡単に変換できます。LLLπ(L)={(m,n)∣ambn∈L}π(L)={(m,n)∣ambn∈L}\pi(L) = \{ (m,n) \mid a^mb^n \in L \} 質問。この事実に簡単にアクセスできる参照はありますか? 技術的には、これらの言語はboundedと呼ばれます。つまり、一部の単語のサブセットです。w∗1…w∗kw1∗…wk∗w_1^* \dots w_k^*w1,…,wkw1,…,wkw_1,\dots,w_k この質問に対する私の動機は、の文脈自由度に関する最近の質問からです。内のその補完は処理が簡単に思えます。{anbm∣n2≠m}{anbm∣n2≠m}\{ a^nb^m \mid n^2 \neq m \}a∗b∗a∗b∗a^*b^*

2
それ自身の派生物に等しい非自明な型はありますか?
The Regular Derivative of a Regular Typeと呼ばれる記事は、Type of One-Hole Contextsは、タイプの「ジッパー」、つまりその1ホールコンテキストが、タイプ代数の微分規則に従うことを示しています。 我々は持っています: ∂xx∂x0∂x1∂x(S+T)∂x(S×T)↦1↦0↦0↦∂xS+∂xT↦∂xS×T+S×∂xT∂xx↦1∂x0↦0∂x1↦0∂x(S+T)↦∂xS+∂xT∂x(S×T)↦∂xS×T+S×∂xT\begin{align} \partial_x x &\mapsto 1 \\ \partial_x 0 &\mapsto 0 \\ \partial_x 1 &\mapsto 0 \\ \partial_x (S + T) &\mapsto \partial_x S + \partial_x T \\ \partial_x (S\times T) &\mapsto \partial_xS \times T + S \times \partial_x T …

5
計算とは正確には何ですか?
あいまいな意味での計算(コンピューターが行うこと)は知っていますが、より厳密な定義が必要です。 Dictionary.comの計算、計算、計算、計算の定義は循環的であるため、役に立ちません。 Wikipedia計算を「明確に定義されたモデルに従う任意のタイプの計算」と定義します。これは、計算を「変数を変更して、1つ以上の入力を1つ以上の結果に変換する意図的なプロセス」と定義しています。しかし、この定義には、通常は計算とは考えられていませんが、多くのアクションが計算として含まれているようです。 たとえば、これは、たとえば爆弾の爆発は計算であり、入力は点灯し、出力は爆発であるということを意味しませんか? では、計算とは正確には何ですか?

2
サブセットの合計:特殊なケースから一般的なケースに削減
ウィキペディアでは、サブセットの合計問題を、合計がゼロの整数の特定のマルチセットのサブセットを見つけることとして説明しています。さらにそれは和とサブセット発見と同等であると述べている任意の所与のため。ssssss したがって、それらは同等であるため、どちらの側にも削減が必要だと思います。から0 まで値は、設定することで簡単になります。しかし、私はゼロから削減見つけ運がなかったすなわち整数の集合与えられ、、整数の集合構築の和とのサブセット含む(いずれについてもとのサブセットとして存在している場合にのみ場合、)と合計ゼロ。ssss=0s=0s = 0sssAAABBBssssssAAA いくつかのポインタを教えてもらえますか?

1
「二重に」算術的な進行を検出するのは3SUM難しいですか?
これはインタビューの質問に触発されたものです。 我々は、整数の配列を与えられている1、... 、Nと異なるがあるかどうかを決定する必要がI < J < Kようにa1、… 、ana1,…,ana_1, \dots, a_ni < j < ki<j<ki \lt j \lt k ak− aj= aj− a私ak−aj=aj−aia_k - a_j = a_j - a_i k − j = j − ik−j=j−ik - j = j - i すなわち、シーケンスおよび{ i 、j 、k }は両方とも算術級数です。{ a私、j、k}{ai,aj,ak}\{a_i, a_j, a_k\}{ i …

1
パーティションの洗練に基づくアルゴリズムが対数線形時間よりも高速に実行される問題
パーティションの洗練は、オブジェクトの有限セットから始めて、セットを徐々に分割する手法です。DFA最小化などの一部の問題は、パーティションの洗練を非常に効率的に使用して解決できます。ウィキペディアのページにリストされているもの以外のパーティションの改良を使用して通常解決される他の問題は知りません。これらすべての問題のうち、ウィキペディアのページでは、パーティションの洗練に基づくアルゴリズムが線形時間で実行される2つについて言及しています。辞書編集的に順序付けられたトポロジカルソート[1]と辞書編集幅優先検索アルゴリズム[2]があります。 パーティションの絞り込みを非常に効率的に使用して解決できる問題の例や参考文献はありますか? [1] Sethi、Ravi、「2つのプロセッサでのグラフのスケジューリング」、SIAM Journal on Computing 5(1):73–82、1976 [2] Rose、DJ、Tarjan、RE、Lueker、GS、「グラフ上の頂点除去のアルゴリズム的側面」、SIAM Journal on Computing 5(2):266–283、1976

4
残された再帰がなぜ悪いのですか?
この質問は、コンピューターサイエンススタック交換で回答できるため、理論的コンピューターサイエンススタック交換から移行されました。 6年前に移行され ました。 コンパイラの設計で、なぜ文法で再帰を残すべきなのですか?私はそれが無限再帰を引き起こす可能性があるからだと読んでいますが、正しい再帰文法にも当てはまりませんか?

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