コンピュータサイエンス

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

3
無向グラフを有向グラフのサブカテゴリとして扱う
概して、無向グラフは、各エッジ(v、w)に常にエッジ(w、v)がある有向グラフに非常に似ています。これは、無向グラフを有向グラフのサブセットとして表示することが許容される可能性があることを示唆しています(おそらく、エッジの追加/削除は一致するペアでのみ実行できるという追加の制限があります)。 ただし、教科書は通常、この扱いに従っておらず、無向グラフを有向グラフのサブカテゴリではなく、別の概念として定義することを好みます。その理由はありますか?

2
ソーシャルネットワークグラフの問題
ここに問題があります: 多数の人々を表すノードと接続されたグラフがあります。各ノード/人は、トランプ対クリントン、紙の本対キンドルなどのトピックについて意見を持っています 目標は、特定の順序でノードの特定のサブセットを選択することにより、グラフ内のすべてのノードが同じ意見を共有するようにすることです。 人Aの友人の過半数が切り札をサポートしているが、人Aはクリントンをサポートしている場合。人物Aが選択された場合、彼/彼女の意見は切り札に変わります。 人の友達の意見を均等に分ければ、選択した人の意見を決めることができます。 これをどのように証明できるかを考えて、私はアイデアを使い果たしています。たぶん、あなたの一部は私にいくつかの指針を与えることができます。

1
依存型システムの証明のプリミティブとして再帰型が必要なのはなぜですか?
型理論と依存プログラミングは比較的新しいです。私は構造計算(CoC)やその他の純粋型システムについて研究してきました。特にコンパイラシステムの証明を保存する中間表現として使用することに興味があります。 (共)再帰型は、を唯一の型コンストラクタとして使用して、計算上表現できることを理解しています。しかし、それらは帰納法による証明の構築には使用できないことを許しました(許してください、今どこにあるかわかりません!)、たとえば、プレーンなCoC でであることを証明できませんでした(ただし、は)。0 ≠ 1 ナット Π (N:* )。Π (S :N → N)。Π (Z :N)。NΠΠ\Pi0 ≠ 10≠10\neq 1ナットNat\texttt{Nat}Π (N:∗ )。Π (S:N → N)。Π (Z:N)。NΠ(N:∗).Π(S:N→N).Π(Z:N).N\Pi(\mathbb{N}:*).\Pi(S:\mathbb{N}\rightarrow\mathbb{N}).\Pi(Z:\mathbb{N}).\mathbb{N} これが、彼らが帰納的構造(CIC)の計算を構築した理由だと思います。これは正しいです?しかし、なぜ?(共)帰納型をプリミティブとして使用しないと、そのような証明を表現できない理由を説明する資料は見つかりませんでした。これが当てはまらない場合、CICでそれらをプリミティブとして追加するのはなぜですか?

