TCSのプログラム方法を知ることはどれほど重要ですか?


66

より数学的な背景から来て、私は実際にコーディングする方法を学びませんでした。私はTCSで博士号を取得していますが、多くの人々は、プログラミング(およびコンピューター全般)について私がほとんど知らないことに驚きました。擬似コードでアルゴリズムを書くことはできますが、プログラミング言語はまったく知りません。

いつか自分の仕事のためにいくつかのアルゴリズムを実装する必要があるかもしれないと想像できますが、この瞬間を待つことができますか?それとももっと何かありますか?

TCSでコーディングする方法を知ることは(プログラミングが直接関与していない分野で)どれほど重要ですか:CC理論家が(たとえば)コーディング方法を知ることができる理由はありますか?コーディング方法を学ぶのに多くの時間を費やす価値はありますか?そして、もしあれば、より適切なプログラミング言語のカテゴリ(機能的、命令的、オブジェクト指向..)がありますか?


12
意味のある、つまり明確で実行時を反映する擬似コードを記述するために、いくつかのプログラムを作成しておく必要があります。数学者はしばしばどちらもしません。また、開発した理論を実際に使用したい場合は、何かを実装する必要があります。言語に関しては、機能的な何かを学ぶ方がおそらく良いでしょう。Cはパフォーマンスには優れていますが、多くの面で推論するのが難しく、面倒です。(ご覧のとおり、YMMW)
ラファエル

6
「数学者はしばしばどちらもしない」に同意します。アルゴリズムを記述する数学者がこれまで実際にプログラムされているかどうかについての簡単なテストでは、依頼することです「とは何を正確にあなたが『Xを考えると...』によって意味ですか?」
ジェフ

4
プログラミング、それは何ですか?定理は私のプログラムです。調理手順は調理技術とは異なります。申し訳ありませんが、20年以上でプログラムコードを読むことができません。実際、私はこの「PCで実現される」混乱を嫌います。(すでにこの表記法は悪影響を及ぼす。)ユークリッドはプログラムできなかった。しかし、彼は何世紀にもわたってプログラムを作成しました。
Stasys

6
@StasysJukna:ユークリッドは実際には本当に本当にくだらないプログラマーでした。彼はアルゴリズムを実装しただけでなく、適度に複雑なテストケースでそれらを実行したこともありません。
ジェフ

3
@Jɛff E:はい、ユークリッドはくだらないプログラマーでした。まさにこれが言いたかったのです。TCSでは、料理の本とコッキングアートを区別しない傾向があります。ユークリッドができました。私は、プログラムを組むことができる人たちに敬意を表します。しかし、この機能が「TCSの1つのCAN」を意味するとは思わない。痛くないだけです。
スタシス

回答:


55

理論的なコンピューターサイエンスは幅広い分野であり、プログラミングの重要性はTCSで何をするかによって異なります。これらが唯一の方法であることを意味することなく、プログラミングがあなたを助けることができる2つの方法に言及します。

まず、実際に重要な問題のアルゴリズムを設計する場合、アルゴリズムを実装し、コードを他の人が利用できるようにすることは大きなプラスになります。たとえば、凸包問題は多くの分野で発生し、人々はこの問題を解決するために福田公明によるcddやデビッドエイビスによるlrsなどのソフトウェアパッケージを使用します。彼らがアルゴリズムを論文だけで公開していたら、おそらくアルゴリズムを使用する人は少なかっただろう。より多くのユーザーがより多くのフィードバックを意味し、おそらくコラボレーションの機会も多くなります。これは非常に貴重です。

第二に、アルゴリズムで作業していなくても、ワンタイムコードを書くと、推測が数値計算に適している場合に単純な推測をテストするのに役立ちます。たとえば、3つの正定行列の積が常に正のトレースを持っているかどうか疑問に思う場合、2×2または3×3の正定行列のランダムな選択についてテストするコードを記述し、反例を見つけるのは簡単です。推測をテストするためのプログラムを作成したことを宣伝することはありませんが、プログラミングにより、虚偽の陳述を証明しようとして無駄に費やす時間を節約できます。

選択するプログラミング言語は、プログラミングで何をしたいかによって異なり、私の意見では本全体のトピックになる可能性があります。ただし、アルゴリズムを設計し、他の人が実装を使用できるようにアルゴリズムを実装する場合、重要な要素の1つは可用性です。コードの潜在的なユーザーのほとんどがCコンパイラにアクセスできると期待できますが、同じ人々がHaskellコンパイラにアクセスできるとは期待できません。ワンタイムプログラムの場合、選択は利用可能なライブラリに基づいており、Matlabなどの環境が含まれます。

