コンピュータサイエンス

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

3
バイナリツリーが検索ツリーであるかどうかをテストし、完全なブランチをカウントするアルゴリズム
再帰的アルゴリズムを作成して、バイナリツリーがバイナリ検索ツリーであるかどうかを確認し、想定されるグローバルカウント変数を使用して、そこに完全なブランチがいくつあるか(左と右の両方の子ノードを持つ親ノード)を数える必要があります。これは私のデータ構造クラスの割り当てです。 これまでのところ void BST(tree T) { if (T == null) return if ( T.left and T.right) { if (T.left.data < T.data or T.right.data > T.data) { count = count + 1 BST(T.left) BST(T.right) } } } しかし、これを実際に理解することはできません。2番目のifステートメントがtrueでない場合、カウントはゼロになるため、このアルゴリズムは問題を解決しないことを知っています。 誰かがこれを手伝ってくれる?

2
依存して型付けされたエリミネーターを導出する方法は?
依存型プログラミングでは、データを分解して再帰を実行する主な方法が2つあります。 依存パターンマッチング:関数定義は複数の句として指定されます。統一により、すべての省略されたケースが不可能であることが保証され、外部ソルバーが再帰の根拠を確実にします。 エリミネーター:各帰納的データ型は、帰納原理として、および型値を分解する再帰関数として機能する、関連する定数があります。これらはより冗長ですが、合計であり(すべてのケースはカバーされ)、構造によって終了するという利点があります。DDDEDEDE_DDDDEDEDE_D エリミネーターが基本的に数学的帰納であるなどの一般的なデータ型のエリミネーターや、エリミネーターが基本的にフォールドであるを見てきました。NatNatNatListListList 私は依存パターンマッチングに関するいくつかの論文を読んでおり、その多くはデータ型を定義できる型理論に言及しており、エリミネーターは理論によって提供されます。たとえば、依存パターンマッチングの除去では、UTTがエリミネーターに基づいている方法と、公理存在下でパターンマッチングを除去に変換する方法について説明しています。私の理解では、データ型が定義されると、理論はエリミネーターを提供します。KKK 私が見つけていない(または、少なくとも見た場合に認識されていない)ことは、エリミネーター(タイプとセマンティクスの両方)をどのようにして導き出すことができるかについての良い説明です。 誰かが、データ型の定義からエリミネーターを取得する方法を説明する参照を私に指摘できますか?

1
これはNP完全問題ですか?
次の問題ステートメントを検討してください。 最初の数が与えられると、あなたとあなたの友人は交代でそれから完全な四角形を引きます。ゼロに勝つ最初のものは勝利します。例えば: 初期状態:37 Player1は16を減算します。状態:21 Player2は8を減算します。状態:13 Player1は4を減算します。状態:9 Player2は9を減算します。状態:0 Player2が勝利! 初期状態が与えられ、最適な動き、つまりゲームの勝利につながることが保証されている動きを返すプログラムを記述します。可能な動きがあなたを勝利状態に導くことができないなら、-1を返します。 この問題は、動的プログラミングを使用して疑似多項式時間で解決できます。アイデアは、長さn(nは初期状態)の配列を下から上に最適な移動で埋めるか、または移動が勝てない場合は-1です。これは、O(n * sqrt(n))を必要とします。これは、すべての数値について、それよりも小さい可能性のあるそれぞれの完全な二乗を減算することを考慮する必要があるためです(それらの〜sqrt(n)があります)。ただし、これは疑似多項式のランタイムの複雑さです。これは、ランタイムがバイナリの入力サイズ(数値を表すために使用されるビット数)に関連して実際に指数関数的にスケーリングされるためです。 誰でもこの問題を解決するための多項式アルゴリズムを考えることができますか?そうでない場合、それはNP-Completeでしょうか?どうして?

