コンピュータサイエンス

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

10
充電速度が変わらない場合、コンピューターはどのように高速になりましたか?
発明以来、コンピューティング速度が劇的に向上したことは誰もが知っています。しかし、私を困惑させているのは、もしあなたが今日材料に電流を流した場合、50年前に同じ材料で電流を流したのと同じ速度で移動するだろうということです。 それを念頭に置いて、コンピューターがどのように高速になったのでしょうか?これらの信じられないほどの速度向上をもたらしたのは、プロセッサ設計のどの主な領域ですか? 次の1つ以上の可能性があると考えました。 プロセッサーの小型化(電流が移動する距離が短くなりましたが、ここでは限界的な利益しか得られないように思えます)。 より良い材料

8
言語が正規であることを証明する方法は?
言語が正規ではないことを証明する方法はたくさんありますが、一部の言語が正規であることを証明するにはどうすればよいですか? たとえば、が規則的であると指定された場合、次のも規則的であることをどのように証明できますか?L ′LLLL′L′L' L′:={w∈L:uv=w for u∈Σ∗∖L and v∈Σ+}L′:={w∈L:uv=w for u∈Σ∗∖L and v∈Σ+}\qquad \displaystyle L' := \{w \in L: uv = w \text{ for } u \in \Sigma^* \setminus L \text{ and } v \in \Sigma^+ \} これを証明するために非決定的な有限オートマトンを描画できますか?