ところで、プログラミングも楽しいものです。


2
@SureshVenkat:実際、プログラミングが楽しい場合、「プログラミングはどれくらい重要ですか?」という質問はあまり意味がありません。しかし、その後、私の答えの大部分は無関係になります。なんて悲しい!:)
伊藤剛

私は以前あなたの2番目の議論を考えていませんでした、確かに、短いプログラムで予想をテストすることは本当に良い考えのようです!プログラミングは面白そうですが、週末の長い学習で見たことはありません=)。
Gopi

@Gopi:そうは言っても、多くの推測はこの「単純なプログラムでのテスト」フレームワークに適合しません。たとえば、通常、漸近的な動作をテストすることはできません(少なくとも単純なプログラムでは)。しかし、テストできる推測がある場合、小さなプログラミングが強力なツールになる可能性があります。楽しみについては、はい、わかりました。「有用性」の観点から動機をいくつか挙げただけで、「楽しい」観点を無視したくありませんでした。
伊藤剛

3
クラスの問題解決にKnuthのノートは(問題1を参照)推測とコードの間の相互作用の素晴らしい例があります。www-cs-faculty.stanford.edu/~knuth/papers/cs1055.pdf(I特に誰かの画像のように)印刷物のヒープを担持教室に突入
スレシュヴェンカト

47

これについてドロン・ツァイルバーガーを引用せざるを得ない。

意見37:プログラミングは証明よりもさらに楽しく、さらに重要なこととして、それ以上ではないにしても、洞察と理解を与えます。

意見を読んでください、それは宝石でいっぱいです(しかし、彼は故意に挑発的である傾向があります)。たとえば、「何かを理解するための最良の方法はそれを教えることです。しかし、人間にそれを教えることは、それをコンピューターに教えることですらさらに良いです」。

私の個人的な経験では、純粋に理論的な作業を行う場合でも、いくつかのコンピューティングツールが必要になります。Mathematicaを使用した退屈なルーチン代数操作の多くを回避します。MatlabまたはPythonで小さなインスタンスを強引に強制することで、中途半端な推測をテストします。純粋な組み合わせ論である論文を1つ共同執筆しました。これは、何が起こっているかを理解するために大規模なコンピューター実験を実行することで最も利益を得た研究です。オイラーは、問題の洞察を得るために退屈な計算の巨大な表を作成しました。私たちは、数学を行うときにこのプロセスを自動化するためにツールを使用することを彼に求めています。

それとは別に、アルゴリズムとデータ構造に取り組む場合、プログラミングは効率性と使いやすさの問題についてかけがえのない視点を提供します。ここでの私の意見は、他の人とは多少異なります。関数型言語を学んで正しい型の証明を書くことは時間の無駄だと思います(強く型付けされた言語の経験がある人はおそらくもっと注意深く構造化された証明を書く傾向があるのは素晴らしい点だと思います;その練習をするのに時間をかける価値があるとは思わない)。関数型プログラミングは、アルゴリズム設計と実行時間の問題をあいまいにし、ロジックとセマンティクスの問題を強調します(もちろん、関数型プログラミングの学習はおそらく必須であり、ロジック/ PLのセマンティクスに興味がある場合はある程度自然になります)。同様に、OOの目的はモジュール化された再利用可能なコードを書くことなので、JavaとC ++のOOの詳細を理解することも最適な方法ではないと思います。他の人が使用するコードを作成する場合の方法です。しかし、効率と実行時間についての洞察を得たい場合、本当に効率的なアルゴリズムとデータ構造に関心があるなら、Cを調べることをお勧めします。これにより、合理的なレベルの抽象化を提供しながら、マシンの近くに留まることができます。 。このようにして、高速なものと低速なもの、合理的なデータ構造などを把握できます。しかし、効率と実行時間についての洞察を得たい場合、本当に効率的なアルゴリズムとデータ構造に関心があるなら、Cを調べることをお勧めします。これにより、合理的なレベルの抽象化を提供しながら、マシンの近くに留まることができます。 。このようにして、高速なものと低速なもの、合理的なデータ構造などを把握できます。しかし、効率と実行時間についての洞察を得たい場合、本当に効率的なアルゴリズムとデータ構造に関心があるなら、Cを調べることをお勧めします。これにより、合理的なレベルの抽象化を提供しながら、マシンの近くに留まることができます。 。このようにして、高速なものと低速なもの、合理的なデータ構造などを把握できます。