1
隣接行列の多項式を検査することによるグラフ同型への素朴なアプローチに関する文献
私はおそらく偽陽性を持っているグラフ同型へのアプローチを説明し、それが機能しないことを示す文献があるかどうか知りたいです。 2つの隣接行列所与、同型のチェックの確か素朴な方法は、行ごとかどうかをチェックすることであるの、行が存在するの列の順列であるを付し、。もう少し厳密には、質問は"ローカル同型"があるれるすべての行の。ローカル同型の生成は、行列を作成することにより、多項式時間で実行できます。次にとG,HG,HG, HuuuGGGvvvGGGuuuG[u]∼H[v]G[u]∼H[v]G[u] \sim H[v]ππ\piG[u]∼H[π(u)]G[u]∼H[π(u)]G[u] \sim H[\pi(u)]n×nn×nn\times nAAAA[u,v]=(G[u]∼H[v])A[u,v]=(G[u]∼H[v])A[u,v] = (G[u]\sim H[v])GGGHHHは局所同型であり、はサイクルカバーを持ち、すべてのサイクルカバーは局所同型です。AAA すべての通常のグラフは明らかにこの方法をだますので、少し単純な方法は、行列のべき乗を計算し、ローカル同型性をチェックして、事実を利用することですあなたが設定することにより、複数の行列を持っているあなたが見つけたときにどのようにその力、とだけ最後にサイクルカバーのチェックを。さらに少ない単純なアプローチは、演算回路の組実際、多項式のセットを見つけることである、と設定A [U、V] = 0を我々が見つけたときに、任意の多項式PとP(G)[U] \ない\シムPを( H)[v]。G2,H2,G3,H3,…G2,H2,G3,H3,…G^2, H^2, G^3, H^3,\ldotsA[u,v]=0A[u,v]=0A[u,v] = 0Gk[u]≁Hk[v]Gk[u]≁Hk[v]G^k[u]\not\sim H^k[v]A[u,v]=0A[u,v]=0A[u,v]=0pppp(G)[u]≁p(H)[v]p(G)[u]≁p(H)[v]p(G)[u]\not\sim p(H)[v] これは私にグラフ同型への信じられないほど素朴なアプローチのように見えるので、誰かがすでにそれを調査して次のような定理を証明したと確信しています Thm無限に多くのnnn場合、非同型のn×nn×nn\times n行列G,HG,HG, Hと順列ππ\piがあり、すべての多項式ppp、p(G)p(G)p(G)とp(H)p(H)p(H)はその順列によって局所的に同型になります:p(G)∼πp(H)p(G)∼πp(H)p(G)\overset{\pi}{\sim}p(H)。 質問:そのような定理はありますか?文献を調べましたが、見つかりません。 2つの非同型行列ごとに、計算することでローカル同型が反論されるように、多項式である次数境界がある場合、または簡単に計算できる多項式、それぞれ長さが多項式で制限されているが指数関数的である場合、グラフ同型のPアルゴリズムがあります。そのような多項式(または算術回路)が推測しやすい場合は、coRPアルゴリズムがあります。非局所同型性を目撃する算術回路(のファミリ)が常に存在する場合、これはcoNPアルゴリズムを提供します。kkknnnG1,H1,…,Gpoly(n),Hpoly(n)G1,H1,…,Gpoly(n),Hpoly(n)G^1, H^1, \ldots, G^{poly(n)}, H^{poly(n)}p1,…,pkp1,…,pkp_1, \ldots ,p_k ハイパワー行列のエントリが小さいフィールドで多項式を計算することによって、たとえばそれらをモジュロ小さい素数で計算することによって大きくなりすぎるという問題を回避できることに注意してください。でCONPのアルゴリズム、証明者は、これらの素数を提供することができます。

2
有限状態オートマトンの次の拡張が研究されていますか?
通常のように有限状態機械を考えますが、すべての遷移で、数値を加算または減算することによって整数カウンターを更新することもできます。セイ、フォームの遷移関数 新しい状態に移動し、P、及び追加Kをカウンタに、ここでのk ∈ Z(SO K正、負、またはゼロであることができます) 。δ(q、a )= (p 、k )δ(q,a)=(p,k)\delta(q,a) = (p,k)pppkkkk∈Zk∈Zk \in \mathbb{Z}kkk 最終状態とカウンタ値がである場合、文字列が受け入れられる、Fは状態およびカウンタ値のペアの有限集合です。FFFFFF このモデルは知られていますか?この特定の拡張機能の参照は見つかりませんでした。

