タグ付けされた質問 「recursion」

4
独自のソースコードに関するプログラム推論
この質問のインスピレーションは、次の(あいまいな)質問です:独自のソースコードについて推論し、それを変更できるAIを持つためのプログラミング言語/論理的基盤は何ですか? これはまったく厳密ではないので、ここから具体的な質問を抽出するための私の試みです。私が興味を持っているのは次の2つです。 (A)独自のプログラムをデータ型プログラム(たとえば、AST)として表現および操作できるプログラミング言語P。(必要に応じて、タイプProgramのオブジェクトは、その言語の有効なプログラムのテキストであるStringに変換できます。これは、コンパイラーが行うことの反対です。) (B)言語Pのプログラムが何をするかを推論する方法。私が考えている2つのレベルは次のとおりです。 Pプログラムの動作をモデル化する別の言語Q(定理証明機能付き)。「プログラムpの実行結果はfooです」などのステートメントを表現および証明できるはずです。 プログラムp:Programが言語P自体で行うことについて推論する方法。(つまり、上記のP = Qを使用しています。) このようなものはどの程度実装されていますか、またはこの方向の進捗はどうですか?実用的な障害は何ですか?質問の当初の意図に照らして、問題を形式化する最良の方法は何ですか? * 答えが示すように(ありがとう!)、(A)と(B1)の両方を別々に行うことができますが、それらを一緒に行うことはより研究上の質問のようです。 ここに、この問題に関する私の最初の考えがいくつかあります(警告:かなりあいまいです)。Martin Bergerの答えに対する私のコメントも参照してください。 私は、より単純なプログラミング言語ではなく、同じプログラミング言語をモデル化するプログラミング言語に興味があります(上記のP = Q)。これは、「独自のソースコードに関する理由」が可能なプログラムの「概念実証」になります。依存型のプログラミング言語は、その関数の出力について保証することができますが、これは「Hello world!」以外の「独自のソースコードについての推論」としてはカウントされません。裸の文字列を自動的に出力する言語では、クインとしてカウントされます---ある種の引用/自己参照が必要です。ここでの類似物は、プログラムを表すデータ型を持っています。 それはかなり大きなプロジェクトのようです-言語が単純であるほど、その中のすべてを表現することは難しくなります。言語が複雑になるほど、言語をモデル化するためにより多くの作業が必要になります。 再帰定理の精神では、プログラムは独自のソースコードを「取得」し、それを変更することができます(つまり、それ自体の変更バージョンを出力します)。(B2)それから、プログラムは修正されたプログラムについて保証を表明できるべきであると私たちに伝えます(これは再帰できる、つまり将来のすべての修正について何かを表明できるべきですか?)。


1
繰り返し
次の再帰関係を解決するにはどうすればよいですか? f(n)=f(n−1)+f(n−logn)f(n)=f(n−1)+f(n−log⁡n) f(n) = f(n-1) + f(n - \log n)
12 recursion 

6
再帰の削除-舞台裏の理論の調査
私はこのサイトに不慣れです。この質問は確かに研究レベルではありませんが、まあ。ソフトウェアエンジニアリングの背景は少しありますが、CSTheoryの背景はほとんどありませんが、魅力的です。長い話を簡単に言うと、この質問がこのサイトで受け入れられる場合は、次の詳細な回答をお願いします。 だから、私はすべての再帰プログラムに反復的な類似点があることを知っています。「システムスタック」に似たものを維持し、戻りアドレスなどの環境設定をプッシュすることによって、そのために提供される人気のある説明を理解しています。 。 もう少し具体的に、チェーンを呼び出す関数がある場合に、このステートメントをどのように証明するかを(正式に)確認したいと思います。さらに、F iがいくつかのF jを呼び出す可能性がある条件ステートメントがある場合はどうなりますか?つまり、潜在的な関数呼び出しグラフには、いくつかの強く関連するコンポーネントがあります。F0→F1…Fi→Fi+1…Fn→F0F0→F1…Fi→Fi+1…Fn→F0F_0 \rightarrow F_1 \ldots F_i \rightarrow F_{i+1} \ldots F_n \rightarrow F_0FiFiF_iFjFjF_j これらの状況を、反復から反復へのコンバーターを使ってどのように処理できるかを知りたいです。そして、私が以前に言及した手で波打った説明は、この問題にとって本当に十分ですか?つまり、場合によっては、再帰の削除が簡単な場合があるのはなぜでしょうか。特に、バイナリツリーのプレオーダートラバーサルから再帰を削除することは本当に簡単です。これは標準的なインタビューの質問ですが、ポストオーダーの場合に再帰を削除することは常に私にとって悪夢です。 私が本当に求めているのは質問です222 (1)再帰を反復に変換できるというより正式な(納得できる?)証明は本当にありますか? (2)この理論が本当にそこにあるのなら、なぜ、例えば、前注文をより簡単に、後注文を反復することがそれほど難しいと私が思うのはなぜですか?(私の限られた知性以外)

3
分割統治/再帰がおそらく役に立たない問題はありますか?
新しい問題のアルゴリズムを構築しようとするとき、分割再帰(再帰を使用)は、最初に試行するアプローチの1つです。しかし、場合によっては、入力が増えるにつれて問題がはるかに複雑になるため、このアプローチは効果がないように見えます。 私の質問は、分割統治法のアプローチでは解決できないことを証明できる問題はありますか?次の行では、これをより正式なものにしようとしています。 LET、その入力の大き有する特定の問題である(例えば、入力の配列受け付ける問題番号)。を解くための再帰アルゴリズムがあるとします。そのアルゴリズムの再帰的な実行時間は、一定時間内にすべてのについてを解くことができるオラクルを想定して計算されます。例えば:n n P (n )P (k )k &lt; nP(n )P(n)P(n)んnnんんnP(n )P(ん)P(n)P(k )P(k)P(k)k &lt; nk&lt;んk<n 比較と2つの再帰呼び出しのみを使用するため、バイナリ検索の再帰ランタイムはです。O (1 )O(1)O(1) 配列の最大要素は、再帰時間ます。O (1 )O(1)O(1) マージソートの再帰ランタイムは、マージステップのためです。O (n )O(ん)O(n) 再帰時間は通常、実際の実行時間よりも短く、これは、再帰アルゴリズムが同じ問題に対する単純な非再帰的解決策よりも単純であるという事実を反映しています。 今私の質問は: 時間で解決できる問題はありますが、再帰的なランタイムが漸近的によりも小さい再帰的なアルゴリズムはありませんか?f (n )f(n )f(ん)f(n)f(n )f(ん)f(n) この質問のいくつかの特定の変形は次のとおりです。 再帰ランタイムアルゴリズムがない問題はありますか?(たぶん仕分け?)O (1 )PPPO (1 )O(1)O(1) 多項式再帰ランタイムのアルゴリズムがない指数アルゴリズムに問題がありますか? 編集:私の推測とは逆に、ソートには再帰ランタイムアルゴリズムがありますO (1 )O(1)O(1) P O (1 )。したがって、再帰的な実行時アルゴリズムがない問題があるかどうかにかかわらず、それはまだ開いています。PPPO (1 )O(1)O(1)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.