コンピュータサイエンス

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

5
ハッシュテーブル操作O(1)とはどのようなデータですか?
答えから(いつ)ハッシュテーブルルックアップはO(1)ですか?、データが特定の統計条件を満たしている場合、ハッシュテーブルには少なくとも償却されたO(1)O(1)O(1)最悪の場合の振る舞いがあり、これらの条件を広くするのに役立つテクニックがあります。 しかし、プログラマーの観点から、私は自分のデータが何であるかを事前に知りません。それはしばしば外部ソースから来ます。そして、一度にすべてのデータを取得することはめったにありません。挿入と削除は、ルックアップの速度をそれほど下回らない速度で行われることが多いため、データを前処理してハッシュ関数を微調整します。 だから、一歩を踏み出す:データソースに関する知識があれば、ハッシュテーブルにO(1)O(1)O(1)操作の可能性があるかどうか、そしておそらくハッシュ関数で使用するテクニックを判断するにはどうすればよいですか?

3
機能しない設定でのクロージャーの実装の問題
プログラミング言語では、クロージャは人気があり、しばしば望まれる機能です。ウィキペディアによると(強調鉱山): コンピューターサイエンスでは、クロージャー(...)は、その関数の非ローカル変数の参照環境と一緒の関数です。クロージャを使用すると、関数は直接のレキシカルスコープ外の変数にアクセスできます。 そのため、クロージャーは本質的に(匿名?)関数値であり、それ自身のスコープ外の変数を使用できます。私の経験では、これは、定義ポイントでスコープ内にある変数にアクセスできることを意味します。 ただし、実際には、少なくとも関数型プログラミング以外では、概念は異なるようです。異なる言語は異なるセマンティクスを実装しており、意見の対立さえあるようです。多くのプログラマーは、クロージャーが何であるかを知らないようで、それらを匿名関数にすぎないと見なしています。 また、クロージャを実装するときに大きなハードルが存在するようです。最も注目すべきは、Java 7にはそれらが含まれているはずでしたが、この機能は将来のリリースにプッシュバックされたことです。 閉鎖がなぜ理解するのが難しいのか、理解するのが難しいのはなぜですか?これはあまりにも広範で曖昧な質問なので、これらの相互接続された質問にさらに焦点を当てましょう。 一般的なセマンティック形式(小さなステップ、大きなステップなど)でクロージャを表現する際に問題はありますか? 既存の型システムは閉鎖に適しておらず、簡単に拡張できませんか? クロージャを従来のスタックベースのプロシージャ変換に合わせるのは問題ですか? 質問は主に手続き型、オブジェクト指向、およびスクリプト言語全般に関連していることに注意してください。私の知る限り、関数型言語には問題はありません。

1
カテゴリー理論的枠組みを利用するモナドの自然発生
今日、ヘニング・カースタンの講演(「確率的遷移システムのためのトレース意味論」)が初めてカテゴリ理論に直面しました。彼は、確率論的な遷移システムとそれらの挙動を一般的な方法で、すなわち数え切れないほど無限の状態セットとトレースの異なる概念で記述するための理論的枠組みを構築しました。この目的のために、彼は抽象化のいくつかの層をたどり、最終的にモナドの概念に行き着き、それをメジャー理論と組み合わせて必要なモデルを構築します。 最後に、最初に5分で説明した概念を記述するためのフレームワークを(おおよそ)構築するのに45分かかりました。私はこのアプローチの美しさを評価しています(トレースの異なる概念をうまく一般化します)が、それでも奇妙なバランスとして印象づけられます。 私はモナドが本当に何を見るのに苦労され、どのように一般的なAのコンセプトは用途に有用であることができます(両方の理論と実践で)。結果的に努力するだけの価値はありますか? したがって、この質問: モナドの抽象的な概念を適用でき、望ましい結果を導き出すのに役立つ(CSの意味での)自然な問題がありますか(または手段なしでも)(まったくまたはなしでより良い方法で)?

