コンピュータサイエンス

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

1
自然数のセットの最大ペアワイズGCDを効率的に見つける
次の問題を検討してください。 ましょは自然数の有限サブセットです。S={s1,s2,...sn}S={s1,s2,...sn}S = \{ s_1, s_2, ... s_n \} ましょうgでのCのD (sはI、S J) | sのiが、S J ∈ S 、S I ≠ S J } 、G 、C 、D (X 、Yは)の最大公約数であり、X及びYG={G={G = \{ gcd(si,sj)gcd(si,sj)gcd(s_i, s_j)si,sj∈S,si,sj∈S,s_i, s_j \in S, si≠sj}si≠sj} s_i \neq s_j \}gcd(x,y)gcd(x,y)gcd(x,y)xxxyyy の最大要素を求めます。GGG この問題は、ユークリッドのアルゴリズムを使用して各ペアの最大公約数を取り、最大のものを追跡することで解決できます。 これを解決するより効率的な方法はありますか?

1
Earleyベクトルから構文木の森を再構築するにはどうすればよいですか?
Earleyベクトルを認識エンジンとして使用するのは非常に簡単です。文字列の最後に達したとき、位置0で開始された公理生成が完了したかどうかを確認するだけです。少なくとも1つある場合、文字列は受け入れられます。 Earleyベクトルを使用して解析ツリーを再構築することは、それほど明白ではありません。実際、私はアルゴリズムの手順がどのように機能するかを理解することはできません。さらに、私が見つけた唯一の参照はあいまいまたは超技術的なものでした。誰かがそれに光を当てることができますか?

6
チューリングマシンはある時点で無限のものを想定していますか?
前の質問でアルゴリズムとは正確には何ですか?、事前計算された値の配列に基づいて関数の値を返す「アルゴリズム」がアルゴリズムであるかどうかを尋ねました。 私の注意を引いた答えの1つはこれです。 階乗の例は、不均一計算と呼ばれる別の計算モデルに入ります。チューリングマシンは、均一な計算モデルの例です。単一の有限の記述があり、任意の大きなサイズの入力に対して機能します。つまり、すべての入力サイズの問題を解決するTMが存在します。 ここで、代わりに次のように計算を検討することができます。各入力サイズに対して、問題を解決するTM(またはその他の計算デバイス)が存在します。これは非常に異なる質問です。TMには有限の記述があるため、1つのTMはすべての整数の階乗を格納できないことに注意してください。ただし、1000未満のすべての数値の階乗を格納するTM(またはCのプログラム)を作成できます。次に、1000〜10000のすべての数値の階乗を格納するプログラムを作成できます。 すべてのTMが実際に無限を処理する何らかの方法を想定しているわけではありませんか?つまり、アルゴリズムを介して任意の数Nの階乗を計算する有限の記述を持つTMでさえ int fact(int n) { int r = 1; for(int i=2;i<=n;i++) r = r*i; return r; } TMには、「<=」コンパレータを介して任意のサイズの数値を比較する「ハードウェア」があり、さらに iを任意の数値までインクリメントするADDersがあるという仮定が含まれています。、任意のサイズの数値を表す機能もあります。 何か不足していますか?私の他の質問で提示したアプローチが、無限のものに関してこれよりも実行可能性が低いのはなぜですか?

2
ブール関数チューリングは完了していますか
ブール関数は、関数です。f:{ 0 、1 }ん→ { 0 、1 }f:{0,1}n→{0,1}f:\{0,1\}^n\rightarrow\{0,1\} ブール基底は、任意のシーケンスを反転したり、変更せずに残したりできるため、チューリング完全であることがわかっています。ゲートについても同じことが言えます。S ∈ { 0 、1 } X O R(∨ 、∧ )(∨,∧)(\vee,\wedge)S ∈ { 0 、1 }s∈{0,1}s\in\{0,1\}X O RXOR\mathrm{XOR} この意味で、最初のマシン構成始めて、とが連続する値:B I ∈ { 0 、1 } X O R V Ib =( b1、… 、bん)b=(b1,…,bn)\textbf{b}=(b_1,\ldots,b_n)b私∈ { 0 、1 }bi∈{0,1}b_i\in\{0,1\}X O RXOR\mathrm{XOR}v私vi\textbf{v}_i B ⊕ V1⊕ …

