コンピュータサイエンス

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

1
グラフのすべての非循環方向を見つけるアルゴリズム
無向グラフの非循環方向に取り組んでおり、次の質問があります。 接続された無向単純グラフ与えられた場合、すべての可能な非循環方向を見つける方法は?GGGGGG 非環状配向の数はいくつですか?(より知られているここになるように)グラフのと頂点で評価彩色多項式である。しかし、私はを負の値()で評価する方法を理解することに成功しませんでした。 (−1)p χ(G,−λ)(−1)p χ(G,−λ)(-1)^p\ \chi(G,-\lambda)GGGpppχχ\chi−λ−λ-\lambdaχχ\chi−λ−λ-\lambda

2
ハッシュテーブルO(1)はハッシュ速度をどのように考慮していますか?
ハッシュテーブルは、特定の容量で言う単純な連鎖と倍加を使用してを償却すると言われています。Θ(1)Θ(1)\Theta(1) ただし、これは要素の長さが一定であることを前提としています。要素のハッシュを計算するには、要素を、時間がかかります。ここで、は長さです。lΘ(l)Θ(l)\Theta(l)lll ただし、要素を区別するには、少なくともビットの長さの要素が必要です。そうでなければ、鳩の巣の原理によって、それらは区別されません。要素のビットを通過するハッシュ関数は時間かかります。LG N LG N Θ (LG N )nnnlgnlg⁡n\lg nlgnlg⁡n\lg nΘ(lgn)Θ(lg⁡n)\Theta(\lg n) 代わりに、入力のすべての部分を使用する合理的なハッシュ関数を考慮したハッシュテーブルの速度は、実際にはであると言えるでしょうか。では、なぜ実際にハッシュテーブルが文字列や大きな整数などの可変長要素を格納するのに効率的であるのでしょうか。Θ(lgn)Θ(lg⁡n)\Theta(\lg n)

5
コンピュータウイルスが新しい「遺伝子」を進化させて、自分の仕事を実行することは可能でしょうか。
Aレベルの生物学の学生として、私は生物学とコンピューターサイエンスとの関連について多くのことを考えてきました。よく頭に浮かぶのは、免疫学とコンピューターセキュリティ/ウイルスのリンクです。たとえば、私は(ウイルス対策プログラムのしくみを読んで)、免疫システムがウイルスを処理する方法はウイルス対策プログラムと非常によく似ていると判断しました(どちらにもウイルス定義のデータベースが含まれています(メモリセルまたはウイルス)署名)と両方に外挿法が含まれています)。私にとっての自然な進歩は、コンピュータウイルスと比較したウイルスの自然な進化について考えていました。だから私の質問に:ββ\beta コンピュータウイルスが新しい「遺伝子」を所有する新しい株に進化して、自分の仕事を実行することは可能でしょうか。 この種の考え方は本当にウイルスにのみ当てはまるようです。つまり、通常の古い計算機が「自然選択」の対象になることは決してないでしょう。しかし、私が知る限り、ウイルスはアンチウイルスプログラムを回避するために自分自身を突然変異させますが、おそらくこれらはかなり制御されているため、ウイルスは、他の方法では役に立たなくなる可能性のある非有益な突然変異を獲得しません。自然の真のランダムな性質がウイルスに適用される可能性がある場合、それらは、たとえば、アンチウイルスプログラムを引き継ぐレトロウイルスになる、またはそれを可能にする新しいコードを含めるように変化するなど、新しい機能を進化させることができるでしょうか?ファイアウォールをダウンさせる?彼らは、ある種の計算上の自然淘汰に関与するでしょうか?そこでは、最強のウイルスが生き残り、その有益な遺伝子を伝えます。

2
NP Completeの言語は通常の運用で閉鎖されますか?
オンラインで調べてみましたが、明確な説明は見つかりませんでした。2つのNPC言語のUnionとIntersectionが、必ずしもNPCにあるとは限らない言語を生成することは、私には理にかなっています。NPC言語が補完、連結、およびクリーンスター操作の下で閉じられていないことも本当ですか?