5
ラムダ計算ジェネレータ
他にこの質問をする場所がわからないので、ここがいい場所だといいのですが。 ラムダ計算ジェネレータを作成することが可能かどうか知りたいだけです。基本的に、無限の時間を与えられて、可能なあらゆるラムダ計算関数を生成するループ。(文字列の形のように)。 ラムダ計算は非常に単純であり、その表記にいくつかの要素しかないため、最も単純な組み合わせから始めて、その表記要素のすべての可能な組み合わせを生成し、それによってすべての可能なラムダを生成することは可能かもしれないと考えました微積分関数。 もちろん、ラムダ計算についてはほとんど何も知らないので、これが本当に可能かどうかはわかりません。 それは...ですか?もしそうなら、私が想像したようにそれはかなり簡単ですか、それとも技術的には可能ですが、実際には不可能であるほど難しいですか? PS。私はベータ削減関数について話しているのではなく、すべてのラムダ計算関数のすべての有効な表記について話しているだけです。

2
オーディオの再生が他のタスクを停止しないのはなぜですか?
プロセッサが一度に実行できるのは1つだけの場合、音楽を継続的に再生しながら、他のタスクを実行できるのはなぜですか? 私は割り込みシステムを理解していますが、CPUが連続的に音声を処理して、ジッター/ラグのないサウンドにならないようにする必要はありませんか? 基礎となる実装について尋ねていますが、この質問はマルチスレッドに関連していますか?1コア、1スレッドのCPUはどのようにしてこのマルチタスクを実現できますか?


1
関数型プログラミング言語の実装に関するアルゴリズムの複雑さの分析
今日、アルゴリズム分析は計算モデルに基づいて異なることを学びました。それは私が考えも聞いたこともないものです。 User @chiが私に与えた、それをさらに説明する例は次のとおりです。 たとえば、タスクを考えてみましょう: がx iを返し ます。RAM では 、配列アクセスが一定時間であるため、これはO (1 )で解決できます。TMを使用して、入力全体をスキャンする必要があるため、O (n )です。(i,x1,…,xn)(i,x1,…,xn)(i,x_1 ,…,x_n )xixix_iO(1)O(1)O(1)O(n)O(n)O(n) これは、関数型言語について不思議に思います。私の理解から、「関数型言語はラムダ計算に密接に関連しています」(ここでの Yuval Filmusのコメントから)。では、関数型言語がラムダ計算に基づいているが、RAMベースのマシンで実行されている場合、純粋に関数型のデータ構造と言語を使用して実装されたアルゴリズムで複雑さ分析を実行する適切な方法は何ですか? 私は純粋に機能的なデータ構造を読む機会がありませんでしたが、件名についてWikipediaのページを確認しました。データ構造のいくつかは、従来の配列を次のものに置き換えているようです。 「配列は、純粋に機能的な実装を認めるマップまたはランダムアクセスリストに置き換えることができますが、アクセスと更新の時間は対数です。」 その場合、計算モデルは異なりますよね?

2
アダマール門の後ろの直感
私は量子コンピューティングについて学ぼうとしていますが、線形代数についてはまともな理解があります。 NOTゲートを通過しましたが、それほど悪くはありませんでしたが、アダマールゲートに到着しました。そして、行き詰まった。主に操作を「理解」しているのに、それが理にかなっている場合、操作が実際に何をするのか、なぜ操作したいのか理解できません。 たとえば、アダマールゲートが取り込むときことができます| 0 ⟩ + | 1 ⟩|0⟩|0⟩|0\rangle。これは何を意味するのでしょうか?NOTゲートの場合、それを取り込みます| 0⟩となります| 1⟩。それについて不明確なことはありません。(重ね合わせのために、それはに取るそれは少しの「反対」を与えるα|0⟩+βを|1⟩と与えβを|0⟩+α|1⟩)、それは便利である理由私は理解します。同じ理由で(基本的に)古典的なコンピュータで有用です。しかし、どのような(例えば)アダマールゲートはベクトルに幾何学的にやっています[αβ]|0⟩+|1⟩2√|0⟩+|1⟩2\frac{|0\rangle + |1\rangle}{\sqrt{2}}|0⟩|0⟩|0\rangle|1⟩|1⟩|1\rangleα|0⟩+β|1⟩α|0⟩+β|1⟩\alpha|0\rangle+\beta|1\rangleβ|0⟩+α|1⟩β|0⟩+α|1⟩\beta|0\rangle + \alpha|1\rangle[αβ][αβ]\begin{bmatrix}\alpha \\ \beta \end{bmatrix}?そして、なぜこれは便利なのでしょうか?