1
自然数線形システムを解くためにどのようなアルゴリズムが存在しますか?
私は次の問題を見ています: 自然数、およびいくつかの入力ベクトル次元ベクトルが与えられると、はと自然数係数の線形結合ですか?v 1、… 、v m u u v iんんnv1、… 、vメートルv1、…、vメートルv_1, \ldots, v_mあなたあなたuあなたあなたuv私v私v_i つまり、いくつかのがありますここで、ですか? U = T 1 、V 1 + ⋯ + T M のV Mt1、… 、tメートル∈ Nt1、…、tメートル∈Nt_1, \ldots, t_m \in \mathbb{N}u=t1v1+⋯+tmvmu=t1v1+⋯+tメートルvメートルu = t_1 v_1 + \dots + t_m v_m 明らかに、この問題の実数バージョンはガウスの消去法を使用して解決できます。私は不思議に思っています、この問題の整数バージョンは研究されましたか?それを解決するためにどのようなアルゴリズムが存在しますか? これは自然数を使用していますが、モジュラー演算を使用していないため、これは中国の剰余定理やそのようなシステムとは多少異なります。また、それはディオファントス方程式に関連しているようですが、非負の整数のみが考慮される場合に何が行われたのでしょうか?これは、多次元のサブセット和問題を連想させるものであり、一般化されて、各ベクトルの任意の数のコピーを取ることができます。uuuがv_1、\ dots、v_mによって生成されたラティスの要素であるかどうかのテストにも関連しているようですが、ここでは負でない係数との線形結合しか許可されていません。v1,…,vmv1,…,vmv_1,\dots,v_m 興味のある人にとっては、これは、Parikhの定理のように、Parikhベクトルが線形セットにあるかどうかを見ることによって動機付けられます。 特に、実数/浮動小数点数に入るのを避け、自然数演算のみを使用して問題を解決できるアルゴリズムに興味があります。

1
浮動小数点モジュラスの正確さが重要なのはなぜですか?
ほとんどのSmalltalk方言は現在、単純な浮動小数点係数(fmod / remainder)を実装しています。 Squeak / Pharoを改善し、最終的には他のSmalltalkの標準(IEEE 754、ISO / IEC 10967)への準拠を改善するために、これを変更しました。 ただし、これらの変更の採用については、標準に準拠するだけでは同僚を納得させることができないため、この正確さがどのような状況で実際に重要であるかを説明すると、非常に役立ちます。今のところ、自分で良い例を見つけることはできません。 ここで誰かが、なぜ/いつ/どこで(どのアルゴリズムのIOW)そのような係数の正確さが重要になるか知っていますか?