3
ゲーデルス(最初)の不完全性定理と停止問題-どのように制限されていますか
これらのことを最初に聞いたとき、それは数学と科学一般に本当に限界を設定すると思ったので、私はとても魅了されました。しかし、これらは実際にどの程度関連していますか? 停止問題の場合:アルゴリズムが終了するかどうかを決定できない、人為的に構築されたケース以外にもありますか? 不完全性定理の場合:人為的に構築されたケース以外に、ステートメントを証明または反証できないケースはありますか? 科学のほとんどの領域では、そのような基本的な制限があることは本当に問題ではないように思われるので、私はこれを尋ねています。彼らもそこにいますか?これが本当に限界を設定する場所とそれが本当に関連する場所を知りたいのですが。

2
なぜしない
でCLRS(ページ49-50上)、次の文の意味は何ですか。 Σni=1O(i)Σi=1nO(i)\Sigma_{i=1}^{n} O(i)(の単一の匿名関数であるiii)が、同じではありません実際に持っていません、解釈。」O(1)+O(2)+⋯+O(n)O(1)+O(2)+⋯+O(n)O(1)+O(2)+\cdots+O(n)

3
1と0のビットレベルよりも低いものはありますか?
コンピューターのアーキテクチャーとその仕組みについて学習する場合、マシンが理解できる最も低い言語は1&0のバイナリーであると考えられます。そして、私たちが入力するものはすべてバイナリに変換/変換する必要がありますが、2進数ですそれは、バイナリを実際の機械語に変換するために別のインタプリタ/コンパイラが必要になることを意味しませんか?エレクトロニクスから、コンピューターは主にICなどのCPUで構成されているため、トランジスタなどで作られていることがわかります。これらのツールが理解できるのは電気だけなので、電気はコンピューターにとって最も理解しにくい言語です。だから私の懸念は、バイナリは本当に1s&0sなのか、それとも1s&0sが電気の有無を表すために使われているだけなのか?それが電気の有無の単なる表現であるとすると、入力するコマンドとバイナリの間に別の中間言語または下位言語がなく、回路がどこに電流を送信するか、どこに送信しないかがわかるでしょうか?

1
ラムダ計算:評価コンテキストが「機能する」方法
純粋なラムダ計算には、帰納的に定義された一連の用語(文法)があります: e::=x∣λx.e∣e1e2e::=x∣λx.e∣e1e2e::= x \mid \lambda x . e \mid e_1 e_2 値による呼び出し評価戦略では、ベータ削減の推論規則とアプリケーションの評価方法に関する規則(合同規則)があります。私は、実際に言語の構文を変更することなく、評価コンテキストが合同ルールをどのように置き換えることができるかを理解しようとしています。評価コンテキストがなければ、次のようになります。 e2→e ′ 2e1→e′1e1e2→e′1e2e1→e1′e1e2→e1′e2 \frac{e_1 \rightarrow e_1'}{e_1e_2 \rightarrow e_1'e_2} および e2→e′2ve2→ve′2.e2→e2′ve2→ve2′. \frac{e_2 \rightarrow e_2'}{ve_2 \rightarrow ve_2'}. 式がある場合、これはという形式で、したがってE 1 、E 2 → E ' 1、E 2(λ F 。λ X 。F X )((λ Y 。Y )λ Z 。Z )λt=(λf.λx.fx)((λy.y)λz.z)λw.wt=(λf.λx.fx)((λy.y)λz.z)λw.wt = (\lambda …

3
4色定理の適用
私は4色の定理を読んでいて、それの実用的なアプリケーションがあるかどうか疑問に思っています。(マップを4つの異なる色に分離することは、アプリケーションと見なすことはできないと思います。) アプリケーションでグーグルを試しましたが、見つかりませんでした。