3
一定時間の操作で賢いメモリ管理?
固定サイズのブロックを含む2つの基本的なメモリ割り当て操作を実行できるメモリセグメント(必要に応じてファイルのようにサイズが拡大または縮小できる)を考えてみましょう。 1つのブロックの割り当て 使用されなくなった以前に割り当てられたブロックを解放します。 また、要件として、メモリ管理システムは現在割り当てられているブロックを移動することはできません。インデックス/アドレスは変更しないでください。 最も単純なメモリ管理アルゴリズムは、グローバルカウンタ(初期値0)をインクリメントし、その新しい値を次の割り当てのアドレスとして使用します。ただし、割り当てられたブロックがわずかしか残っていない場合、セグメントを短くすることはできません。 より良いアプローチ:カウンターを保持しますが、割り当て解除されたブロックのリスト(一定時間で実行可能)を維持し、空でない限り、新しい割り当てのソースとして使用します。 次は何?メモリセグメントを可能な限り短く保つ、一定の時間の割り当てと割り当て解除の制約があるにもかかわらず、できる賢いことはありますか? (目標は、現在割り当てられていないブロックを最小のアドレスで追跡することですが、一定の時間では実現できないようです…)

4
Randomized QuicksortにO(n log n)のワーストケースランタイムコストがあるのはなぜですか
ランダムクイックソートは、ピボットエレメントがランダムに選択されるクイックソートの拡張機能です。このアルゴリズムの最悪の場合の時間の複雑さは何ですか。私によると、それがあるべきであるO(n2)O(n2)O(n^2)ランダムに選択されたピボットが選択される場合、最悪の場合に起こるように、ソートまたは逆ソート順序。しかし、いくつかのテキスト[1] [2]では、最悪の場合の時間の複雑さはO(nlogn)O(nlog⁡n)O(n\log{n}) 何が正しいの?

3
量子コンピューターを特に便利にしているものは何ですか?
量子コンピューターは、ロジックを1回通過するだけで、考えられるすべての状態の重ね合わせを処理できることを知っています。 それが量子コンピューターを特別または有用にするものであると人々が指摘しているようです。 ただし、重ね合わせの入力を処理した後、重ね合わせの結果が得られます。重ね合わせの結果は、1つの質問のみを求めることができ、1つの値にまとめられます。また、重ね合わせ状態を複製することは(現在?)可能ではないことも知っているため、その1つの質問に対する答えを得ることにこだわっています。 どちらの場合も、まるで1つの状態だけが処理されたかのように効果的であるため、マルチ処理機能は実際には何も得ていないように見えます。 物事を誤解しているのですか、それとも量子コンピューティングの真の有用性は他の何かに由来していますか? 誰か他の人が何かを説明できますか?

5
異なるキャッシュのタグ、インデックス、オフセットビットの数を計算する方法は?
具体的には: 1)各ブロックに8個の32ビットワードがある4096ブロック/ラインのダイレクトマップキャッシュ。32ビットアドレスを想定して、タグフィールドとインデックスフィールドには何ビットが必要ですか? 2)1)と同じ質問ですが、完全連想キャッシュについてですか? 私が間違っている場合、私を修正してください: タグビット=アドレスビット長-インデックスの指数-オフセットの指数? [オフセットは3 = 2 ^ 3 = 8ですか、それとも2 ^ 5 = 32から5ですか?]

5
√nをパラメーターとして使用して再帰関係を解く
再発を考慮する T(n )= n−−√⋅ T( n−−√) +cnT(n)=n⋅T(n)+cn\qquad\displaystyle T(n) = \sqrt{n} \cdot T\bigl(\sqrt{n}\bigr) + c\,n 以下のための、いくつかの正の定数を有する、および。c T (2 )= 1n > 2n>2n \gt 2cccT(2 )= 1T(2)=1T(2) = 1 再発を解決するためのマスター定理は知っていますが、それを使用してこの関係をどのように解決できるかはわかりません。平方根パラメーターにどのようにアプローチしますか?

4
グラフの深さ優先検索におけるグレーノードの目的
私が見た深さ優先検索の多くの実装(例:ここ)では、コードは灰色の頂点(発見されたが、そのすべての隣人が訪問されたわけではない)と黒の頂点(発見され、そのすべての隣人が訪問された)を区別します。この区別の目的は何ですか?DFSアルゴリズムは、グレーであるか黒であるかに関係なく、訪問先の頂点にアクセスすることはないようです。