5
型理論の日常的な応用
型理論を理解したいのですが、まずどのようにそれを適用できるかを知る必要があります。プログラミングにおける型システムのほかに、型理論の自明ではないアプリケーションがもっとあるだろうか?他のアプリケーションがあるかもしれません、性格プロファイリングなどで言ってみましょうか?

3
有限時間での無限計算
これはおそらく愚かな考えですが、私たちは、計算の無限のシーケンスを実行し、想定するようにプログラムされますコンピュータがあると計算を要する1 / 2 I完了するまでに秒。次に、このコンピューターは、有限の時間内で無限の数の計算を実行できます。ithithi^\text{th}1/2i1/2i1/2^i なぜこれが不可能なのですか?重要な計算を実行するのにかかる時間に下限はありますか?

1
NP完全セットは、少なくとも1つがNPハードである場合にのみ、他の2つのセットから形成されますか?
この質問は、NP完全集合の集合演算から形成された集合に関する以前の質問とは多少逆になります。 2つの決定可能な集合 とL 2の和集合、交差、またはデカルト積から得られる集合がNP完全である場合、L 1、L 2の少なくとも1つは必然的にNP困難ですか?Pがこれらの集合演算の下で閉じているため、両方をPにすることはできない(P!= NPと仮定)。「決定可能」と「NPハード」の条件が必要であることも知っています。NP 以外の任意のNPコンプリートセットLと別のセットB(NPハードまたは単に決定不可能か)を考慮すると、2つの新しい交差がNP完全なNPにないNPハードセット。例:L 1:= 01L1L1L_1L2L2L_2L1、L2L1,L2L_1, L_2LLLBBB、及び L 2:= 01 L ∪ 00 B。しかし、その後の進め方がわかりません。 L1:= 01 L ∪ 11 BL1:=01L∪11BL_1:= 01L \cup 11BL2:= 01 L ∪ 00 BL2:=01L∪00BL_2:= 01L \cup 00B 私たちはNP完全セット取ることができますので、組合の場合は真ではないかもしれないことを考えているセット取得するためにラドナーの定理で建設を行うB ∈のサブセットであるNPI Aを。次いで、B ∪ (A ∖ B )= Aは、元のNP-完全なセットです。ただし、A ∖ BがまだNPIまたはNPハードであるかどうかはわかりません。交差点とデカルト積の場合、どこから始めればよいかもわかりません。あAAB ∈B∈B \inあAAB ∪ (A …

1
チューリングマシンにとってサブリニア空間は何を意味しますか?
入力が回文かどうかを決定する問題は、チューリングマシンでスペースを必要とすることが証明されてい。ただし、入力を格納する場合でもスペース が必要になるため、すべてのチューリングマシンにスペース必要になるわけではありませんか?Ω(logn)Ω(log⁡n)\Omega(\log n)nnnΩ(n)Ω(n)\Omega(n) もちろん、ここでは矛盾はありません。少なくとも線形空間を使用する関数は、少なくとも対数空間も使用するためです。しかし、書くと、チューリングマシンが線形スペースよりも少ないスペースを使用することが可能であることが示唆されます。結局のところ、それがまったく同じである場合、なぜ人々はすべての時間を費やして証明するのでしょうか。些細なバインドのように見えるものは何ですか?では、チューリングマシンが線形スペースよりも少ないスペースを使用することはどういう意味ですか?Ω(logn)Ω(log⁡n)\Omega(\log n)Ω(logn)Ω(log⁡n)\Omega(\log n)Ω(n)Ω(n)\Omega(n)

4
アルゴリズムの自動ランタイム分析の方法はありますか?
私は疑問に思っています、少なくともアルゴリズムの関連するサブセット(分析可能なアルゴリズム)で機能する自動ランタイム分析の方法はありますか? 私は私に与えた「自動アルゴリズム分析」ググこれを、それはあまりにもMathyさんです。私が理解できるpsuedocodeの簡単な例が欲しいだけです。具体的すぎるかもしれませんが、一見の価値があると思いました。

2
FSA文法間の「類似性」を測定する方法は?
私は、特定のテキスト文字列とそのすべての部分文字列を受け入れる非循環有限状態オートマトンを生成するパターンマッチングアルゴリズムを使用しています。FSAアルゴリズムは、音楽ストリーム(MIDIデータなど)の記号表現で実行されています。音楽ストリームは、各曲をラベルのない「セグメント」に分割するように前処理されています。AN FSAは、各楽曲の各セグメントに対して生成される:私が持っている場合曲は、各々 、に分割YセグメントIがありますN ⋅ Y別個のFSAを。nnnyyyn⋅yn⋅yn \cdot y 各セグメントのFSAをコーパス内の他のFSAと比較したいと思います。最終的な目標は、類似性空間内でクラスタリングを実行し、それらの構築メトリックがどの程度類似しているかに従ってセグメントの「クラス」を生み出すことです。したがって、特に興味深いのは、各FSAが定義する文法です(セグメント内の音楽コンテンツのほぼ特定のコンポーネントに対応)。このようなものを比較するのに良いかもしれないテクニックはありますか?KLダイバージェンスが頭に浮かびます(たとえば、それを使用して、特定のFSAに関連付けられた文字列の分布を比較します)。ただし、より良い/より効率的な手法があるかもしれません。 また、この質問が(1)ささいなほど簡単であるか、(2)より深い誤解を示しているか、(3)他の場所で回答されているかについてもお詫びします。私は本当のナブです、皆さん!

2
同値関係は問題をカバーします(グラフ理論)
有限頂点セットの同値関係は、クリークの互いに素な結合である無向グラフで表すことができます。頂点セットは要素を表し、エッジは2つの要素が同等であることを表します。 私はグラフがある場合はやグラフG 1、... 、Gのkは、我々はと言うGがで覆われているG 1、... 、Gのk個の辺の集合ならばGは、の辺の和集合に等しく、G 1、… 、G k。G 1、… 、G kのエッジセットは互いに素である必要はありません。無向グラフGGGGG1,…,GkG1,…,GkG_1,\dots,G_kGGGG1,…,GkG1,…,GkG_1,\dots,G_kGGGG1,…,GkG1,…,GkG_1,\dots,G_kG1,…,GkG1,…,GkG_1,\dots,G_kGGG 有限数の同値関係(つまり、クリークグラフの素な結合)でカバーできます。 いくつか質問があります。 グラフをカバーするために必要な同値関係の最小数については何が言えますか?GGG この最小数をどのように計算できますか? 明示的な最小カバー、つまり、サイズが最小でGをカバーする同値関係のセットをどのように計算できますか?GGGGGG この問題には、パーティションロジック(サブセットのロジックのデュアル)以外のアプリケーションがありますか? この問題には十分に確立された名前がありますか? コメントに示されているさまざまな誤解を踏まえて、これらの概念を説明するための写真を次に示します。わかりやすい用語(「カバー」、「同値関係」、「クリークの非論理和」、「エッジセットの非論理結合」ではない)のアイデアがある場合は、遠慮なくお知らせください。 以下は、グラフとそれをカバーする1つの等価関係の図です。 以下は、グラフと それをカバーする 2つの等価関係の図です。少なくとも2つの等価関係が必要であることは明らかです。 以下は、グラフと それをカバーする 3つの等価関係の図です。少なくとも3つの等価関係が必要であることはそれほど明白ではありません。Dual of the Logic of Subsetsの Lemma 1.9を使用して、これが正しいことを示すことができます。この補題を2つ以上の入力を持つnand操作に一般化することが、この質問の動機でした。

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