1
形式言語間の適切な同型は何ですか?
アルファベットΣ上の形式言語 は、Σ ∗のサブセット、つまりそのアルファベット上の単語のセットです。2つの形式言語LとL ′は、対応するセットがL form L ′のサブセットとして拡張的に等しい場合、等しい。複雑性理論の言語を使用して、「問題」の概念を形式化できます。LLLΣΣ\SigmaΣ∗Σ∗\Sigma^*LLLL′L′L'L∪L′L∪L′L\cup L'「一般に」エクステンションの平等は決定不可能であると文句を言うかもしれませんが、これは誤解されると思います。 私はしばらくして次の問題を考えています:アルファベットΣ = { a 、b }およびΣ ′ = { c 、d }(ここでa、b、cおよびd)に関する 2つの言語およびL ′LLLL′L′L'Σ={a,b}Σ={a,b}\Sigma=\{a,b\}Σ′={c,d}Σ′={c,d}\Sigma'=\{c,d\}aaabbbcccddd異なる文字)は、「まったく」同じ「問題」を説明していても、決して等しくなることはありません。しかし、実際に「正確に」同じ「問題」を説明する場合、それらは同型でなければなりません。私が知りたいのは、複雑性理論に適した同型の考えられる概念です。私は当初、有限状態マシンのような計算的に弱い「トランスレーター」を使用して、許容される同型を定義できると考えていましたが、これは、同等の論理式間の簡単な構文変換ではすでに壊れているようです。(例えば参照の構文定義で、この表をデュアル A⊥A⊥A^\bot線形ロジックで)。 今日、私は次のアイデアを思いつきました。特定の「決定問題」に対応する言語の定義には2つの部分があることがよくあります:(1)許可された問題インスタンスを有限のシンボル文字列としてエンコードすること、および(2)「その言語に属する「受け入れられた」問題インスタンス。与えられたシンボルの有限文字列が許可された問題インスタンスのエンコーディングであるかどうかのチェックで、有限状態マシンよりも計算的に強力なマシンがすでに必要な場合、このより強力なマシンを許可された同型の定義にも使用する必要があります。 質問:この一連の推論により、私の問題が「解決」される可能性はありますか?私の問題はすでに解決されているので、適切なリファレンスを読む必要があるだけですか?私の問題自体は理にかなっていますか、またはこれは拡張平等の決定不能性について不平を言うのと同じくらい間違っていますか? 編集(まだ回答はありません)「(1)シンボルの有限文字列としての許可された問題インスタンスのエンコーディング」には、正規化された入力の(非表示の)仮定がすでに含まれていることに気付きました。この仮定がないと、2つの異なる有限文字列が同じ問題インスタンスに対応する可能性があります。与えられた有限の文字列が有効かどうかをチェックする代わりに、チェックは正規化された入力を生成します(そして無効な文字列を特別な文字列にマップします)。 この設定には、チェック/正規化を行うマシンに、有限ストリングを他の有限ストリングに変換する手段がすでに備わっているという利点があります。このタスクに許可されたマシン(複雑度クラス)は問題定義の一部である可能性があり、(等)射は同​​じマシン(複雑度クラス)を使用します。(ラファエルのコメントからの「ポリタイム多元削減」の提案は、実際にPの問題の1つの可能性でしょう。PP\mathsf{P}。) 欠点は、この指定方法は確定的マシンにのみ適している場合があることです。非決定的なマシンでは、2つの入力文字列が同じ問題インスタンスに対応するかどうかを指定/決定するためのより柔軟な方法が必要になる場合があります。

1
なぜイントロソートはマージソートではなくヒープソートを使用するのですか?
イントロソートの実装をカバーする宿題の一環として、なぜマージソート(または他のアルゴリズムではなく)の代わりにヒープソートが使用されるのかを尋ねられます。 O(nlog(n))O(nlog⁡(n))O(n\log(n)) Introsortは、高速な平均パフォーマンスと(漸近的に)最適な最悪のケースのパフォーマンスの両方を提供するハイブリッドソートアルゴリズムです。クイックソートで始まり、再帰の深さがソートされる要素の数(の対数)に基づくレベルを超えると、ヒープソートに切り替わります。(ウィキペディア、2014年5月6日取得。) 私が考えることができる唯一の理由は、ヒープソートが「適所に」あるということです...しかし、これがなぜここで重要になるのかは本当にわかりません。