8
アルゴリズムがビット文字列として表現できると仮定できるのはなぜですか?
計算の複雑さとチューリングマシンに関する本を読み始めています。引用は次のとおりです。 アルゴリズム(つまりマシン)は、標準的なエンコーディングを決定すると、ビット文字列として表すことができます。 この主張は単純な事実として提供されていますが、私には理解できません。 たとえば、入力としてを取り、(x + 1 )2または以下を計算するアルゴリズムがある場合:バツxx(x + 1 )2(x+1)2(x+1)^2 int function (int x){ x = x + 1; return x**2; } それは、これはアルファベット使用して文字列として表現することができますどのように?{ 0 、1 }∗{0,1}∗\{0, 1\}^*


4
シャノンのデータ圧縮制限よりも小さいサイズにデータを圧縮できますか?
私はデータ圧縮アルゴリズムとデータ圧縮の理論的限界について読んでいました。最近、私は「コンビナトリアルエントロピーエンコーディング」と呼ばれる圧縮方法に出会いました。この方法の主なアイデアは、ファイルで表現される文字、その頻度、およびこれらの文字順列のインデックスとしてファイルをエンコードすることです。 これらのドキュメントは、この方法の説明に役立つ場合があります。 https://arxiv.org/pdf/1703.08127 http://www-video.eecs.berkeley.edu/papers/vdai/dcc2003.pdf https://www.thinkmind.org/download.php?articleid=ctrq_2014_2_10_70019 ただし、最初のドキュメントでは、この方法を使用して、シャノンの制限未満にテキストを圧縮できることを読みました(文字の頻度を保存するために必要なスペースとメタを保存するために必要なスペースを考慮しませんでした)ファイルのデータ)。私はそれについて考えましたが、この方法は非常に小さなファイルにはあま​​り効率的ではないことがわかりましたが、一方で、大きなファイルではうまく機能する可能性があります。実際、私はこのアルゴリズムやシャノンの限界を十分に理解していません。各文字の確率の合計に確率の逆数のを掛けたものだと知っています。L O G2log2log_2 だから私はいくつか質問があります: この圧縮方法は、実際にファイルをシャノンの制限よりも小さく圧縮しますか? ファイルをシャノンの制限未満に圧縮する圧縮アルゴリズムはありますか(私が知る限り、この質問に対する答えはノーです)。 ファイルをシャノンの制限よりも小さく圧縮する圧縮方法はありますか? コンビナトリアルエンコーディングが実際にシャノンの制限を超えてファイルを圧縮する場合、目的のファイルサイズに達するまで何度もファイルを圧縮することはできませんか?


1
2つまたは3つのクエリで多項式を見つける
ブラックボックスは、任意の点で多項式を評価できることを意味します。f(x)f(x)f(x)f(x)f(x)f(x) 入力:次数のモニック多項式のブラックボックス。f(x)∈Z+[x]f(x)∈Z+[x]f(x) \in\mathbb{Z}^+[x]ddd 出力:多項式の係数。dddf(x)f(x)f(x) 私のアルゴリズム: let f(x)=xd+ad−1xd−1+⋯+a1x+a0f(x)=xd+ad−1xd−1+⋯+a1x+a0f(x) = x^{d} + a_{d-1} x^{d-1} + \cdots + a_1 x + a_0 ブラックボックスを使用して多点で多項式を評価し、線形方程式系を取得します。これで、線形方程式を解いて目的の係数を取得できます。f(x)f(x)\mathcal{f(x)}ddd ただし、この場合、ブラックボックスに対する多くのクエリが必要です。クエリの数を最小限に抑えたい。クエリの数を2つまたは3つに減らす方法はありますか?O(d)O(d)\mathcal{O(d)}

2
プログラムの正確性、仕様
ウィキペディアから:理論的なコンピューターサイエンスでは、アルゴリズムが仕様に関して正しいと言われているときに、アルゴリズムの正当性が主張されます。 しかし問題は、「適切な」仕様を取得することは簡単な作業ではなく、正しいものを取得するための100%正しい方法(私が知る限り)がないため、単なる推定であるため、 「1つ」のように「見える」という理由だけで述語を仕様としてとるのは、プログラムが「正しく」見えるという理由だけでプログラムを正しいとみなさないのはなぜですか?

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