コンピュータサイエンス

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

1
不等価なバイナリ行列の構築
要素0または1を使用して、すべての非等価行列(または必要に応じて)を構築しようとしています。等価行列を与える操作は、iおよびj行とiおよびj列の同時交換です。 。例えば。for8×88×88\times 8n×nn×nn\times n1↔21↔21\leftrightarrow2 ⎛⎝⎜001010010⎞⎠⎟〜⎛⎝⎜100001100⎞⎠⎟(000011100)〜(101000010)\begin{equation} \left( \begin{array}{ccc} 0 & 0 & 0 \\ 0 & 1 & 1 \\ 1 & 0 & 0 \end{array} \right) \sim \left( \begin{array}{ccc} 1 & 0 & 1 \\ 0 & 0 & 0 \\ 0 & 1 & 0 \end{array} \right) \end{equation} 最終的には、各クラス内に等価なマトリックスがいくつあるかをカウントする必要がありますが、Polyaのカウント定理はそれを行うことができると思います。今のところ、各非等価クラスに1つのマトリックスを構築するアルゴリズム的な方法が必要です。何か案は?

1
TLBとデータキャッシュはどのように機能しますか?
私は試験のために勉強しようとしていますが、TLBとデータキャッシュがどのように機能するかについて混乱していることに気付きました。 TLBは本質的に、最近使用した物理アドレスのキャッシュであることを理解しています。しかし、私は教科書の図(下図)を見ていましたが、何が起こっているのかわかりません。突然物理アドレスを分割し、それを使用してキャッシュのインデックスを作成すると、推測します。しかし、なぜキャッシュとデータを別々に表示するのですか?そして、なぜバイトオフセットがフローティングのままになっているのですか?キャッシュにはデータも保存されるはずです。唯一の目的は、その中にヒットまたはミスがあるかどうかを判断することではないと思います。 私は事前に私の無知をおaびしますが、本はかろうじてTLBを扱っており(ページに少し似ています)、TLBとキャッシュの関係を説明するのにあまり良い仕事をしていません。

1
なぜ「a」のシーケンスにbzip2を使用する圧縮率が非常に急なのですか?
library(ggplot2) compress <- function(str) { length(memCompress(paste(rep("a", str), collapse=""), type="bzip2")) / nchar(paste(rep("a", str), collapse="")) } cr <- data.frame(i = 1:10000, r = sapply(1:10000, compress)) ggplot(cr[cr$i>=5000 & cr$i<=10000,], aes(x=i, y=r)) + geom_line() 圧縮率は「a」で37から始まり、39「a」で損益分岐点に達します(圧縮率= 1)。チャートは非常に滑らかに始​​まり、98 "a"の間、そしてますます小さな間隔で突然エッジが上がります。 地元の安値と滑らかなセクションも非常に不安定とランダムに見えます。誰かがなぜBZIP2ショー私には、この例では、この動作を説明できますか?

6
1つの配列に2つのスタックを実装する方法は?
まず、これは宿題の問題ではないと言いたいです。私はアルゴリズムの紹介-優れたプログラマーになるための有名なCLRSテキストを読んでいます。私はこの本で与えられた問題と演習を自分で解決しようとしています。 私が解決しようとしているエクササイズ10.1-2をから第10章基本データ構造 CLRS第二版から。その状態は次のとおりです。 1つの配列A [1..n]に2つのスタックを実装する方法を説明します。両方のスタックの要素の合計数がnでない限り、どちらのスタックもオーバーフローしないようにします。PUSHおよびPOP操作はO(1)時間で実行する必要があります。 私がこれまでに考え出した解決策は次のとおりです。 配列A [1..n]がS1 [1..i]とS2 [i..n]の 2つのスタックを実装するようにします。 用PUSH-S1およびPUSH-S2操作、スタックが「満杯」である場合、その後に要素をプッシュスタート他のスタック(例えば、スタック場合S1は新しい要素を押し込むことしようとしているときに一杯になった後にその要素をプッシュスタックS2およびその逆)。 このアプローチの問題は、どの要素がどのスタックに属しているかを「記憶」する方法がないため、POP-S1またはPOP-S2を確実に使用できないことです。スタックの要素が(キー、値)のペアであり、キーがスタック番号である場合、要素をポップするには、最悪の場合、iまたは(ni)回-O(n )(ここで間違っている場合は、お気軽に修正してください)、これはO(1)ではありません。 私はかなり長い間質問に頭を打ち続けてきました。私は正しい軌道に乗っていますか?誰かがこの問題を解決するための私の可能なポインターを与えることができますか? 一般に、これらの問題についてどのように「考える」べきですか?または、本当に知的な人だけがこの種の問題を解決できますか?これらのような問題に取り組む/解決する(つまり、経験を積む)ことで、私はこれで良くなりますか? 悟りを待っています。