10
「関数型プログラミングは、アルゴリズムの設計と実行時間の問題をあいまいにし、ロジックとセマンティクスの問題を強調しています」。格闘の言葉:)
Suresh Venkat

3
「関数型プログラミングは、アルゴリズムの設計と実行時間の問題をあいまいにし、ロジックとセマンティクスの問題を強調しています。」TCSのロジックまたはセマンティクスの側面で作業する場合、これが適切な選択である理由です。:)
ラドゥグリゴー


3
@Sasho:通常のテクニックはすべて、関数型言語で引き続き機能します。唯一の「問題」は、関数型プログラミングがプログラミングのスタイルとデータ構造設計を奨励することであり、アルゴリズム分析の通常の手法では処理が不十分です。(たとえば、関数合成のビッグOは何ですか?操作は簡単ですが、漸近的な複雑さの仮定を完全に破ります-関数入力のサイズの単純な数値メトリックはありません。)
Neel Krishnaswami

3
@SashoNikolov:大学院のデータ構造のクラスを教えるときはいつでも、誰もが関数型プログラミングの経験を積んでいると思い込みたいと思います。永続性を説明するために90分間の講義を3回行う代わりに、「ねえ、あなたのデータ構造がすでにこれを行っていることに気づいたのですか?」
ジェフ

33

あなたはプログラミングなしで非常に成功した理論的なコンピューター科学者になることができます。少数の人々にとって、プログラミングは非常に難しく、あなたが彼らの一人であるならば、あなたは絶望してフィールドを切り替えるべきではありません。

ただし、ほとんどの数学およびコンピューターサイエンスの大学院生にとって、プログラミングを学ぶことは特に難しくはなく、非常に役立つスキルです。プログラミング言語を習得する必要があります。それを楽しんでいる場合は、十分に練習して、十分に習熟するようにしてください。それから、プログラムを書くことはあなたの研究で有用であるというポイントが来る(そしてそうなる)とき、あなたはそれをすることができるでしょう。

あなたが今プログラミングを学ばなければ、最終的にプログラムを書く必要があるとき、あなたは学ぶ時間がないでしょう。研究。大学院生や学部生にこれをやってもらうのはそれほど難しくありませんが、問題を説明するよりも自分でやるほうがはるかに簡単で時間もかかりません。

どの言語を学ぶべきですか?これらは現在最も多く使用されている言語なので、オブジェクト指向言語をお勧めします。これは将来より真実になると思われます。おそらくPythonまたはJavaであり、どちらもオブジェクト指向言語であり、実際にはC ++よりも使用頻度は少ないですが、どちらもはるかに簡単に習得できるという印象です。(警告:Bell Labsで働いていたにもかかわらず、C ++を知らないので、これについて間違っているかもしれません。)


2
私はあなたの3番目の段落で真実を見る:)。
Gopi

1
「しかし、ほとんどの人にとって、プログラミングを学ぶことは特に難しいことではありません」-私の経験からこれに反対するようになりましたが、ほとんどの人はTCS研究者ではありません。
マックス

2
Sageの登場により、Pythonのような人気の高い言語を使用しながら、Mathematica / Maple / Matlabスタイルの数学ライブラリをすぐに利用できるようになりました。
アンドラスサラモン

1
C ++には、私が見た主流の汎用プログラミング言語の中で最も進んだタイプ/メタプログラミングシステムがありますが、Lisp言語のファミリを除きます。したがって、型理論、言語設計、コンパイラ理論、またはより広く形式的なセマンティクスに興味がある場合は、それに精通することをお勧めします。C ++に加えて、実験的なコンピューターサイエンスの研究を行いたい場合、または業界のプログラマーまたはソフトウェアエンジニアとしての仕事を希望する場合、JavaとC#は必須です。Pythonは高校で教えるべきです:D
アントニオヴァレリオミチェリバローネ

4
@ AntonioValerioMiceli-Barone:少なくとも型理論、言語設計、形式的セマンティクス、プログラミング言語理論(PLT)全般については、私は反対しなければなりません。C++はこれらの分野で学ぶ言語ではありません。PLコミュニティはより多様ですが、TTと正式なセマンティクスはほぼ排他的に関数型プログラミングに関連していますが、C ++よりも洗練された言語を好みます。Haskellは、最も高度な型システムを備えた「メインストリーム」言語であり、Scala(より高度ではないが、もう少しメインストリーム)が続きます。C ++には興味深い機能がありますが、現代的な趣味には低すぎます。
ブレイザーブレード