2
型推論+オーバーロード
開発中の言語の型推論アルゴリズムを探していますが、通常は次のいずれかであるため、自分のニーズに合った型推論アルゴリズムを見つけることができませんでした。 アラモスHaskell、多態性はあるがアドホックなオーバーロードはない アラカルトC ++(自動)で、アドホックなオーバーロードはあるが、関数は単相 特に、私のタイプシステムは(簡素化)です(Haskellish構文を使用していますが、これは言語に依存しません)。 data Type = Int | Double | Matrix Type | Function Type Type そして、私はかなりのオーバーロードを持っている演算子*を持っています: Int -> Int -> Int (Function Int Int) -> Int -> Int Int -> (Function Int Int) -> (Function Int Int) (Function Int Int) -> (Function Int Int) -> (Function Int …

2
クロックページ置換アルゴリズム-すでに存在するページ
クロックページ置換アルゴリズムをシミュレーションするときに、既にメモリ内にある参照が来ても、時計の針はまだインクリメントしますか? 次に例を示します。 4スロット、クロックページ置換アルゴリズムを使用 参照リスト:1 2 3 4 1 2 5 1 3 2 4 5 最初のリストは次のようになります。 -> [1][1] [2][1] [3][1] [4][1] insertの次の参照は1、次に2になります。手は1の後、1の後、2の後を指しますか?つまり、5を挿入すると、時計は次のようになります。 -> [5][1] [2][0] [3][0] [4][0] ?

1
可逆コンピューティングの「入力を保存する」方法の何が問題になっていますか?
私は、リバーシブルコンピューティングについて読み始めたばかりの学部生です。ランダウアーの原理により、不可逆的な計算は熱を散逸させます(そして、可逆的な計算は熱を散逸させません)。私はこれまでリバーシブルコンピューティングについて聞いたことがなかった教授と一緒に育てました。彼はリバーシブルコンピューティングの理論がなぜ些細なものではないのか理解するのに苦労していました。 彼のポイントは、常に入力を保存できるということでした。つまり、任意の関数で、可逆にしたい場合は、新しい関数定義します。(またはそして、あなたはちょうど入力の最後のビットに sを入れます)これは最初のビットに出力を返し、他のビットに入力を返します。次に、を反転するには、出力を破棄して、保存した入力を返すだけです。F R E V E R S I BのLのE:{ 0 、1 } のn → { 0 、1 } 2 N { 0 、1 } 2 N → { 0 、1 } 2 N 0 N N N Ff:{ 0 、1 }ん→ { 0 、1 }んf:{0,1}n→{0,1}nf: \{ 0, 1 …

6
プログラム検証手法は、ハートブリードのジャンルのバグの発生を防ぐことができますか?
ハートブリードバグの問題について、ブルースシュナイアーは4月15日の暗号グラムで次のように書いています。「破滅的」は正しい言葉です。1から10のスケールで、これは11です。私は数年前に、特定のオペレーティングシステムのカーネルが最新のプログラム検証システムで厳密に検証されていることを読みました。したがって、今日のプログラム検証手法を適用することで、Heartbleedのジャンルのバグが発生するのを防ぐことができますか、それとも、これはまだ非現実的か、または基本的に不可能でしょうか。

3
グラフ内のパスのコンパクトな表現
グラフの単純なパスのサブセットがあります。パスの長さはによって制限されます。ddd 選択したパス以外のパスが表示されないようにパスを表すことができる最もコンパクトな方法(メモリに関して)は何ですか? このパスのサブセットを何度も繰り返すアルゴリズムでこの表現を使用したいこと、そしてかなり高速にしたいことに注意してください。たとえば、標準の圧縮アルゴリズムは使用できません。 私の頭に浮かんだ表現の1つは、それらを1組の木として表現することでした。それを最適なツリー数に下げるのはNP困難だと思いますか?他にどんな表現が良いでしょうか?

2
ハフマンツリーと最大深度
各シンボルの周波数を知っていると、ハフマンアルゴリズムを適用せずにツリーの最大の高さを決定することは可能ですか?この木の高さを与える式はありますか?

1
航空写真の水路の認識—エッジ検出画像からのポリゴン
私は航空写真(たとえばGoogleマップから)から水路を認識しようとしています。地方自治体は、水路(および道路、建物など)の場所を示すGISデータを持っていることがよくありますが、地方自治体の水データはしばしば不正確であり、航空写真を使用して改善できる可能性があります。したがって、必ずしも信頼できるとは限らないデータがすでにいくつかあります。 データに対していくつかの基本的な画像処理を行う方法を知っています(残念ながら、ここに表示するサンプル画像はまだありません。これを行う方法を想像しようとしていますが、まだ機能しているコードはありません)。 画像の水路のビットを使用して色の値のセットを収集し、これらの色に最も近いピクセルを特定できます。他のタイプのフィーチャ(草、道路、建物など)の場合も同様です。ピクセルが「十分に近い」しきい値を設定すると、おそらく水路であるピクセルのセットが得られます(ただし、ノイズが多くなります)。 画像をグレースケールに変換し、標準のエッジ検出アルゴリズムを使用して、エッジの場所を特定できます。繰り返しますが、これにより境界のようなピクセルのセットが得られますが、ノイズが発生し、エッジが考えすぎたり、ギャップが生じたりします。 出力として必要なのは、推定水路の輪郭を描く一連のポリゴンです。 直感的に、検出されたエッジを使用してポリゴンを作成し、カラー情報を使用してそれらが水であるかを判断します。おそらく、すでに持っている政府のデータを利用します。 エッジ検出アルゴリズムの結果から閉じたポリゴンの適切なセットに到達するための既知の方法はありますか?または、より良い方法がある場合、この問題を攻撃する方法に関する他のヒントはありますか?

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