1
組合の存在下でのNFAとDFAの指数関数的分離
最近、興味深い質問が出され、その後削除されました。 通常の言語LLL場合、そのDFA複雑度はそれを受け入れる最小DFAのサイズであり、そのNFA複雑度はそれを受け入れる最小NFAのサイズです。少なくともアルファベットのサイズに制限がない場合は、2つの複雑さの間に指数関数的な分離があることはよく知られています。実際、すべての記号を含まないすべての単語で構成されるアルファベット{ 1 、… 、n }上の言語LnLnL_nを考えます。Myhill-Nerodeの定理を使用すると、DFAの複雑度2 nを簡単に計算できます。一方、NFAの複雑さだけでnは{1,…,n}{1,…,n}\{1,\ldots,n\}2n2n2^nnnn(複数の初期状態が許可されている場合、そうでない場合は)。n+1n+1n+1 当該削除された質問複雑覆うDFA最小である言語のようにLが最大でDFAの複雑さの言語の(必ずしも互いに素ではない)組合のように書くことができるCを。L nの複雑さをカバーするDFA はわずか2です。CCCLLLCCCLnLnL_n222 NFAの複雑さとDFAの複雑さをカバーする指数関数的な分離はありますか?

2
高速アルゴリズムを使用しない
多項式時間で解くことができる難しい決定問題の例は何ですか?最適なアルゴリズムが「遅い」問題、または既知の最速のアルゴリズムが「遅い」問題を探しています。 以下に2つの例を示します。 完全なグラフの認識。FOCS'03の論文[1]Cornuéjolsで、LiuとVuskovicは問題に対して時間アルゴリズムを与えました。ここでnは頂点の数です。この限界が改善されたかどうかはわかりませんが、理解しているように、より高速なアルゴリズムを取得するには、多少のブレークスルーが必要です。(著者は[1]のジャーナルバージョンでO (n 9)時間アルゴリズムを提供しています。こちらを参照してください)。O(n10)O(n10)O(n^{10})nnnO(n9)O(n9)O(n^9) マップグラフの認識。Thorup [2]は、指数が(約?)かなり複雑なアルゴリズムを提供しました。おそらくこれはさらに劇的に改善されたかもしれませんが、私は良い参考資料を持っていません。120120120 私は特に実用的な重要性を持つ問題に興味があり、「高速」(または実用的な)アルゴリズムの取得は数年前から開かれています。 [1]Cornuéjols、Gérard、Xinming Liu、Kristina Vuskovic。「完全なグラフを認識する多項式アルゴリズム。」Foundation of Computer Science、2003。Proceedings。第44回IEEEシンポジウム。IEEE、2003。 [2]ソラップ、ミケル。「多項式時間でグラフをマップします。」1998年のコンピューターサイエンスの基礎。議事録。第39回年次シンポジウム。IEEE、1998年。

3
DAGを新しいDAGに縮小する最小サイズ
DAGがあります。ノード関数がありますF:V→NF:V→NF\colon V\to \mathbb N(大まかに言うと、ノードに番号を付けます)。これらのルールを使用して、新しい有向グラフを作成します。 F(x)≠F(y)⇒x′≠y′F(x)≠F(y)⇒x′≠y′F(x) \neq F(y) \Rightarrow x' \neq y'x′≠y′⇏F(x)≠F(y)x′≠y′⇏F(x)≠F(y)x' \neq y'\nRightarrow F(x) \neq F(y) :私たちは、新しいノード間のすべての古いエッジ追加。(x,y)∈E∧x′≠y′⟺(x′,y′)∈E′(x,y)∈E∧x′≠y′⟺(x′,y′)∈E′(x,y) \in E \land x' \neq y' \iff (x',y')\in E' この新しいグラフはまだDAGです。 最小値は何ですか?最小限の新しいグラフを作成するアルゴリズムとは何ですか?|V′||V′||V'|

6
ラティスは何に使用されますか?
ウィキペディアによると: 完全な格子は、数学およびコンピューターサイエンスの多くのアプリケーションに登場します。 計算で使用される標準のブール代数が完全な格子であるという事実に言及しているだけですか?ブール論理を具体的に使用する代わりに、ラティスの抽象レベルで作業することで得られるものはありますか? Google検索では、この件についてあまり検索されませんが、おそらく間違ったキーワードを使用しています。

1
Paxosの議員は誰ですか?
独創的な分散システムに関する論文The Part Time Parliament(the Paxos protocol)で、レスリーランポートは、Paxon議会プロトコルに関与している架空の議員を指名しています。 この執筆によれば、彼は次のように述べています。 私はギブスの助けを借りて偽のギリシア方言に音訳した、この分野で働いているコンピューター科学者の名前をギリシャの議員に与えました。 立法者の名前が付けられているという科学者に関する情報はありますか?論文の議員と対応するコンピューター科学者のリストが理想的な答えでしょう。 論文で言及された最初の議員「Λινχ∂」は、「リンチ」と発音できるため、ナンシー・リンチにちなんで命名されたと思います。また、参考文献の「ΛεωνίδαςΓκίμπας」はレオ・ギバスです。私は他人が誰であるかについて完全に迷っています。