33

誰も実際に育てていないという別の答えがあります。プログラミングは実際に興味深い理論につながる可能性があります。ハッシュの最近の開発(特に集計ハッシュ)の多くは、理論的な問題それ自体ではなく、理論的に最適なアルゴリズムが実際にはそれほど優れていないという事実によって動機付けられています。もちろん、これはコードを書けない限り知らないことです。

正確な指数時間アルゴリズムの領域でさえ、動機は実際に機能するアルゴリズムを生み出しています。SATソルバーはこの標準的な例です。

要するに、コーディングする能力により、最適な理論的結果のように見えるかもしれないものの欠点と弱点を実現することができ、それによって新しい理論的研究の方向性が開かれます。


あなたの答えは、TCSの経験的結果に関する質問に役立つかもしれません。
Gopi

多分:しかし、そのスレッドは長い間消滅している:)
Suresh Venkat

実際、私は日付を見ませんでした、それは私が受け取った最後のニュースレターのセクション「前週からの最大ヒット」にありました=)。
Gopi

18

3つのポイント:

1)実験数学と呼ばれる数学へのアプローチがあります(wikipedia:// Computer-aided proofも参照)。ここでは、コンピュータープログラムを使用してオブジェクトのパターンと構造について調査し、これらのオブジェクトに関する分析的証明を考え出します。このアプローチでは、プログラミングの方法をよく知っています。非常に理論的なステートメントを証明するために、このアプローチが必要であることを確信できます。プログラミングに対する索は、多くの場合、TCSの研究ではあまり役に立たないことが判明したと思います。

AL(X,Y)BL(Y,C)

3)「プログラムへ」と言うとき、「線形プログラムへ」または「半正定プログラムへ」も意味しますか?:)


2
「線形プログラムへ」または「半正定プログラムへ」に「プログラムへ」を使用する人はいません。代わりに「線形プログラムを構築/解決する」と言うでしょう。
ピーターショー

2
@PeterShorポイント3は深刻ではなかった
アレッサンドロコセンティーノ

3
そしてもちろん、線形プログラムと半正定値プログラムの両方を学ぶ必要があります...両方の有用なスキル。
ピーターショー

3
ポイント2に+1を付けました。実際、私は学部生のときに少しOCamlを教えられましたが、1年しか使っていませんでしたが、証明の種類をチェックする習慣を取りました。
Gopi

4
動的にプログラムします
ジェフ

16

この質問をありがとうございます。まだ言及されていない別の次元で、多くの興味深い答えを拡張したいと思います。

私たちが大学で行うことは研究だけではありません。学界に滞在したいのであれば、最終的に教える必要があります。運がよければ、専門分野からかなり離れたコースを教える必要があります。かなりのプログラミングコンポーネントを備えたコースが割り当てられる可能性が高いです。これは、中程度のプログラミング能力でさえも実質的に役立ちます。プログラミングの方法を知っていれば、教師ははるかに良くなります。何よりもまず、教材に慣れ、生徒の質問によりよく答えることができます。また、この学習プロセスを自分で経験したので、生徒がプログラミングを学ぶことの難しさを理解できます。さらに、より良い教材を作成できます。たとえば、プログラミング演習を生徒に提供する前に自分でテストできます。

さらに実用的な側面があります。教育には、熟練したプログラマーが頻繁に自動化できるさまざまな反復タスクが含まれます。たとえば、学生がコースワークを提出するために使用できるWebサイトをすばやく作成し、(コードが渡す自動テストの数に従って)自動的に採点します。


「運がよければ、自分の専門分野からかなり離れたコースを教える必要があります。」それは幸運ですか…?
伊藤剛

3
@剛:まあ、それはあなたが新しい主題領域に慣れることを強制します。短期的には、それは多くの作業を意味します(この資料を複数回教える可能性があるため、長期的には償却されます)。同時に、知的視野を大幅に広げます。
マーティンバーガー

@伊藤剛:はい!
ジェフ

13

プログラミングは、さまざまな概念の理解を深める良い方法ですが、危険な時間の節約にもなります。

プログラミングに対する典型的な議論は、重要でない詳細に時間を費やすことです。典型的な引数のためのプログラミングは、それはあなたが思っ詳細は重要ではない実際に重要であることを実感なることです。プログラミングが得意になるとは、主に、重要でない部分を迅速に処理できるようになることを意味します。善良になるには長い時間がかかります。