4
人々がお互いにプレゼントを購入するためのショッピング旅行の最小数
nnn人のグループがあります。グループ内の誰にプレゼントを買わなければならないかというリストが与えられます。一人一人がプレゼントをいくつでも買う必要があるかもしれません。ショッピング旅行では、人々のサブセットが同じ店に一緒に旅行し、店にいない人のためにプレゼントを購入します。彼らは同じ買い物で他の人にプレゼントを買わないかもしれません。人は複数の買い物旅行に行くかもしれません。みんなが必要なプレゼントを買うのに必要な買い物の回数をできるだけ少なくしたい。 例として、5人でグループ内の他のすべての人にプレゼントを購入する必要がある場合を考えます。人に1から5までの番号を付けます。これは、次のように4回の買い物で行うことができます。 旅行1:1、2、3、買い物に行く 旅行2:1、4、5は買い物に行く 旅行3:2、4、買い物に行く 旅行4:3、5買い物に行く この問題を解決するにはどうすればよいですか?入力を有向グラフで表すことができるのは明らかですが、そこからどこに行くべきかわかりません。誰かがビクリクカバーの問題を提起しましたが、似ていますが、この質問には答えません。 入力はn個の頂点の有向グラフと考えることができます。ここで、エッジ(u 、v )は、人uが人vのプレゼントを購入する必要があることを意味します。目標はbicliquesのセットを見つけることである(S 1、T 1)、... 、(SのK、TがK)ように、kが最小であり、エッジ集合Eグラフのがのサブセットである∪ I(S I × T 私GGGnnn(u,v)(u,v)(u,v)uuuvvv(S1,T1),…,(Sk,Tk)(S1,T1),…,(Sk,Tk)(S_1,T_1),\dots,(S_k,T_k)kkkEEE∪i(Si×Ti)∪i(Si×Ti)\cup_i (S_i \times T_i)。また、ビクリクの定義を有向グラフに拡張すると、ビクリク(Si,Ti)(Si,Ti)(S_i,T_i)は、SiSiS_iをマッピングするエッジのみが含まれますTiTiT_i。bicliqueカバーの問題からこれ異なり、我々はの部分グラフであることを各bicliqueを必要としないという点で、GGG(私たちは必要ありませんSi×Ti⊆ESi×Ti⊆ES_i \times T_i \subseteq Eそれぞれのiii)。 具体的には、次のいずれかの答えを受け入れます。 この問題がNP困難または この質問に正確に答える多項式時間アルゴリズムを提示します(近似または上限なし) 記録としては、この問題はどこにも見られませんでした。私は自分の好奇心のためにそれについて疑問に思っています。

2
純粋なデータフロースタイルで「増分更新」関数を構成するためのパラダイムはありますか?
この質問をするための正しい用語がわからないので、代わりにたくさんの言葉で説明します。 背景、同じページにいるだけです。プログラムにはキャッシュが含まれていることが多く、時間とメモリのトレードオフです。プログラマーのよくある間違いは、上流のソース/前例の1つを変更した後、キャッシュされた値を更新するのを忘れることです。しかし、データフローまたはFRPプログラミングパラダイムは、そのような間違いの影響を受けません。純粋な関数がいくつかあり、それらを有向ディペンデンシーグラフで接続している場合、ノードは出力値をキャッシュし、関数の入力が変更されるまで再利用できます。このシステムアーキテクチャは、Dataflowベースの環境でのキャッシングペーパーで説明されており、命令型言語では、メモ化とほぼ同じです。 問題:関数への入力の1つが変化しても、関数全体を実行し、キャッシュされた出力を破棄して、最初から再計算する必要があります。多くの場合、これは私にとって無駄に思えます。「トップ5なんでも」リストを生成する簡単な例を考えてみましょう。入力データは、何も並べ替えられていないリストです。ソートされたリストを出力する関数への入力として渡されます。これは、最初の5項目のみを受け取る関数に入力されます。疑似コード: input = [5, 20, 7, 2, 4, 9, 6, 13, 1, 45] intermediate = sort(input) final_output = substring(intermediate, 0, 5) ソート関数の複雑さはO(N log N)です。ただし、このフローは、1つの要素を追加することで、入力が一度に少しだけ変化するアプリケーションで使用されることを考慮してください。毎回最初から再ソートするよりも、実際にはO(N)の方が、新しい要素を正しい位置に挿入することにより、古いキャッシュソートリストを更新する関数を使用する方が高速です。これはほんの一例にすぎません-多くの「最初から」の関数には、そのような「増分更新」の対応物があります。また、新しく追加された要素は5番目の位置にあるため、final_outputにも表示されない場合があります。 私の直感は、このような「増分更新」関数を、既存の「最初から」関数と並べて、データフローシステムに何らかの方法で追加できる可能性があることを示唆しています。もちろん、すべてを最初から再計算すると、常に一連の増分更新を実行した場合と同じ結果が得られます。システムは、その性質を持っている必要がある場合は、個々のプリミティブFromScratch-インクリメンタルペアのそれぞれが常に同じ結果が得られ、その後、彼らから構築された大規模複合機能も自動的に同じ結果を与える必要があります。 質問:FromScratch関数とそのインクリメンタル関数の両方をサポートし、効率を高めるために協力し、大きなフローに構成できるシステム/アーキテクチャ/パラダイム/メタアルゴリズムを使用することは可能ですか?そうでない場合、なぜですか?誰かがこのパラダイムをすでに研究して公開している場合、それは何と呼ばれ、どのように機能するかの簡単な要約を入手できますか?

4
関数コードが正しいことを証明するための一般的な正式なテクニックは何ですか?
論文の一部として作成しているHaskellプログラムの一部の証明を提供したいと思います。しかし、これまでのところ、良い参考資料を見つけることができませんでした。 グラハムハットンの入門書 『Haskellでのプログラミング(Googleブックス)』は、Haskellの学習中に読んだものですが、次のようなプログラムについて推論するためのいくつかのテクニックに触れています。 等式推論 重複しないパターンを使用する リストの誘導 第13章で説明しますが、あまり詳細ではありません。 Haskell、またはその他の機能的なコードの正式な証明手法の詳細を提供する推奨できる本や記事はありますか?

1
ナイーブベイズの実装
私は、ラプラシアン平滑化によるテキスト分類のための単純ベイズアルゴリズムを実装しています。私が抱えている問題は、多くの小さな分数を乗算しているため、確率がゼロに近づくことです。したがって、確率は最終的にゼロになります。これは、ドキュメントとトレーニングセット内にいくつかの単語があるためです。 このため、テキストを分類することができません。この問題を回避する方法はありますか?私の実装で何か問題がありますか?

3
このクイックソートの正当性の証明を理解しようとしています
この証明は帰納法による証明であり、次のようになります。 P(n)は、「クイックソートが長さnのすべての入力配列を正しくソートする」という表明です。 基本ケース:長さ1のすべての入力配列は既にソートされています(P(1)が保持されます) 帰納的ステップ:n => 2を修正します。長さnの入力配列を修正します。 表示する必要があります:P(k)がすべてのk <nに対して成り立つ場合、P(n)も成り立ちます 次に、ピボットpの周りに分割された配列Aを描画します。したがって、彼はpを描画し、配列の<pである部分を最初の部分として呼び出し、> pである部分を2番目の部分として呼び出します。パーツ1の長さ= k1、パーツ2の長さはk2です。(前に提供された)Partitionサブルーチンの正確性の証明により、ピボットpは正しい位置に巻き上げられます。 帰納的仮説:1番目、2番目の部分は再帰呼び出しによって正しくソートされます。(P(K1)、P(k2)を使用) したがって、再帰呼び出しの後、配列全体が正しくソートされます。 QED 私の混乱:これが正確さをどのように証明するかを正確に確認するのに多くの問題があります。したがって、P(k)が実際にすべての自然数k <nに対して成立すると仮定します。 これまでに見た誘導証明のほとんどは、次のようなものです。基本ケースを証明し、P(n)=> P(n + 1)であることを示します。それらは通常、ある種の代数的操作も含みました。この証明は非常に異なっているように見え、誘導の概念をそれに適用する方法がわかりません。私は、Partitionサブルーチンの正確さが鍵であるといくぶん推論できます。したがって、その正確さの理由は次のとおりです。再帰呼び出しのたびに、ピボットの周りで配列が分割されることがわかっています。その後、このピボットはその正しい位置になります。次に、各サブアレイはピボットを中心にさらに分割され、そのピボットは正しい位置に配置されます。これは、長さ1のサブ配列を取得するまで繰り返し行われます。 しかし、P(k)がすべてのk <nに当てはまるとは想定していません。実際にそれを示しています(Partitionサブルーチンは常に1つの要素を正しい位置に配置するため)。Pを想定していませんか? (k)すべてのkに当てはまる

1
このコードが終了する可能性は何ですか?
私はこのPythonコードを書いて、それが時々単に終了しないのではないかと考えました(無限のメモリ/時間と再帰の深さの制限がないと仮定した場合)。 直感的には、ある時点でluckyを取得する必要があるため、終了すると思います。終了しない場合、ラッキーを取得するための時間は無限です。一方、再帰の深さが増すにつれて、あなたは指数関数的にもっと幸運になる必要があります。 import random def random_tree(): if random.random() < 0.5: return 0 return [random_tree() for _ in range(random.randint(1, 5))] random_tree常に終了するとは限らない場合、なぜ、そしてそれが終了する可能性は何ですか? 私はを使用してそれを計算しようとしましたが、これはどちらかが非常に役に立たないということです答えまたは...。0.684124 1P= 1 − (1 − 0.5 )(1 − (P+ P2+ P3+ P4+ P5)/ 5 )P=1−(1−0.5)(1−(P+P2+P3+P4+P5)/5)P = 1 - (1 - 0.5)(1 - (P + P^2 + P^3 + P^4 …

2
厳格な陽性
この参照から:厳密な陽性 厳密な陽性条件は、次のような宣言を除外します data Bad : Set where bad : (Bad → Bad) → Bad A B C -- A is in a negative position, B and C are OK なぜAは負ですか?また、なぜBが許可されるのですか?Cが許可される理由を理解しています。


3
(衝突のない)ハッシュテーブル検索は本当にO(1)なのですか?
免責事項:私はこことStackoverflowで同様の聞こえる質問があることを知っています。しかし、それらはすべて衝突についてであり、それは私が求めているものではありません。 私の質問は次のとおりです。なぜそもそも衝突のないルックアップなのO(1)ですか? 私がこのハッシュテーブルを持っているとしましょう: Hash Content ------------- ghdjg Data1 hgdzs Data2 eruit Data3 xcnvb Data4 mkwer Data5 rtzww Data6 今、私はkハッシュ関数h(k)が与えるキーを探していますh(k) = mkwer。しかし、ルックアップはハッシュmkwerが5の位置にあることをどのように「知っている」のでしょうか。それO(n)を見つけるためにすべてのキーをスクロールする必要がないのはなぜですか?ハッシュは、実際のハードウェアアドレスではあり得ません。データを移動する能力を失うからです。そして、私の知る限りでは、ハッシュテーブルはハッシュでソートされていません(そうであったとしても、検索にも時間がかかりますO(log n))? ハッシュを知ることは、テーブル内の正しい場所を見つけるのにどのように役立ちますか?

1
3シンボル1次元セルオートマトンの停止問題は決定可能ですか?
私は、停止の問題が3シンボルの1次元セルオートマトンで決定可能かどうかを把握しようとしています。 定義レッツタイムステップにおけるシステムの構成を示す。より正式には、です。ここで、はアルファベットです。i f :A ∗ × N → A ∗ Af(w 、i )f(w,i)f(w,i)私iif:A∗×N→A∗f:A∗×N→A∗f:A^*\times \mathbb{N} \to A^*AAA 定義。セルオートマトンは構成で停止しました。場合、ます。∀ のk ∈ N F (W 、I )= F (W 、I + K )f(w,i)f(w,i)f(w,i)∀k∈N∀k∈N\forall k\in \mathbb{N}f(w,i)=f(w,i+k)f(w,i)=f(w,i+k)f(w,i)=f(w,i+k) 特定のセルオートマトンの停止問題は次のとおりです。 入力:有限の単語質問:オートマトンはいくつかの状態停止しますか?www sss 基本的なセルオートマトン(2つのシンボル)がここで定義されます。同じ種類のセルオートマトンに焦点を合わせていますが、2シンボルではなく3シンボルのCAの場合に興味があります。 これからは、ルールを形式で示します。これは、3つの隣接するシンボルがその下に別のシンボルを生成することを意味します。∗∗∗→∗∗∗∗→∗***\to* 停止の問題は、基本的な2シンボルのセルオートマトンで決定可能です 私が使用する白セルと示すために黒いずれかを示すために。1000111 我々はルールがある場合は、、、我々は、オートマトンが停止しません知っています。最初のルールでは、グリッドが無限であるため、黒いセルを生成する3つの白いセルが常にあるからです。2番目と3番目のルールでは、単語は両側に広がり、オートマトンは停止しません。001 → 1 100 → 1000→1000→1000 \to 1001→1001→1001 \to 1100→1100→1100 \to …

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