4
グラフには2つまたは3つの異なる最小全域木がありますか?
特定のグラフGに2つの異なる最小全域木があるかどうかを検出する効率的な方法を見つけようとしています。また、3つの異なる最小スパニングツリーがあるかどうかを確認する方法を探しています。私が考えた素朴な解決策は、クラスカルのアルゴリズムを一度実行して、最小スパニングツリーの総重量を見つけることです。後で、グラフからエッジを削除してクラスカルのアルゴリズムを再度実行し、新しいツリーの重みが元の最小スパニングツリーの重みであるかどうかをチェックします。グラフの各エッジについても同様です。ランタイムはO(| V || E | log | V |)であり、これはまったく良くありません。もっと良い方法があると思います。 どんな提案でも役立つでしょう、事前に感謝します


2
この明らかにO(n lg n)乗算アルゴリズムの間違いはどこにありますか?
等間隔の3つを見つけることに関する最近のパズルブログの投稿で、私はO(n lg n)時間内にそれを行うと主張するトップアンサーを持つstackoverflowの質問に導かれました。興味深い部分は、解が多項式の2乗を伴い、O(n lg n)時間でそれを行う方法を説明する論文を参照することです。 現在、多項式の乗算は、数値の乗算と実質的に同じです。唯一の本当の違いは、キャリーがないことです。しかし...キャリーはO(n lg n)時間で行うこともできます。例えば: var value = 100; // = 0b1100100 var inputBitCount = value.BitCount(); // 7 (because 2^7 > 100 >= 2^6) var n = inputBitCount * 2; // 14 var lgn = n.BitCount(); // 4 (because 2^4 > 14 => 2^3) var c = …

3
サフィックス配列を使用して2つの文字列の最長共通部分文字列を計算する
複雑さで接尾辞配列を作成する方法を学んだ後、接尾辞配列の用途を発見することに興味があります。これらの1つは、時間で2つの文字列間の最長共通部分文字列を見つけることです。インターネットで次のアルゴリズムを見つけました。O(N)O(N)O(N)O(N)O(N)O(N) 2つの文字列とBを1つの文字列ABにマージしますAAABBBABABAB ABの接尾辞配列を計算しますABABAB LCPLCPLCP(最長共通プレフィックス)配列を計算します 答えは最大値LCP[i]LCP[i]LCP[i] 私はそれを実装しようとしましたが、多くの実装の詳細は言われていなかったので(つまり、文字列を連結するとき、それらの間に特殊文字を入れる必要があります()?)、私のコードは多くのテストケースで失敗しました。誰かがこのアルゴリズムについて詳しく説明できますか?AcBAcBAcB 前もって感謝します。 注:このアルゴリズムの正確性は保証しません。私はブログでそれを見つけました、そして、それが機能していると確信がありません。間違っていると思われる場合は、別のアルゴリズムを提案してください。

2
Hidoku NPは完全ですか?
Hidokuは、1からまでの事前に入力された整数を持つグリッドです。目標は、グリッド内の連続する整数()のパスを見つけることです。より具体的には、グリッドの各セルには異なる整数を含める必要があり、値各セルには値隣接セルが必要です(斜めにすることもできます)。n×nn×nn \times nn2n2n^2n2n2n^2n2n2n^2z≠n2z≠n2z ≠ n^{2}z+1z+1z + 1 特定のHidokuが解決可能かどうかを判断するのはNPにとって難しいですか?どのような削減を使用できますか? 編集:コメントによると、私は少し説明をします。セルのグリッドが与えられると、それらのいくつかは既に値(1からn²の整数)を含んでいます。2つのセルが同じ値を持たず、値z≠n²のすべてのセルが値z + 1の隣接セルを持つように、残りのすべてのセルを整数で埋める必要があります。つまり、セルに入力した後、パス1、2、3、\ cdots、n ^ 2を見つける必要があります。各セルに論理的にアクセスするグリッド内。n2n2n^2z≠n²z≠n²z ≠ n²z+1z+1z + 11,2,3,⋯,n21,2,3,⋯,n21, 2, 3,\cdots, n^2 Hidoku woudの例はhttp://www.janko.at/Raetsel/Hidoku/018.c.gifです。すでに解決済みのHidokuはhttp://diepresse.com/images/uploads/3/f/7/586743/spectrumsommerraetsel_7august_hidoku_schwer_loesung20100810172340.gifであり、ここで参照しているパスを確認できます。

2
ワンカウンターマシンで認識される言語はどれですか?
通常、2つ以上のカウンターを備えたカウンターマシンは、計算理論のコースでチューリングマシンと同等であることが示されています。ただし、1カウンターマシンで認識できる言語の正式な分析は見ていません。これらの言語はコンテキストフリー言語と同等ですか(おそらく、PDAに関連する巧妙な構成による)、またはまったく異なるクラスの言語ですか?

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