学習するプログラミング言語については、「それらのすべて」が私の(ほっそりした)答えです。


2
最後にプログラミングに対する議論:)。
Gopi

1
@Gopi、プログラミングはとても楽しいものであり、理解を深めることが非常に重要だと思います。他の答えは、プログラミングがどのように理解を助けるかという素晴らしい例を示しています。ですから、プログラミングを学ぶことをお勧めします。企業がすぐに成果を上げないようであれば、あきらめないでください。
ラドゥグリゴール

6
定理を証明することもさまざまな概念の理解を深める良い方法ですが、危険な時間の節約にもなります。
ジェフ

@Jɛff E、私の意見は置換によって保持されます[擬似コード->紙の上の証明、コード->証明アシスタントの証明]。
ラドゥグリゴー

12

私はパーティーに遅れており、これらはすべて素晴らしい答えですが、別の理由があります:

視覚化。

はい、多くの場合、視覚化できないものを使用しますが、多くの場合、使用できるものを使用します。このタスクにはプログラミング方法を知ることが不可欠であり、視覚化は問題に対する多くの洞察を提供します。


3
私はプログラミングの方法を知っていますが、視覚化にはまったく希望がありません。また、多くのプログラミングを行わなくても物事を視覚化できるツールがあると思います。存在しない場合、存在するはずであり、おそらく数年以内に存在するでしょう。
ピーターショー

@PeterShor:C ++を使用しないためです!(冗談です)
伊藤剛

1
@PeterShor:特定の言語や環境について言及していません。MATLABはここでカウントします。しかし、プログラミングの方法を知っていれば、そうでなければ信じられないほど不便な視覚化を得ることができます。たとえば、2次元の正定値行列の空間は3次元であり、この空間で構成要素のファミリーを視覚化したいと考えました。変換を考え出し、それをコーディングして、オブジェクトを実際に見る必要がありました。
ジョンモーラー

@ジョン...あなたは正しい、私はあなたが他の方法でそれを行うことができたとは思わない。
ピーターショー

7

簡単なポイント:プログラミング方法を知っていると、理論研究の追加ツールが得られます。動作するだろうと思うアルゴリズムを持っているとき、それが十分簡単であれば、私はそれをコーディングし、実際に動作するかどうかをチェックするかもしれません。私のアイデアが(実際に)動作しない場合、理論的に動作する可能性はほとんどありません。このアプローチは、間違っていることを証明しようとして膨大な時間を費やすことから私を救います。


伊藤剛も彼の答えで同様の議論を書いた(2番目のポイント:))。
Gopi

おっとあなたは正しい-私はそれを逃した。
レフレイジン

5

ここで、TCSを勉強している人がプログラミングを学ぶ必要があるという実際的な問題に取り組んでいる人はいません。

コンピューターサイエンス部門のTCSで博士号取得を計画している場合、理論以外のコースを受講する必要がある可能性が高く、それらはほぼ間違いなく非常にプログラミング集中型になります。参加しているプログラムによっては、資格試験に合格するために非理論科目の知識も必要になる場合があります。

博士号を取得すると、TCSのほとんどの雇用機会は学界にあります。アカデミアで働く場合は、教えることが期待され、理論よりもプログラミングの多いイントロレベルの学部生CSクラスを教えることが期待される場合があります。アルゴリズムなどの学部生に理論クラスを教えている場合でも、学生は理論よりもプログラミングについて多くのことを知っていると期待でき、学生が知っていることを知らずに、理解のギャップを埋めることは難しいでしょう。私はプログラミングを知らない誰かによってCS学部生が教えられているという考えに身震いします!

これらの実際的な懸念を気にしないのであれば、おそらくプログラミングについて何も知らなくても研究を行うことで得られるでしょう。確かにあなたはTCSコミュニティにたくさんの会社を持っていますが、マイレージはあなたが働いている理論の正確な領域によって異なります。例えば、純粋な計算複雑性理論をしている場合、誰も持っていないクラスの下限を証明聞いたことがあるなら、プログラミングはあなたにとって役に立たないでしょう。しかし、あなたがもっとアルゴリズム的なことをしているなら、きれいな作業コードを書くことができれば、他に何もなければ直観が強化されると思います。