1
どのようにして時間の複雑性が整数でない指数になるのですか?(例:
定期的に私は次のような文に出くわします 「このアルゴリズムのウィノグラードのバリアント[20]、その漸近的複雑度もが考慮されます」(https://www.cise.ufl.edu/~sahni/papers/strassen.pdfから)O(n2.81)O(n2.81)O(n^{2.81}) ループとツリーがどのように機能するかを確認できるので、やような複雑さを直感的に理解できます。しかし、どのようにして10進数で複雑さを導き出すのかはわかりません。誰かがこれがどのように起こるかの例を教えてくれますか?O(n2)O(n2)O(n^2)O(nlogn)O(nlog⁡n)O(n \log n)

1
最大スタッキング高さの問題
次の問題は以前に調査されましたか?はいの場合、それを解決するためにどのようなアプローチ/アルゴリズムが開発されましたか? 問題(「最大スタッキング高さの問題」) 与えられたのポリゴン、その安定した、非オーバーラップ配置見つける彼らの積載高さを最大限に重力の影響の下で固定床の上を。んんn 例 3つのポリゴン: 積み重ねの高さが異なる、非常に多くの安定した重なり合わない配置の3つ: 明確化 すべてのポリゴンは均一な質量と等しい密度を持っています 摩擦はゼロです 重力が下向き方向のすべての点に作用しています(つまり、力のベクトルはすべて平行です) 構成が不安定な平衡点にある場合、構成は安定しているとは見なされません(たとえば、図の緑色の三角形は、バランスポイントの左側と右側の質量が等しい場合でも、どの頂点でも平衡化できません)。 さらに上記の点を明らかにする:ポリゴンが(「転倒」)が不安定であると考えられる場合を除き、それは少なくとも一点にかかっている厳密に左 と少なくとも一点右に厳密に(この定義は大幅シミュレーションを簡略化しその重心のと特に、配置が安定しているかどうかを評価するために位置統合などが不要になります。 「物理的」な形の問題は、ほとんどの場合にのみ解決できる継続的な問題です。アルゴリズムで取り組むことができる離散問題を取得するには、ポリゴン頂点と配置でのそれらの配置の両方を適切なラティスに制約します。 ノート あらゆる種類の総当たり攻撃は明らかに実行不可能です。ラティス内のポリゴンの配置に厳格な制約があっても(限られた領域の「格子空間」を提供するなど)、複雑さはいくつかのポリゴンを超えると単純に爆発します。 単一のポリゴンを削除すると構成が不安定になり、そのような配置は、すべての中間ステップが安定していることに依存しているアルゴリズムでは到達できないため、配置を構築するのは簡単です。 問題は少なくともNPのにおいがするので、頂点の総数がEXPTIMEで完了する可能性が高いため、ヒューリスティックスでもかなりの関心があります。希望を与えることの1つは、ほとんどの人間が例の3番目の配置が最適であることを認識するという事実です。

1
一般的なグラフのすべての完全/最大一致をカウントして見つける
最近、私は次の質問につながった問題に対処しています。 一般的なグラフですべての最大/完全なマッチングを列挙するための優れたアルゴリズムはありますか? 一般的なグラフですべての最大/完全な一致を見つけるための優れたアルゴリズムはありますか? これら2つの問題の複雑さは同じですか? 次の参考資料を見つけました。 二部グラフのすべての完全な最大および最大マッチングを列挙するアルゴリズム-二部グラフのすべての最大マッチングを列挙するアルゴリズムを提案します。 検索すべての2部グラフでパーフェクトマッチング部グラフ内のすべての完璧なマッチングを求めるアルゴリズムの提案- 両方のアルゴリズムの複雑さは、グラフ内の完全一致の数に依存します(最悪の場合、指数実行時間を意味します)。 さらに、両方の記事が2部グラフを扱っているため、一般的なグラフで同じ問題を扱っている同様の記事を見つけることができませんでした。 上記の問題に関する情報と参照をいただければ幸いです。

1
無限単項言語のクリーネスターは常に通常の言語を生成します
ましょL={an∣n≥0}L={an∣n≥0}L = \{a^n \mid n \ge 0\}、0 = εとのすべてのためのn ≥ 1a0=ϵa0=ϵa^0 = \epsilonan=an−1aan=an−1aa^n = a^{n-1}an≥1n≥1n \ge 1。 従ってLLLの配列で構成された長さの配列を含む全ての長さの、0。してみましょうL 2は、任意の無限のサブセットであるL。L ∗を認識するDFAが常に存在することを示す必要がありますaaa000L2L2L_2LLLL∗2L2∗L_2^*ます。 場合はL2L2L_2有限のサブセットであることは、として非常に明白であるL2L2L_2クリーネの閉鎖により、DFA、ひいてはだろうL∗2L2∗L_2^* DFAによって認識されるだろう。ただし、文字列の長さが素数である場合など、L2L2L_2はDFAとして表現されない可能性があるため、無限サブセットについては取得できません。

1
アルゴリズムはgit bisectによって最適化されていますか?
してみましょう DAGなります。一部のノードは「不良」であり、その他は「良好」であることがわかっています。悪いノードの子孫は悪いが、良いノードの祖先は良い。また、不良ノードには一意の最小要素があり、タイプ「Are you good or bad?」のクエリでクエリするノードをできるだけ少なくしたいと考えています。GGGGGGGGG この問題は、一般的なバージョン管理システムであるGitでコマンドによって解決されます。git-bisectこれは、プログラマーがバグが導入された最初のコミットを見つけるのに役立ちます。 最初に、Gitによって実装されたアルゴリズムは、1つの不良コミットと1つ以上の良好なコミットを知っていると想定しています。実行の各ステップで、アルゴリズムは次のステップ(ここから取得)を使用してコミットを見つけます。 次のコミットのみを保持します。 a)不良コミットの祖先である(不良コミット自体を含む)、および b)グッドコミットの祖先ではない(グッドコミットを除く)。 結果のグラフの適切な端から始めて、各コミットに、その祖先の数にプラス1を関連付けます。 各コミットに関連付ける最小(X、N− X)分(バツ、N−バツ)\min(X, N-X)、ここでバツバツXはステップ2でのコミットに関連付けられた値、NNNはグラフ内のコミットの総数(ステップ1で削減された後)。 最良の二分ポイントは、関連付けられた数が最大のコミットです。 このアルゴリズムは基本的に、「最悪の場合」を実現するコミットを見つけています。実際、は、最良の場合の次の反復でのDAG内のノードの数なので、が最悪のケースです。最小(X、N− X)分(バツ、N−バツ)\min(X,N-X)最大最小(X、N− X)最高分(バツ、N−バツ)\max\min(X,N-X) 不思議なんだけど: 「最悪のケース」、つまりを達成するノードを選択した場合、違いはありますか?minmax(X,N−X)minmax(X,N−X)\min\max(X,N-X) このアルゴリズムは最悪の場合最適ですか? 編集:私はこの問題に限界があることに気づきました。と呼ばれる親を持つ単一のノードによって形成されるDAGを考えます。が不良であることがわかっている場合は、各親をチェックして、それらが最小の不良ノードであるかどうかを確認します。Ω(N)Ω(N)\Omega(N)bbbN−1N−1N-1g1,…,gN−1g1,…,gN−1g_1,\dots,g_{N-1}bbb 編集2:以前は実際には境界です。ここで、はposetの幅です。この問題の代替アルゴリズムは、クエリを使用するcstheory.stackexchangeのこの回答に記載されています。Ω(w)Ω(w)\Omega(w)wwwO(wlogn)O(wlog⁡n)O(w\log{n})


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