コンピュータサイエンス

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

1
4Dラインを単純化するためのO(n log n)アルゴリズムはありますか?
行の単純化のためのRamer-Douglas-Peuckerアルゴリズムには、最悪の場合のランタイムがあります。適切に分散されたランダム入力の場合、ランタイムの複雑さが予想されます。2Dには、実行時の最悪のケースを持つ他のアルゴリズムがあり、Ramer-Douglas-Peuckerアルゴリズムとまったく同じ結果を計算します。これらのアルゴリズムは「パス(凸)ハル」データ構造に基づいているため、4Dラインに一般化できるかどうかは明らかではありません。O (n log n )O (n log n )O(n2)O(n2)O(n^2)O (n ログn )O(nlog⁡n)O(n \log n)O (n ログn )O(nlog⁡n)O(n \log n) 4Dラインの場合に(入力に依存しないランタイム(予想)を備えた(ランダム化された)アルゴリズムはありますか?ユークリッド距離とグローバルな絶対許容誤差を仮定できます。O (n ログn )O(nlog⁡n)O(n \log n)

6
「一方のコンピューターは他方のコンピューターよりも遅い」と学術的に言うにはどうすればよいですか?
私は研究論文を書いていますが、基本的に、あるマイクロコントローラーは他のマイクロプロセッサーよりも遅いと言わざるを得ません。しかし、単に「遅い」と言うだけでは、研究論文では適切ではないのではないかと心配しています。 私は正しいですか?1つのプロセッサが「遅い」とだけ言っても大丈夫ですか、それとも別のことを言う必要がありますか?他に何が言えますか?私が思いついたのは、一方が他方よりも「計算能力が低い」こと、またはマイクロコントローラーが「低計算能力」であることです。残念ながら、これらの表現はオンライン検索であまり人気がないようです。 だから、これを言うより良い、学術的に正しい方法は何でしょうか?

1
テストと設定またはスワップなしのハードウェアロックの実装はありますか?
ロックは、通常、テストと設定およびスワップマシンレベルの命令によって実装されます。これらを使用しない他の実装はありますか? また、クリティカルセクションの問題に対するすべてのハードウェアレベルのソリューションは、割り込みの無効化、テストと設定、およびスワップの3つだけに分類できると言えますか?

2
二次時間を必要とする可能性のある問題
入力に対してΩ(|x|2Ω(|x|2\Omega(|x|^2)の下限を持つ問題の例を探しています。xxx 問題には次のプロパティが必要です。 Ω(n2)Ω(n2)\Omega(n^2)任意のアルゴリズムのランタイムプルーフ-最初の優先順位は、可能な限り単純な下限引数を持つことです。 O(n2)O(n2)O(n^2)アルゴリズム、可能であれば、単純なアルゴリズム。 (またはそれ以下)の出力サイズ。明らかに、長さの出力を必要とする問題には、少なくとも同様の実行時間が必要でしたが、それは私が探しているものではありません。決定の問題がここに収まることに注意してください。O(n)O(n)O(n)Ω(n2)Ω(n2)\Omega(n^2) (可能であれば)「自然な」問題。正式な定義がなければ、CSの卒業生が認識する問題が望ましいです。 私は最近そのような問題について尋ねられましたが、簡単な問題を思い付くことができませんでした。最初に思い浮かんだ問題は、これはランタイムの問題であると思われました。これは十分に単純ではなく、さらに、この共役は最近偽りであることが証明されました:o。3SUM3SUM3SUMΩ(n2)Ω(n2)\Omega(n^2) 極めて不自然な問題に行く、私は入力決定論TMおよび入力として取得する問題と考えてい⟨M⟩,x⟨M⟩,x\langle M \rangle,x、および後にテープヘッドの位置を出力(|M|+|x|)2(|M|+|x|)2(|M|+|x|)^2、それはだときの手順実行すると、xxxおそらく質問に答えます。 どうしても必要な場合は、シングルテープTMモデルを使用していることに同意してください。ただし、ランタイムが正確なモデルに依存しない問題をお勧めします(合理的なモデルであれば)。 したがって、実行時間がある単純な(証明する)自然な(よく知られている)問題を見つけることができますか?Θ(n2)Θ(n2)\Theta(n^2)

1
どのクラスのデータ構造を永続化できますか?
永続データ構造は不変のデータ構造です。それらに対する操作は、データ構造の新しい「コピー」を返しますが、操作によって変更されます。ただし、古いデータ構造は変更されません。一般に、効率性は、基礎となるデータの一部を共有し、データ構造の完全なコピーを回避することにより達成されます。 質問: (同じまたは非常に類似した複雑さを維持しながら)永続化できるデータ構造のクラスに関する結果はありますか? (同じまたは非常に類似した複雑さを維持しながら)すべてのデータ構造を永続化できますか? (同じまたは非常に類似した複雑さを維持しながら)永続化できないデータ構造はありますか?

3
コンピューターチェスで人工知能を使用する方法
一部の(歴史的)論文では、チェスは人工知能のショウジョウバエと呼ばれています。現在の研究では、検索アルゴリズムの単なる適用はせいぜい高度なコンピューターサイエンスであると思われますが、AI技術を適用(および実践)できる分野はまだあると思います。 簡単な例は、プログラムが特定の種類のポジションに適していないため、特定の動きを使用するかどうかをプログラムに教えることができるオープンブック学習です。強化学習の形式を使用して、これを自動化できます。プログラムを自分自身と対戦して、勝ちのラインの確率を上げ、ラインを失う確率を下げることができると思います。 より複雑な例は、学習評価関数を使用することです(たとえば、正方形のテーブルの値を調整できます)。しかし、私は考えています: (現実的な開始線の量とは対照的に)膨大な量の現実的な位置があるためにすべてのノイズが与えられた コンピューターチェスゲームのコスト(期間)と負荷をプレイする必要性。 どのようにこれを効果的に行うことができますか?(または、ニューラルネットワークなどの他の手法を検討する必要があります。)

3
CookieボックスにいくつのCookieがありますか?—星を並べる
ホリデーシーズンが近づいてきたので、シナモンスターを作ることにしました。それは楽しかった(そして結果はおいしい)が、星の最初のトレイを箱に入れたときに私の内側のオタクが縮み、それらが1つのレイヤーに収まらなかった: ほとんど!彼らがフィットする方法はありますか?とにかく星をどれだけタイルできますか?これらが通常の6点星であるとすれば、よく知られている六角形のタイルを近似として使用できます。 右上の1つをめちゃくちゃにしました。 しかし、これは最適ですか?ヒントの間には十分なスペースがあります。 この考慮のために、長方形のボックスと6点の規則正しい星に制限してみましょう。つまり、すべてのヒントとその隣の隅との間に30度(または)があります。星は、内側半径と外側半径によって特徴付けられ。π6π6\frac{\pi}{6}r私r私r_iroror_o [ ソース ] 我々は六角形有することに留意されたいとhexagramsため。これらを極端なもの(Cookieの場合)と見なし、その間の範囲、つまり。r私= 3√2⋅ Ror私=32⋅ror_i = \frac{\sqrt{3}}{2} \cdot r_or私= 13√⋅ Ror私=13⋅ror_i = \frac{1}{\sqrt{3}} \cdot r_or私r0∈ [ 13√、 3√2]r私r0∈[13、32]\frac{r_i}{r_0} \in \Bigl[\frac{1}{\sqrt{3}}, \frac{\sqrt{3}}{2}\Bigr] 私のcookieにはと不完全さを無視しています。r私≈ 17 M Mr私≈17mmr_i \approx 17\mathrm{mm}ro≈ 25 メートルメートルro≈25mmr_o \approx 25\mathrm{mm} 上記の特性を持つ星の最適なタイリングとは何ですか?静的な最適なタイリングがない場合、効率的に良いものを見つけるためのアルゴリズムはありますか?

4
ランタイム環境は無限ループを検出できますか?
ランタイム環境で無限ループを検出し、その後関連するプロセスを停止することは可能でしょうか、またはそのようなロジックを実装することは停止問題を解決することと同等でしょうか? この質問の目的のために、「無限ループ」を定義して、実行時にプロセスを以前とまったく同じ状態(データを含む)に戻す一連の命令と関連する開始スタック/ヒープデータを意味します。無限ループを開始します。(言い換えると、piの無限に長い10進展開を生成するプログラムは、「無限ループ」に「スタック」しません。反復ごとに、関連付けられたメモリのどこかにpiの桁が増えるためです。) (/programming//q/16250472/1858225から移植)

2
オペレーティングシステムは、ランダムシードのエントロピーをどのように作成しますか?
Linuxでは、ファイル/dev/randomと/dev/urandomファイルは、それぞれ、擬似ランダムバイトのブロックおよび非ブロック(それぞれ)ソースです。 それらは通常のファイルとして読むことができます: $ hexdump /dev/random 0000000 28eb d9e7 44bb 1ac9 d06f b943 f904 8ffa 0000010 5652 1f08 ccb8 9ee2 d85c 7c6b ddb2 bcbe 0000020 f841 bd90 9e7c 5be2 eecc e395 5971 ab7f 0000030 864f d402 74dd 1aa8 925d 8a80 de75 a0e3 0000040 cb64 4422 02f7 0c50 6174 f725 0653 2444 …

2
チューリング削減によってNP硬度を示すことはできますか?
Ramírez-Alfonsínによる論文「フロベニウス問題の複雑さ」では、チューリング縮約を使用して問題がNP完全であることが証明されました。それは可能ですか?正確にどのように?これは、多項式時間の多倍数削減によってのみ可能だと思いました。これに関する参照はありますか? NP硬度、さらにはNP完全性という2つの異なる概念がありますか?しかし、実際の観点から、私の問題がNP困難であることを示したい場合、私はどちらを使用するのですか? 彼らは次のように説明を始めました: 問題から減少チューリング多項式時間P1P1P_1 別の問題に 解くアルゴリズムAで 「解決するための仮想的なサブルーチンAを使用して、 のための多項式時間アルゴリズムであったAが場合は、そのような」 次いでAは多項式であろう時間アルゴリズム 。 はチューリングを還元できると 言い ます。P2P2P_2P1P1P_1P2P2P_2P2P2P_2P1P1P_1P1P1P_1P2P2P_2 問題 は、NP完全決定問題 があり、 をチューリング還元してできる 場合、NP困難(チューリング)と呼ばれます。P1P1P_1P2P2P_2P2P2P_2P1P1P_1 そして、彼らはNP完全問題からのそのようなチューリング簡約を使用して、他の問題のNP完全性を示します。

4
ラムダ計算で関数が匿名であることが重要なのはなぜですか?
私は、「関数型プログラミングの冒険」というタイトルのジムウェイリッヒによる講義を見ていました。この講義では、高次関数の不動点を本質的に見つけるYコンビネータの概念を紹介します。 彼が述べているように、動機の1つは、ラムダ計算を使用して再帰関数を表現できるようにすることです。これにより、チャーチの理論(ラムダ計算を使用して効果的に計算できるもの)が維持されます。 問題は、ラムダ計算が名前付き関数を許可しないため、関数がそれ自体を単純に呼び出すことができないことです。 n (x 、y)= x + yn(x,y)=x+yn(x, y) = x + y 名前 ' 'を付けることはできません。匿名で定義する必要があります。nnn (x 、y)→ x + y(x,y)→x+y(x, y) \rightarrow x + y ラムダ計算に名前のない関数が重要なのはなぜですか?名前付き関数がある場合、どの原則に違反しますか?それとも、私はジムのビデオを誤解しただけですか?

1
最後のN個の数値の加重合計
ストリームで数値を受け取っているとします。各数値を受信した後、最後の数値の加重合計を計算する必要があります。加重は常に同じですが、任意です。NNN 計算を支援するためにデータ構造を保持することが許可されている場合、これはどの程度効率的に実行できますか?よりも良いこと、つまり数字を受け取るたびに合計を再計算することはできますか?Θ(N)Θ(N)\Theta(N) 例:重みがます。ある時点で、最後の数値のリストと、加重和ます。W=⟨w1,w2,w3,w4⟩W=⟨w1,w2,w3,w4⟩W= \langle w_1, w_2, w_3, w_4\rangleNNNL1=⟨a,b,c,d⟩>L1=⟨a,b,c,d⟩>L_1= \langle a, b, c, d \rangle>S1=w1∗a+w2∗b+w3∗c+w4∗dS1=w1∗a+w2∗b+w3∗c+w4∗dS_1=w_1*a+w_2*b+w_3*c+w_4*d 別の番号を受け取ったら、リストを更新してをし、を計算する必要があります。eeeL2=⟨b,c,d,e⟩L2=⟨b,c,d,e⟩L_2= \langle b,c,d,e\rangleS2=w1∗b+w2∗c+w3∗d+w4∗eS2=w1∗b+w2∗c+w3∗d+w4∗eS_2=w_1*b+w_2*c+w_3*d+w_4*e FFTを使用した検討 この問題の特殊なケースは、高速フーリエ変換を使用することで効率的に解決できるようです。ここでは、倍数で加重和を計算します。言い換えれば、数値を受け取り、対応する加重和を計算することができます。これを行うには、過去の数(合計が既に計算されている)と、合計個の新しい数が必要です。SSSNNNNNNNNNN−1N−1N-1NNN2N−12N−12N-1 この入力数のベクトルと重みベクトル、係数を逆にして多項式との係数を定義する場合、積はaからまでの係数を持つ多項式が、求める重み付き和になります。これらは、時間でFFTを使用して計算できます。これにより、入力数ごとのΘ(\ log(N))時間の平均が得られます。WWWP(x)P(x)P(x)Q(x)Q(x)Q(x)QQQP(x)×Q(x)P(x)×Q(x)P(x)\times Q(x)xN−1xN−1x^{N-1}x2N−2x2N−2x^{2N-2}Θ(N∗log(N))Θ(N∗log⁡(N))\Theta(N*\log (N))Θ(log(N))Θ(log⁡(N))Θ(\log (N)) ただし、新しい数値が受信されるたびに加重和を効率的に計算する必要があるため、これは前述の問題の解決策ではありません。計算を遅らせることはできません。

2
最大7つの比較で5つの整数の配列をソートします
最悪の場合に7つの比較が必要になるように、5つの整数のリストをソートするにはどうすればよいですか?他の操作がいくつ実行されるかは気にしません。私は整数について特別なことは何も知りません。 私はマージソートアプローチに従うか、マージソートとバイナリサーチを使用して挿入位置を見つけるなど、8つの比較にまで下がったいくつかの異なる分割統治アプローチを試しましたが、最終的には8つの最悪の場合を比較します。 今のところ、解決策ではなく、ヒントを探しています。

1
言語を認識するチューリングマシンを無制限の文法に変換するにはどうすればよいですか?
このウィキペディアの記事によると、無制限の文法はチューリングマシンと同等です。この記事では、あらゆるチューリングマシンを無制限の文法に変換できると述べていますが、文法をチューリングマシンに変換する方法のみを示しています。 どうすれば実際にそれを行い、認識言語を認識するチューリングマシンを無制限の文法に変換できますか?遷移規則を文法規則に置き換えようとしましたが、チューリングマシンにはさまざまな状態の構成もあります...LLL

2
を満たす2つの関数
二つの機能構築満足します:f,g:R+→R+f,g:R+→R+ f,g: R^+ → R^+ は連続的です。f,gf,gf, g は単調に増加しています。f,gf,gf, g と G ≠ O (F )。f≠O(g)f≠O(g)f \ne O(g)g≠O(f)g≠O(f)g \ne O(f)

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