C(C ++ではなく)を学習することをお勧めします。K&Rのコピーを手に取り、前後に読んでください。Cには現代言語の派手な機能の多くはありませんが、シンプルでありながら洗練された構文とセマンティクスを備えているため、全体を学ぶことができます。ただし、言語を完全に理解している場合でも、Cでエレガントでバグのない優れたコードを書くことを習得することは依然として練習になります。それでも、Cでコーディングを習得できれば、遭遇するプログラミング言語を習得できます。さらに、その規律は、ハードウェアがどのように考えるかを考えるのに役立ちます。これは、アルゴリズムを設計するときに有益です。

ポインターのようなアイデアは、アルゴリズム設計を行う人にとって非常に重要ですが、残念ながら、JavaやPythonのような言語はそれらをあなたから見えなくします。そのため、数学の背景を持つ人にはそれらを第一言語として推奨しません。OOPは、アルゴリズムを設計している人ではなく、巨大なソフトウェアプロジェクトを維持する必要がある人にとってより重要です。


0

あらゆるレベルのコンピューターサイエンスでは、コースを通して、特にレベルで直面しなければならない理論を達成/検証/解決するためにコンピューターを介してアルゴリズムを実装する必要があるため、コースの開始を待たないことをお勧めします。

私は最初にグレード10(高校)でプログラムしなければなりませんでしたが、コマンドラインの使用方法を既に知っていたので、これは本当に役に立ちました(CSで「基本的な」プログラミングスキルがどのように考慮されるかを示すためです)。

擬似コードとアルゴリズムは、プログラムを作成するために最初に学習しなければならないことの1つであるため、仲間の驚きは十分に根付いています。

ただし、あなたは、自分自身でより幅広い数学スキルを使用してオブジェクト指向プログラミングをスキップし、関数型プログラミング言語の学習を早く追いつくことができるため、今後のコースで完全に失われることはありません。

  • 関数型プログラミングは非常に数学指向であり、必要な数学の背景から学ぶのが難しく、非常に強力であると考えられています(エレガントで「クリーン」な手段で難しい問題を達成する「単純な」数学的な方法)。
  • オブジェクト指向は、基礎となるアルゴリズムと実装の原則を理解したくなく、既存のオブジェクトを単に「再利用」したい場合に適しています。

Haskell(通常は第一言語ではない)に取り組むことができたのは、それが純粋に数学的で機能的であり、基本的にあなたがやりたいことは何でもできるからだと思います。Haskellを学ぶことで、あなたはこれ以上追いつくためにそれ以上学ぶ必要のないレベルになり、あなたのコースをコントロールし、パワーを得ることができます。統計に興味がある場合、Rの学習はプラスですが、Haskellほどではありません。数学に近いことや、自分の考え方をどのように受け入れているかに驚いたという数学者の報告を見てきました。

また、(プログラミング環境に早く慣れるために)取り組む価値のある課題は、Linuxをインストールして使用することです(Ubuntu Linuxでも可能です)。私を信じてください、あなたはそれで遊ぶことによって多くを学ぶでしょう...

これらのアドバイスは、コンピュータサイエンスの数学者がすばやく確実に追いつくために知っている最良の方法です。その上、オープンソースコミュニティは非常に友好的で役立つため、行き詰まっている場合は、IRCが専門チャンネル(FreeNodeで接続)を介して主題について話す最も直接的な方法です。覚えておいてください:質問は、自分自身、フォーラム、検索エンジン、またはチャットルームで質問を解決する唯一の方法です。


4
元の質問にどれだけ答えているかわかりません。「どのように」ではなく、「何のために」と尋ねました。
Gopi

0

対話型証明システムのC ++実装の例は、次の論文です。回路評価のための時間最適対話型証明、Justin Thaler著。http://people.seas.harvard.edu/~jthaler/で入手できます。これは、汎用のインタラクティブプルーフシステムの実用的な実装を開発するという目標に向けたステップのようです。

同様の論文および関連するソースコードは、上記のWebサイトに掲載されています。


3
この論文が質問にどのように関係しているか、つまり、TCSのプログラム方法を知ることはどれほど重要ですか。
-scaaahu

プログラミングの恩恵を受けた理論的な結果のであったとしても、元の質問には答えられないでしょうか?
ジェレミー

質問は、複雑さの理論家がコーディングを知る必要があるかどうかを尋ねます。上記の論文では、理論的な概念を補完するために実験結果を明確に使用しています。これにはコーディングが必要です。いずれにせよ、理論的なコンピューターサイエンスの中心概念に非常に密接に関連するプログラミングプロジェクトを見つけるのに非常に長い時間がかかりました。この投稿が、同様の検索で誰かに役立つことを願っています。
lgidwani
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.