コンピュータサイエンス

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

1
アルゴリズム、言語、問題の違いは何ですか?
このサイトでは、人々はしばしば「アルゴリズム」と「問題」を混乱させるために他の人を修正するようです。これらの違いは何ですか?アルゴリズムを検討し、問題を検討する時期を知るにはどうすればよいですか?そして、これらは形式言語理論における言語の概念とどのように関係していますか?

4
互いに問題を減らすための一般的なテクニックは何ですか?
計算可能性と複雑さの理論(およびおそらく他の分野)では、縮約は遍在しています。そこに多くの種類がありますが、原理は同じまま:1の問題というのショー他のいくつかの問題として、ハードとして少なくともあるからのマッピングのインスタンスによる内の溶液と同等のものに。基本的に、プリプロセッサとしてリダクション関数を使用できるようにすると、ソルバーはすべてを解決できることを示します。L 2 L 2 L 1 L 1 L 2L1L1L_1L2L2L_2L2L2L_2L1L1L_1L1L1L_1L2L2L_2 私は長年にわたって削減のシェアを実行してきましたが、何かが私を悩ませ続けています。すべての新しい削減には(多かれ少なかれ)創造的な構築が必要ですが、タスクは繰り返し感じることができます。正規のメソッドのプールはありますか? 削減関数を構築するために定期的に使用できるテクニック、パターン、およびトリックは何ですか? これは参照質問になると思われます。したがって、少なくとも1つの例で説明されているが、多くの状況をカバーする、一般的で教訓的に提示された答えを与えるように注意してください。ありがとう!