2
Reynolds&Tymannによる成長の定義の順序
カール・レイノルズとポール・タイマンが書いた「プリンセス・オブ・コンピューター・サイエンス」(2008)という本を読んでいます(Schaum's Outlinesから出版)。 2番目の章では、名前のリストを単純に反復処理し、リスト内で特定の名前が見つかった場合にTRUEを返す順次検索の例を使用してアルゴリズムを紹介します。 著者は続けて言っています(17ページ): 順次検索アルゴリズムの「成長の順序」はnであると言います。この表記はT(n)です。また、成長の順序がT(n)の一定の因子内にあるアルゴリズムは、シータがNLであると言います。「シーケンシャル検索のシータはnです。」問題のサイズはn(検索されるリストの長さ)です。 これを理解するのは本当に難しいと思います。この本はエラーに満ちているので、何かが欠けているのか、上記の段落にタイプミスがあるのか​​はわかりません。一般的な英語では、「... say」で終わる文はめったにありません。 私は非常に混乱しています。 Tは何の略ですか?本は説明しません。時間ですか、シータですか? 「NLのシータ」が「シーケンシャル検索のシータがnである」ことを意味する場合 Lは何の略ですか?「線形」または「長さ」? 出版社に説明を求めて書いた。彼らは私のメッセージを著者に転送すると言った。彼らは答えていない。私は他のソースも調べてみましたが、それでも何かを誤解しているというしつこい感じがします。したがって、この段落を解読するまで休むことはできません。 誰かがその本のコピーを持っており、その段落を理解している場合。次に、その段落が正確かどうか、または他の言葉で説明してもらえれば幸いです。ありがとう。

5
なぜ多くのインターネットプロトコルがテキストベースですか?
私が発見したことから、インターネット上を移動する非常に大量のプロトコルは、バイナリではなく「テキストベース」です。問題のプロトコルには、HTTP、SMTP、FTP(これはすべてテキストベースですか?)、WHOIS、IRCが含まれますが、これらに限定されません。 実際、これらのプロトコルの一部は、バイナリデータを送信する場合に、いくつかのフープを介してジャンプします。 これには理由がありますか?テキストベースのプロトコルは、同じ量の情報を送信するためにより多くのデータを送信する必要があるため、明らかに多少のオーバーヘッドがあります(以下の例を参照)。これを上回るメリットは何ですか? することで、テキストベースの、私はプロトコルで使用される文字のほとんどが間にある意味0x20(スペース)と0x7E(~)のために使用される臨時の「speical文字」と非常に特殊な目的な改行、ヌル、ETX、およびEOTとして、。これは、接続を介して生のバイナリデータを送信することとは対照的です。 たとえば、整数123456をテキストとして送信するには、文字列123456(16進で表現31 32 33 34 35 36)を送信する必要がありますが、32ビットのバイナリ値は(16進で表現)として送信さ0x0001E240れます(また、ご覧のとおり、特殊なヌル文字を「含む」 。

8
変数はプログラムスタックにどのように格納され、そこから取得されますか?
この質問の素朴さに謝罪します。私は50歳のアーティストで、初めてコンピューターを正しく理解しようとしています。だからここに行きます。 私は、データ型と変数がコンパイラによってどのように処理されるかを理解しようとしています(非常に一般的な意味で、私はそれがたくさんあることを知っています)。「スタック」のストレージと値型、および「ヒープ」のストレージと参照型の関係についての理解が不足しています(引用符は、これらの用語が抽象化であって、私がこの質問を組み立てているように、そのような単純化されたコンテキストで文字通りに取られすぎます)。とにかく、私の単純なアイデアは、ブールや整数のような型は「スタック」に行くということです。なぜなら、それらはストレージスペースの観点から既知のエンティティであり、スコープはそれに応じて簡単に制御できるからです。 しかし、スタック上の変数がアプリケーションによって読み取られる方法はわかりませんx-たとえばx = 3、宣言して整数として割り当て、ストレージがスタック上に予約され、その値が3そこに格納され、次に同じ機能Iを宣言し、アサインy言う、など4そして、私はその後、使用することを、次のx別の表現では、(と言うz = 5 + xプログラムを読むことができるか)xを評価するためにz、それは以下であるときyスタックに?私は明らかに何かが欠けています。スタック上の場所は変数の有効期間/スコープにすぎず、スタック全体が常にプログラムから実際にアクセス可能であるということですか?もしそうなら、値を取得できるようにスタック上の変数のアドレスのみを保持する他のインデックスがあることを意味しますか?しかし、その後、スタックのポイントは、値が変数アドレスと同じ場所に格納されていることだと思いましたか?私のちっぽけな心では、この他のインデックスがある場合、私たちはよりヒープのようなものについて話しているようです?私は明らかに非常に混乱しており、単純な質問に対する簡単な答えがあることを望んでいます。 ここまで読んでくれてありがとう。

4
赤黒の木はなぜそんなに人気があるのですか?
私が見るところはどこでも、データ構造は赤黒木を使用して実装されているようです(std::setC ++、SortedDictionaryC#などで) アルゴリズムクラスで(a、b)、赤黒、AVLの各ツリーをカバーしたので、次のようになりました(教授に尋ねたり、数冊の本を読んだり、グーグルで調べたりすることからも)。 AVLツリーの平均深度は赤黒ツリーよりも小さいため、AVLツリーの値の検索は一貫して高速です。 赤黒木は、AVL木よりもバランスをとるための構造的な変化が少ないため、挿入/削除の速度が向上する可能性があります。これは、ランタイムと実装に大きく依存するため、これはツリーの構造変更のコストに依存するため、潜在的に言っています(ツリーが不変の場合、関数型言語でも完全に異なる可能性があります) AVLと赤黒木を比較する多くのオンラインベンチマークがありますが、私が驚いたのは、私の教授が基本的に次のいずれかを行うと言ったということです。 パフォーマンスについてそれほど気にかけない場合もあります。その場合、ほとんどの場合、AVLと赤黒の10〜20%の違いはまったく問題になりません。 または、パフォーマンスに本当に関心があります。この場合、AVLツリーと赤黒ツリーの両方を捨てて、Bツリーを使用します。Bツリーは、より良く機能するように調整できます(または(a、b)ツリー、私は)これらすべてを1つのバスケットに入れます。) その理由は、Bツリーがメモリにデータをよりコンパクトに格納するため(1つのノードに多くの値が含まれる)、キャッシュミスがはるかに少なくなるためです。また、ユースケースに基づいて実装を微調整し、Bツリーの順序をCPUキャッシュサイズなどに依存させることもできます。 問題は、実際の最新のハードウェアでの検索ツリーのさまざまな実装の実際の使用状況を分析するソースがほとんど見つからないことです。私はアルゴリズムに関する多くの本を調べましたが、異なるツリーバリアントを一緒に比較するものは見つかりませんでした。実際のプログラムで。) そうは言っても、上記で述べたことに基づいて、Bツリーがそれらを上回るはずであるときに、どこでも赤黒ツリーが使用されている特定の理由がありますか?(私が見つけることができる唯一のベンチマークとして、http://lh3lh3.users.sourceforge.net/udb.shtmlも示していますが、それは特定の実装の問題である可能性があります)。それとも、実装がかなり簡単であるために、誰もが赤黒ツリーを使用する理由、またはそれを別の言葉で言うと、実装が難しいのはなぜですか? また、関数型言語の領域に移動すると、これはどのように変わりますか?ClojureとScalaはどちらもHash配列にマップされた tryを使用しているようで、Clojureは32の分岐係数を使用しています。

9
抽出を持つ優先度キューが存在しますか?
プライオリティキューインターフェイスを実装するデータ構造は非常に多くあります。 挿入:構造に要素を挿入します Get-Min:構造内の最小要素を返します Extract-Min:構造内の最小要素を削除します このインターフェイスを実装する一般的なデータ構造は、(最小)ヒープです。 通常、これらの操作の(償却)実行時間は次のとおりです。 挿入:(時々O(log n ))O(1)O(1)\mathcal{O}(1)O(ログn )O(log⁡n)\mathcal{O}(\log n) Get-Min:O(1)O(1)\mathcal{O}(1) Extract-Min:O(ログn )O(log⁡n)\mathcal{O}(\log n) フィボナッチヒープは、例えば、これらの実行中の時間を実現します。さて、私の質問は次のとおりです。 次の(償却)実行時間のデータ構造はありますか? 挿入:O(ログn )O(log⁡n)\mathcal{O}(\log n) Get-Min:O(1)O(1)\mathcal{O}(1) 抽出分:O(1)O(1)\mathcal{O}(1) ソートされた入力が与えられたときに時間でそのような構造を構築できる場合、例えば、o (nO(n)O(n)\mathcal{O}(n)交差点は、「通常の」優先度キューを使用する場合よりも厳密に高速です。o (nログn)o(nlog⁡n)o\left(\frac{n}{\log n}\right)

7
マルチコアCPUで実行しなければならないことはありますか?
プログラムがどのようにマルチスレッドに対応する必要があるかを考えると、私のチームは、シングルコアCPUでは絶対にできないことはないかと困惑しました。グラフィック処理には大規模な並列処理が必要であると仮定しましたが、DOOMなどの処理はGPUのないシングルコアCPUで行われたと主張しています。 マルチコアプロセッサで実行する必要があるものはありますか? 開発と実行の両方に無限の時間があると仮定します。

7
最小スパニングツリーと最短パス
最小スパニングツリーアルゴリズムと最短パスアルゴリズムの違いは何ですか? 私のデータ構造クラスでは、2つの最小スパニングツリーアルゴリズム(PrimおよびKruskal)と1つの最短パスアルゴリズム(Dijkstra)を取り上げました。 最小スパニングツリーとは、すべての頂点にまたがるグラフ内のツリーであり、ツリーの総重量は最小です。最短経路は非常に明白であり、ある頂点から別の頂点への最短経路です。 私が理解していないのは、最小スパニングツリーの総重量が最小であるため、ツリー内のパスは最短パスではないということです。誰かが私に欠けていることを説明できますか? どんな助けも大歓迎です。

5
なぜ遺伝的アルゴリズムの研究が遅れたのですか?
今日、遺伝的アルゴリズムの使用を含むいくつかのイントロレベルのトピックを議論している間; この分野の研究は本当に遅れていると言われました。理由は、ほとんどの人が機械学習とデータマイニングに集中しているためです。 更新:これは正確ですか?もしそうなら、ML / DMはGAと比較してどのような利点がありますか?

2
時間で並べ替えられていない配列の中央値を見つける
並べ替えられていない配列の中央値を見つけるには、n要素に対して時間で最小ヒープを作成し、中央値を取得するためにn / 2要素を1つずつ抽出します。ただし、このアプローチにはO (n log n )時間かかります。O (n ログn )O(nログ⁡n)O(n\log n)nnnn / 2n/2n/2O (n ログn )O(nログ⁡n)O(n \log n) 時間に何らかの方法で同じことを行うことはできますか?できるなら、どうやって?O (n )O(n)O(n)

2
Yコンビネータは、「ラムダ計算の不整合」をどのように例示しますか?
Fixed Point Combinatorsの Wikipediaページには、かなり神秘的なテキストが書かれています Yコンビネータは、ラムダ計算が矛盾する原因の例です。したがって、それは疑いをもって考慮されるべきです。ただし、数学ロジックでのみ定義されている場合は、Yコンビネータを考慮するのが安全です。 ある種のスパイ小説を始めましたか?計算は「一貫性がなく」、「疑いを考慮して」すべきだという声明は、世界で何を意味するのでしょうか。λλ\lambda

3
トラバーサルが1つだけの無向ツリーの最長パス
2つの深さ優先検索を使用して、無向木で最長パスを見つけるためのこの標準アルゴリズムがあります。 ランダムな頂点からDFSを開始し、そこから最も遠い頂点を見つけます。それがv ′だと言う。vvvv′v′v' 次に、からDFSを開始して、最も遠い頂点を見つけます。このパスは、グラフ内で最も長いパスです。v′v′v' 問題は、これをより効率的に行えるかどうかです。単一のDFSまたはBFSでそれを行うことはできますか? (これは、無向木の直径を計算する問題と同等に説明できます。)


2
最小ヒープ(または他のエキゾチックな)ステートマシンの機能の決定
min-heapオートマトンの定義に関する説明については、この投稿の最後を参照してください。 ステートマシンで使用する情報を格納するためにさまざまなデータ構造を使用することを想像できます。たとえば、プッシュダウンオートマトンは情報をスタックに格納し、チューリングマシンはテープを使用します。キューを使用するステートマシン、および2つの複数のスタックまたはテープを使用するステートマシンは、チューリングマシンと同等のパワーを発揮することが示されています。 最小ヒープマシンを想像してください。次の例外を除き、プッシュダウンオートマトンとまったく同じように機能します。 ヒープに最後に追加したものを調べる代わりに、現在ヒープ上にある最小の要素(マシンごとに定義された順序付け)だけを見ることができます。 ヒープに最後に追加したものを削除する代わりに、現在ヒープにある最小の要素(マシンごとに定義された順序)の1つのみを削除します。 要素をヒープの最上部に追加する代わりに、要素をヒープに追加することしかできません。その位置は、ヒープ内の他の要素に従って決定されます(順序はマシンごとに定義されます)。 このマシンは、単にヒープを使用しないことで、すべての通常の言語を受け入れることができます。また、言語受け入れることができる{anbn∈{a,b}∗∣n≥0}{anbn∈{a,b}∗∣n≥0}\displaystyle \{a^{n}b^{n} \in \{a, b\}^{*} \mid n \ge 0\}追加することによって、「ヒープ秒、および削除が読み取るとき」ヒープからステップBのを。他のさまざまなコンテキストフリー言語を受け入れることができます。しかし、それは、例えば、受け入れることができない{ wは∈ { 、B } * | W = W R }aaaaaabbb{w∈{a,b}∗∣w=wR}{w∈{a,b}∗∣w=wR}\displaystyle \{w \in \{a, b\}^{*} \mid w = w^{R}\}(証拠なしで記載)。編集:またはそれができますか?私はそれができるとは思いませんが、私は以前に驚いていました。そして、私が...をよくし続けるという私の仮定が驚いたままであると確信しています。 状況依存言語またはチューリング完全言語を受け入れることができますか? より一般的には、この方向でどのような研究が行われていますか?もしあれば、どんな結果がありますか?また、他の種類のエキゾチックなステートマシンにも興味があります。おそらく、ストレージに他のデータ構造を使用したり、アクセスに関するさまざまな種類の制限(たとえば、LBAがTMを制限する方法)になります。参考文献を歓迎します。この質問が無知を示している場合は、事前に謝罪します。 正式な定義: この資料を参照する質問でさらに議論を明確にするために、ここで最小ヒープオートマトンのより詳細な定義をいくつか提供します。 タイプ1の非決定的最小ヒープオートマトンを7タプルとして定義します。ここで...(Q,q0,A,Σ,Γ,Z0,δ)(Q,q0,A,Σ,Γ,Z0,δ)(Q, q_0, A, \Sigma, \Gamma, Z_0, \delta) は有限の空でない状態のセットです。QQQ 初期状態です。q0∈Qq0∈Qq_0 \in Q 受理状態の集合です。A⊆QA⊆QA …

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