コンピュータサイエンス

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

2
「最短一致」以外の「ぶら下がりelse」問題の別の解決策はありますか?
以下の文脈自由文法のプレゼント「ぶら下がりelse」タイプのあいまいさ(と想像を意味し、の略と命令またはブロックのいくつかの他の種類の略): たとえば、はまたはとして解析できます(これは、この文法の最も単純/最短のあいまいな単語です)。b c Saaaif expr thenbbbelseccc aacbc(a(acbc))(a(ac)bc)S→aSbS|aS|cS→aSbS|aS|c \begin{aligned} S &\rightarrow aSbS \;|\; aS \;|\; c\\ \end{aligned} aacbcaacbcaacbc(a(acbc))(a(acbc))(a(acbc))(a(ac)bc)(a(ac)bc)(a(ac)bc) この「ぶら下がりelse」曖昧軍「他」(解決するために、「標準」方法「IF-THEN」(最も近い/最も内側とペアに)ステートメントを)。これは次のようにして実現できます。 この文法は明確です。上記の例では、解析をます。a Sbbbaaa(a(acbc))ST→aTbS|aS|c→aTbT|cS→aTbS|aS|cT→aTbT|c \begin{aligned} S &\rightarrow aTbS \;|\; aS \;|\; c\\ T &\rightarrow aTbT \;|\; c\\ \end{aligned} (a(acbc))(a(acbc))(a(acbc)) 質問:aacbcの解析を強制するあいまいさを解決する別の自然な方法はありますか?言い換えると、私は上記の2つと同じ言語を生成する、明確で、aacbcを(a(ac)bc)として解析する文法を探しています。a a c b c a a c b c (a (a c )b c …

2
ファイルとは何ですか?
ストレージだけでなく、ストレージに関連しないprocfsや/ dev / null(または任意のヒューズベースのファイル)などの抽象化も含むファイルの正式な定義を探しています。 これまでのところ、すべてのファイルは、 識別できる 名前を付けることができます(通常は階層構造で編成されます) バイトストリームとしてアクセスできます 通常、権限とその他の(システム固有の)メタデータを提供します しかし、これまでに読んだOSの本では、有用な正式な定義を見つけることができませんでした。

1
プレスブルガー演算の二重指数関数的複雑さの証明に使用されるトリック
私はこれをMathUnderflowに投稿しましたが、答えが得られなかったので、ここで試してみると思いましたが、 私はラビンとフィッシャーの古い論文[可能な場合はリンクを掲載します]を読んでいます。その中で、プレスブルガー演算の二重の指数関数的な複雑さが証明されています。 証明は、「x &lt; 2 2 k x + 1」を|で非公式に表明する式の存在に依存しています I N | ∈ O (N )。この公式の構造は論文には記載されていませんが、その限界と追加のみを自由に使用できるという事実を考えると、それは非常に簡単ではないと思われることを考えると驚きでした!¹私ん(x )In(x)I_{n}(x)x &lt; 22k x + 1x&lt;22kx+1x < 2^{2^{kx+1}}| 私ん| ∈O(N)|In|∈O(n)|I_{n}| \in O(n) この公式の作成は、以前はフィッシャーが発見した「トリック」に依存していること、そしてフォルカーストラッセンが独自に作成していることを後で知りました。 だから誰かが私が話している紙について知っていて、私をその方向に向けるか、私にトリックを説明することができれば... リプトンのブログからのこの投稿には、論文へのリンクと言及が含まれています(そして、大まかな、残念ながら私には不十分で、スケッチが提供されています)BTWというトリックです。 thisこれは漠然とした説明であることを知っています。ただし、SXの投稿には十分に詳細な説明が長すぎるので、問題の論文についてすでに知っている人、つまりその簡単なスケッチで間に合う人がこれにぶつかって助けてくれることを願っています。 。

1
フラットな式のための最も単純な完全なコンビネーター基底ペア
Chris Okasakiの論文「Flattening Combinators:Surviving withoutカッコなし」では、アプリケーション演算子や括弧を必要とせずに、チューリング完全式をエンコードするための基礎として2つのコンビネータで十分かつ必要であることを示しています。 アプリケーションオペレーターでプレフィックスコーディングのSおよびKコンビネーターを介した「バイナリラムダ計算と組み合わせロジック」のJohn Trumpの組み合わせロジックのエンコーディングと比較して、フラットな式に2つのコンビネーターを必要とするだけでコード密度が最適化されます。結果のGoedel番号付けは、すべての整数を有効な整形式の閉じた式にマップします。ほとんどの計算と最小の記述長に関連するesolangとは異なり、その正規表現は通常、構文的に無効なプログラムの記述を許可します。 ただし、岡崎のエンコーディングは、ラムダ計算の用語からビット文字列への一方向のマッピングで最も役立つことを意味していました。実際の置換命令として使用する場合、この削減で使用される2つのコンビネーターは比較的複雑であるため、必ずしも逆ではありません。 アプリケーションオペレーターを必要としない最も単純で完全なコンビネーターの基本ペアは何ですか?

1
無限のルールを許可するCFGはどれほど強力ですか?
最近、文脈自由文法に無数のルールを許可するとどうなるのだろうと思っていました。明らかに、我々はルールの任意のそのような無限のセットを許可したい場合は、すべての言語一部アルファベット上Σは CFGによって記述することができたG = ({ S } 、Σ 、R 、S )とR = { S → W | W ∈ L }。しかし、Rを文脈自由文法によって作成できるようなルールのセットに制限するとどうなるでしょうか。LLLΣΣ\SigmaG=({S},Σ,R,S)G=({S},Σ,R,S)G = (\{S\},\Sigma,R,S)R={S→w∣w∈L}R={S→w∣w∈L}R = \{S \rightarrow w \mid w \in L \}RRR その目的のために、非終端記号の集合所与と端子Σ、私たちはの要素としてルールをしない表示できN × (N ∪ Σ )*が、アルファベットの上に文字列としてR (N 、Σ ) = N ∪ Σ ∪ { → }。ここで私の質問は、無限ルールCFGをタプルG = (N …

1
離散対数問題の複雑さを測定する方法は?
暗号スタック交換に関するこの質問への回答は、基本的に、対数問題の複雑さを測定するには、グループのサイズを表す数値の長さを考慮する必要があると述べています。それは恣意的なようですが、なぜグループのサイズを引数として選択しないのでしょうか。選択する引数を知るための基準はありますか?実際、グループのサイズによって複雑さが大きく変わるため、私は重要なことを見落としていたことを知っています。

2
2部グラフが平面であり、頂点の周りにエッジがないエッジの条件
それは持っていないときに限り二部グラフは平面であるまたはK 5未成年者。K3,3K3,3K_{3, 3}K5K5K_5 頂点の「回り込み」エッジのない平面描画を可能にするために必要または十分な条件を探しています。これらは次の条件を満たす図面です。 1つのパーツのすべての頂点が単一の垂直線上に描画されます。他の部分の頂点は、平行なバーティクルライン上に描画されます。 エッジは頂点以外では交差しません。 エッジはすべて、ポイント1の2つの垂直線の間の無限ストリップにあります。 たとえば、右下以外のすべての図面は例ではありません。左下のグラフは、QとRの位置を入れ替えることにより、条件を満たすように再描画できます。上の2つのグラフは、条件を満たすために再描画することはできません。 上の2つのグラフは、私が見つけた唯一の障害物です。私の質問は: この問題に名前はありますか? 私が見逃した他の障害物はありますか? もちろん、未成年者としてのこれら2つの障害物(および私が見逃したもの)が未成年者であることを証明する方法についてのヒントは必要十分です。 この外側平面であることと同じではないことに留意されたい外側平面である(正方形として描画することができる)が、それは私は上記言及した条件を満たすように描くことができません。K2,2K2,2K_{2, 2}

2
nの除数で最小の整数を効率的に計算する
この問題に取り組むために、私は最初にそれを観察しました ϕ(pe11 pe22⋯ pekk)=(e1+1)(e2+1)⋯(ek+1)ϕ(p1e1 p2e2⋯ pkek)=(e1+1)(e2+1)⋯(ek+1)\phi(p_1^{e_1} \space p_2^{e_2} \cdots \space p_k^{e_k}) = (e_1 + 1)(e_2 + 1)\cdots(e_k +1) ここで、ϕ(m)ϕ(m)\phi(m)は約数(必ずしも素数ではない)の約数ですmmm。mmmがϕ(m)=nϕ(m)=n\phi(m) = nとなるような最小の整数の場合、 ϕ(m)=nϕ(m)=n\phi(m) = n (e1+1)(e2+1)⋯(ek+1)=n(e1+1)(e2+1)⋯(ek+1)=n(e_1 + 1)(e_2 + 1)\cdots(e_k +1) = n ここで、∏ i p e i iが最小になるように選択する必要があります。pの選択は簡単です-それらは昇順の単なる素数です。eieie_i∏ipeii∏ipiei\prod_{i} p_i^{e_i}ppp しかし、を選択するための最初の考えeieie_iは正しくありませんでした。私は単にnnn因数分解し、降順で因数をソートして1を引くことができると思いました。ほとんどの場合、これはうまく機能します。たとえば、n=15n=15n = 15除数の最小の整数は次のとおりです。 15 = (4 + 1 )、 (2 + …

1
ペアワイズ問題を繰り返し解くよりも速くすべてのペア間のk最短経路を見つけることができますか?
グラフ内のすべてのペア間の最短パス(は10未満)を生成したいと思います。グラフは(実際には地下鉄の地図です):kkkkkk 正に重み付け 無向 疎 約100ノード 私の現在の計画は、各ペアに最短パスルーティングを適用することです。私は現在、より効率的な代替手段を探しています(おそらく動的プログラミングを使用)。kkk

1
シンプルなポリゴンのユニークな三角形分割双対
単純なポリゴン(Steinerポイントのない)三角形分割を考えると、この三角形分割の双対を考えることができます。これは次のように定義されます。三角形分割のすべての三角形の頂点を作成し、対応する三角形がエッジを共有している場合は2つの頂点を接続します。二重グラフは最大次数3のツリーであることが知られています。PPP 私のアプリケーションでは、次のことに興味があります。ツリーの所与の最大次数3と、単純なポリゴン常に存在するの(スタイナー点なし)すべての三角測量のデュアルように等しい。ここで、の三角形分割は一意ではない可能性がありますが、二重グラフは一意である必要があります。P P T PTTTPPPPPPTTTPPP これは、がパスの場合は確かに当てはまりますが、3次の頂点がある場合は不明確になります。TTT

3
whileループの小さなステップの操作セマンティクスで状態が変更されないのはなぜですか?
通常、whileループの構造的操作セマンティクス表現では、プログラムの状態は変化しません。 (whileBdoS,σ)→(ifBthenS;(whileBdoS)elseSKIP,σ)(whileBdoS,σ)→(ifBthenS;(whileBdoS)elseSKIP,σ)(while \> B \> do \>S, \sigma) \rightarrow (if \>B \> then \>S; (while \> B \> do \>S) \> else \> SKIP, \sigma) 私にとって、これは直感的ではありません。状態が変化しない場合(つまり、メモリのステータスが同じままである場合)、は引き続きtrueであり、プログラムは終了しません。BBB このルールで州が変わらない理由を誰か説明できますか?

2
最大フローを2部マッチングに削減しますか?
最大の2部マッチング問題からmax-flow問題への有名で洗練された削減があります。ソースノード、ターミナルノード、およびマッチングする各アイテムに対して1つのノードでネットワークを作成し、適切なエッジを追加します。sssttt 多項式時間で最大フローを最大二部マッチングに削減する方法は確かにあります。これらは両方とも多項式時間で個別に解決できるためです。ただし、最大フロー(一般的なグラフ)から最大2部マッチングへの「素敵な」多項式時間短縮はありますか?

1
コールスタックとして使用した場合、ガベージフリーのスパゲッティスタックはDAGを形成しますか?
私はプログラミング言語の実装手法を調べています。最近、スパゲッティスタックに出会いました。これは、継続スキームスタイルモデル(SchemeやSML / NJなどでの使用を想定)に適していると思われ ます。簡単にするために、この質問ではシングルスレッドプロセスのみを検討します。 ただし、Wikipediaの図 (他の場所にもあります)には少し混乱してい ます。特に、そのような状況がどのように起こり得るのか、私にはわかりません。灰色で表示されたブランチは到達不可能であり、ガベージコレクションの対象となることしか想像できません。一方、スパゲッティスタックを使用してCPSを実装する方法については漠然と理解しているため、その構造でループが発生する方法を想像することはできません。「親ポインタツリー」ではなく、実際には有向非循環グラフであり、スレッドと同じ数の非ガベージソースと、(潜在的な)「出口ポイント」と同じ数のシンクがあると結論付けなければなりません。 しかし、この実装についての私の理解はかなり曖昧なので、おそらく何かを見落としていると思います。ここで「スパゲッティコールスタック」について誰かに教えていただければ幸いです。つまり、CPSベースのプロセスを実装するためにSchemeやSML / NJで使用されるデータ構造を意味します。 次のスパゲッティコールスタックがあるとします。 [exit point] &lt;-- ... &lt;-- [frame A] &lt;-- [frame B (active)] ^ `---- [frame C] 私が理解している限り、Bからのフロー制御は、親にジャンプしてスタックを巻き戻します(Aがアクティブになり、到達不能Bはガベージになります)、またはBまたは参照が保持する参照のみを使用して接続されたサブフレームでアクティブフレームを置き換える新しいフレームに。実行はフレームCにフローできません。これは、フレームCがゴミであることを意味します。 以前の状況ではなく、次のガベージフリーの状況が発生する可能性があると思います。 [exit point] &lt;-- ... &lt;-- [frame W] &lt;-- [frame X] &lt;-- [frame Z (active)] ^ | `---- [frame Y] &lt;---´ たとえば、フレームZが、フレームXまたはフレームY(どちらもWに戻る)で継続する決定関数に属していると想像できます。これは、スパゲッティコールスタックが「親ポインターツリー」ではないことを意味します。 ただし、ループを構成できる状況は想像できません。たとえば、次の状況を考えます。 …

2
マシンのコードを除くすべての入力で停止の問題を解決できる可能性はありますか?
この質問は停止の問題について私に起こり、オンラインで良い答えを見つけることができず、誰かが助けてくれるかどうか疑問に思いました。 入力がTM自体でない限り、停止の問題はどの入力のTMでも決定可能である可能性はありますか?基本的に: Halts(TM, I) IF TM == I: Undecidable, return a random result/throw an exception, whatever ELSE: Solve the problem Halts'(X) IF Halts(X, X): Loop infinitely ELSE: Print 'done' これにより、矛盾が解消されたようです。逆説的なHalts '(Halts')を呼び出すと、一貫した動作は期待できませんが、他のすべてのHalts(およびHalts ')への呼び出しは正当で解決可能です。 これは非常に直感的でないことを理解しています。ビットのいくつかのパターンがすべての可能なプログラムの動作を明らかにする可能性がある場合、TMと入力が一致するときになぜ突然バラバラになるのですか?しかし、これを可能性として数学的に排除できるでしょうか? そして、この減少した停止の問題はまったく興味をそそるものではありません。独自のコードを入力として使用する意味のあるプログラムがあったとしても、わずかに異なる入力で動作するように簡単に書き直すことができます。もちろん、この提案では、なぜこのような警告が出て停止ソリューションが存在するのか理解できなくなりますが、繰り返しになりますが、この可能性を数学的に排除できますか? 助けてくれてありがとう。

4
なぜ有限オートマトンの3つの表現形式すべてを研究する必要があるのでしょうか。
DFA、NFA、イプシロンNFAの3つすべてにより、特定の通常の言語を表すことができます。これらの表現のいずれかを使用すると、同じ正規表現に到達できますが、有限オートマトンの3つの形式の表現すべてを調査する必要があるのはなぜですか。NFAがDFAではできないこと、NFAでは何ができるかについていくつかの説明があります。つまり、NFAは不確実性の設計に役立つ可能性があります。たとえば、ゲーム(チェス)の設計では、NFAを使用して簡単に表現できる特定の場所から特定のピースを移動するための多くのオプションがあります。しかし、NFAまたはDFAを使用して同じことができる場合、イプシロンNFAの使用は何ですか?

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