2
Tarjanの擬似コードはどのように機能しますか(CまたはJavaに詳しい人に説明されています)?
短編小説 有名なコンピューター科学者、タージャンは数年前に本を書きました。絶対に奇妙な擬似コードが含まれています。誰か説明していただけますか? ロングストーリー タージャンは、彼がスプレーツリーの共同発明者であったという事実を含む、多くの成果で知られています。彼は1980年代に「データ構造とネットワークアルゴリズム」という本を出版しました。 Tarjanの本のすべての擬似コードは、彼自身が考案した言語で書かれています。擬似コードの規則は非常に統制されています。それはほとんど真の言語であり、そのためのコンパイラを書くことを想像することができます。Tarjanは、彼の言語は次の3つに基づいていると書いています。 ダイクストラの保護されたコマンド言語 SETL アルゴール 上記の言語の1つまたは2つ、またはタージャンの仕事に精通している人が私の質問に答えられることを望んでいます。 Tarjanの言語で書かれた関数の例を以下に示します。 heap function mesh (heap nodes h1, h2); if key(h1) > key(h2) → h1 ⟷ h2 fi; right (h1) := if right(h1) = null → h2 |right(h1) ≠ null → mesh (right(h1), h2) fi; if rank (left (h1)) < rank (right …

13
コンピュータサイエンスに興味を持ってもらうために、16〜17歳の子供たちと何をすればよいですか。
私は大学で数週間のうちに一種の「オープンデー」に参加するつもりです。この時間の一部として、私は(同僚と一緒に)高校レベルの生徒全員を2時間与え、全員を収容するのに十分な大きさのコンピューターラボを与えました。彼らとコンピューターサイエンスを行うことを奨励するための活動または一連の活動(私の大学で、理想的ですが、一般的にも)。ここで何をすべきかについて私は絶対に迷っていますし、ありとあらゆる提案を歓迎します。
40 education 

7
アルゴリズムの漸近的複雑性とアルゴリズム設計の実践との関連性の説明
アルゴリズムと複雑さでは、アルゴリズムの漸近的な複雑さ、つまり、入力のサイズが無限大になるときにアルゴリズムが使用するリソースの量に焦点を当てます。 実際には、必要なのは、有限の(場合によっては非常に多数の)インスタンスで高速に動作するアルゴリズムです。 関心のある有限数のインスタンスで実際にうまく機能するアルゴリズムは、優れた漸近的複雑さを持つ必要はありません(有限数のインスタンスでの良好なパフォーマンスは、漸近的複雑性に関して何も意味しません)。同様に、優れた漸近的複雑さを備えたアルゴリズムは、関心のある有限数のインスタンスでは実際にはうまく機能しない可能性があります(たとえば、大きな定数のため)。 なぜ漸近的な複雑さを使用するのですか?これらの漸近解析は、実際のアルゴリズムの設計にどのように関連していますか?

9
Cは実際にチューリング完全ですか?
私は誰かにCがチューリング完全であることを説明しようとしていましたが、実際には技術的にチューリング完全であるかどうかはわかりません。(Cは、実際の実装ではなく、抽象的なセマンティクスのように。) 「明白な」答え(おおよそ:任意の量のメモリをアドレス指定できるため、RAMマシンをエミュレートできるので、チューリング完全です)は、C標準で許可されている限り、実際には正しくありません。 size_tを任意に大きくするには、一定の長さに固定する必要があり、固定する長さに関係なく、有限です。(つまり、任意の停止しているチューリングマシンが与えられた場合、「適切に」実行されるようにsize_tの長さを選択できますが、すべての停止しているチューリングマシンが適切に実行されるようにsize_tの長さを選択する方法はありません) だから:C99チューリング完全ですか?

6
コンピューターはどのように機能しますか?
私は何年もの間コンピューターのオタクです。私はかなりの数の言語でプログラミングでき、それらを構築することもできます。先日、私は仲間と座って、コンピューターが実際に電気を取り込んでそれを処理する方法を尋ねましたが、私たちはそれを理解できませんでした。 つまり、コンピューターはどのように一定の電気の流れを取り、それを1と0に変えてから、実際にそれらの1と0で何かをして、15秒間点灯させるのですか? 私はゲート(AND、OR、NOR、NAND、NOT)とダイオード、抵抗器、トランジスタについて少し理解していますが、これは本当の素人の言葉で説明するのに最適な場所だと思いました! 誰かが私を正しい方向に向けたり、簡単な説明をしてもらえますか?


7
コンピューターサイエンスの定義は何ですか?また、コンピューターサイエンス内の科学とは何ですか?
私はコンピューターサイエンスの理学士号を追求していますが、その初期段階にあり、追求するのが学問的で職業上の柔軟性のある教育のように思えるので、自分の選択に満足していると確信しています。 そうは言っても、コンピュータサイエンスが学界、民間部門、および「コンピューターサイエンス」の実際の「科学」に関して実際に何であるかについては、さまざまな定義があるようです。コンピュータサイエンスの教育を適用できるものの幅、および最終的にはコンピュータサイエンス内の人々が追求したさまざまなパスについて。

3
動的計画法の副問題の決定
私はダイナミックプログラミングの手法を複数回使用しましたが、今日、友人から副問題をどのように定義するかを尋ねられ、客観的な正式な回答を提供する方法がないことに気付きました。動的計画法を使用して解決する問題のサブ問題を正式に定義するにはどうすればよいですか?

9
シリアル化について
私はソフトウェアエンジニアであり、同僚と議論した後、シリアル化の概念を十分に把握していないことに気付きました。私が理解しているように、シリアル化は、OOPのオブジェクトなどのエンティティをバイトシーケンスに変換するプロセスであり、そのエンティティを後のアクセスのために保存または送信できます(「逆シリアル化」のプロセス)。 私が抱えている問題は、すべての変数(プリミティブのようなものでもint、複合オブジェクトでも)がすでにバイトシーケンスで表されているのではないかということです。(もちろん、レジスタ、メモリ、ディスクなどに格納されているためです) それでは、シリアル化をこれほど深いトピックにしているのはなぜですか?変数をシリアル化するために、これらのバイトをメモリに取り込んでファイルに書き込むことはできませんか?私が見逃した複雑さは何ですか?
38 storage 

5
「ハッシュ」とは何ですか(そして正確に)?
私は「ハッシュ」という言葉が、さまざまな意味を持つさまざまなコンテキスト(すべてコンピューティングの世界の中で)で使用されていることを聞いたことがあります。たとえば、「Pythonを学ぶ」という本の辞書の章では、「Pythonは「dicts」と呼びます。他の言語は「hashes」と呼びます」と言われています。 この単語の他の一般的な使用法は、暗号化に関連しています。私はまた、「ハッシュ」という言葉を高レベルのプログラミング内の特定の機能として使用している人々の声を聞いています(読みました)。 それで、それは正確に何ですか? (時間と知識のある)誰もが「ハッシュ(またはハッシュ)」の核心を親切に説明できますか?

2
世代別ガベージコレクターは本質的にキャッシュフレンドリーですか?
典型的な世代別ガベージコレクタは、最近割り当てられたデータを別のメモリ領域に保持します。典型的なプログラムでは、多くのデータは短命であるため、若いガベージ(マイナーGCサイクル)を頻繁に収集し、古いガベージを頻繁に収集しないことは、メモリオーバーヘッドとGCの実行時間の適切な妥協点です。 直感的には、若いリージョンのデータに頻繁にアクセスし、すべてを1か所に保持するため、キャッシュに対するメインメモリの待機時間比率が増加すると、単一リージョンコレクターと比較した世代別ガベージコレクターの利点が大きくなります。実験結果はこの直感を裏付けていますか?

5
0と1の文字列をどれだけ圧縮できるかについて、既知の最大値はありますか?
ずいぶん前に、ある種の教授が将来、データをわずか2ビット(またはそのようなもの)に圧縮できると言っている新聞記事を読みました。 もちろんこれは正しくありません(そして、彼が正確に述べたことの私の記憶が正しくない可能性があります)。(技術的には可能であっても)0と1の文字列を2ビットだけに圧縮するのは実用的ではないことは理解できます。 'および' 10 'から選択)。 とにかく、これにより、何らかのスキームに従って0と1の任意の長さの文字列を圧縮することの実現可能性について考えるようになりました。この種の文字列について、文字列の長さ(0と1の比率はおそらく重要ではない)と最大圧縮の間に既知の関係がありますか? 言い換えると、0と1の文字列を圧縮できる最小の(可能な限り短い)長さを決定する方法はありますか? (ここでは、現在技術的に可能なものではなく、数学的な最大圧縮に興味があります。)

6
データベース計算でのグループ、モノイド、およびリングの使用法は何ですか?
Twitterのような会社が、グループ、モノイド、リングなどの代数的概念に興味を持つのはなぜですか?github:twitter / algebirdでリポジトリを参照してください。 私が見つけることができたのは: Bloom filter、HyperLogLog、CountMinSketchなどの興味深い近似アルゴリズムのためのモノイドの実装。これらにより、これらの洗練された操作を数字のように考え、それらをhadoopまたはオンラインで加算して、強力な統計および分析を生成できます。 そしてGitHubページの別の部分で: もともとは行列がの要素である値だった火傷のマトリックスAPIの一部として開発されました モノイド、グループ、またはリングを。その後、Scalding内やTwitter内の他のプロジェクトで、コードの適用範囲が広がったことは明らかでした。 この広範なアプリケーションは何でしょうか?ツイッター内で、一般的な関心のために? データベースの構成集合体はモノイドのような構造を持っているようです。 Quoraに関する同じ質問:抽象代数(代数付き)に対するTwitterの関心は何ですか? 私は数学のバックグラウンドを持っていますが、コンピューター科学者ではありません。モノイドとセミグループを「現実世界」で使用するのは素晴らしいことです。これらは通常、役に立たない理論的構成要素と見なされ、多くの抽象的な代数コースで無視されます(興味深いことは何もありません)。

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