計算の複雑さの自己学習者へのアドバイス


7

私は数学の学部生です(まもなく3年目に入ります)。私は自分に計算の複雑さを教えようとしています。悲しいことに、私の大学ではこのトピックに関するコースは提供されておらず、専門家もいません(実際、私の大学には理論的なCSの専門家はまったくいないようです)。だから、私は独学以外でトピックを学ぶことはできません。私はすでに計算の複雑さの最初のいくつかの章を通過しました:現代のアプローチ [しかし、どの演習も解決しませんでした(最初の章の2つまたは3つがTMと停止問題を明らかにすることを除く)]

私はテキストの演習でいくつかの問題に直面しています:

  1. 1つは、計算の複雑さに必要な考え方は、私がよく知っている数学の考え方とはかなり違うと感じていることです(アルゴリズム的な考え方など、問題を他の問題に縮小してTMを作成する方法に重点が置かれています)別のTMなどをシミュレートする)これは私が難しいと思うものです。

    アルゴリズムや削減などについて、このレベルの成熟度を開発するのに役立つ方法はありますか?

  2. 「1」の難しさの理由の1つは、どの程度厳格にすべきかわからないことです。たとえば、縮小またはシミュレーションを実行しているときに、何かが明確で実行可能であることが直感的にわかる可能性がありますが、詳細を実際に実行するには非常に面倒なので、私はそうではないと感じますよく理解してください。ポイントは、厳密さと直感的な考え方の間には妥協が必要だということです。しかし、私にはガイドもインストラクターもいないので、この行がどこにあるべきかわかりません。

    何か明確なことがあれば、いつすべての詳細を実行する必要がありますか?また、直感にいつ満足すべきですか?計算の複雑さには、私が知っている数学に通常存在する詳細よりもはるかに多くの詳細があるように思われます。

  3. より複雑な演習に取り組む前に、基本的な概念や構成などを使って自分でトレーニングできるように、計算の複雑さで提供されるものよりもはるかに簡単な演習や問題の原因はあるのでしょうか。また、多くの定理は本文に証明のスケッチしか持っていないので、主定理の(かなり詳細な)証明の出典は素晴らしいでしょう。

私の背景として、プログラミングの基本を学びました(私はpython、CおよびC ++でしばらくトレーニングしました)あまり多くはありませんが、数学、特に数学的ロジック(完全性と不完全性の定理まで)、高度なセットにはかなり精通しています理論(強制)、代数(線形、抽象、普遍代数、およびいくつかのカテゴリー理論)、およびトポロジーと実数分析の基礎。私は離散数学(組み合わせ論+グラフ理論)のコースも受講しました。

私の質問がトピックから外れている場合は申し訳ありませんが、これらの質問を提案するのにこれ以上の場所はありません。


1
1)これらの質問に対する一般的な回答は可能ではないと思います。それはあなた次第です。2)計算の複雑さへの道は、おそらくあらゆる種類の数学的トピック、つまり試行錯誤と同じです。3)3つの非常に異なる質問をしますが、このサイトには適していません。一度に1つの質問に限定してください。
ラファエル

M.Sipserをご覧ください:「計算理論の紹介」; もっと基本的ですが、素晴らしい本です。
Vor

2
でドロップを示唆してコンピュータサイエンスチャットのヒント/激励などを定期的にすることも、オンラインコースの以下のDW勧告がスポットオンである、彼らは、自由を低価格で入手でき、そしてない劇的に異なる教室での経験よりも、そしていくつかはで教えられていると思います分野で最高の権威など 別の見方は、最近の科学論文を研究することです...しかし、あなたの最終目標については言及しませんが、学問としてCSに入りたいですか?など...はいCS証明などとの規則がありますが、彼らはそれではない、独自の規則を持っている数学の文化...とは異なり、時間をかけてピックアップすることができます
vzn

@vzn、理論上のCSをアカデミックとして受け入れるかどうかは100%わかりません。しかし、おそらくそれはとにかく計算の複雑さか、またはいくつかのトピックは、数学的論理の相互作用と記述的な複雑さのような複雑さの間にあるでしょう。
Fawzy Hegab 16

回答:


7

私の推奨は、前提条件と実践の2つに焦点を当てることです。

前提条件:最初にアルゴリズムを十分に理解しないと、計算の複雑さを学習するのが難しくなります。多くの学校では、アルゴリズムのクラスは、計算の複雑さのクラスの前提条件です。あなたは、アルゴリズムの成熟度が足りないかもしれないと感じているとあなたは言っています。それはあなたが勉強していない重要なテーマです。したがって、私の最初のアドバイスは、計算の複雑さに時間を費やす前に、まずアルゴリズムの研究に時間を費やすことです。多くの優れたアルゴリズムのテキストとオンラインコースがあります(たとえば、Udacity、Coursera、またはEdXを介して)。その資料を学ぶのに少し時間をかけることは役立つかもしれません。世界のすべてのアルゴリズムを学ぶ必要はありませんが、いくつかの一般的なアルゴリズム手法の感触をつかむようにしてください。削減の設計は基本的にアルゴリズムの設計であるため、この知識は役立ちます。また、アルゴリズムの正確さの証明と漸近的な実行時間分析に慣れていることを特に確認してください。

次に、練習します。削減を伴う成熟から始める人はいません。これに慣れるための方法は、練習することです。素材に慣れるまで、または練習によって理解のギャップが明らかになるまで練習します(その後、理解にギャップがあり、そこに戻って、さらに学習に集中できます)。この種の練習がなければ、教材を学ぶことはできないでしょう。

練習に役立つように、計算の複雑さに関するオンラインコース(MOOC)を探すと役立つ場合があります。Udacity、Coursera、またはEdXを確認できます。

あなたはどれほど厳格でなければなりませんか?必要に応じてすべての詳細を記入できると確信できるほど十分に厳格(そして、同じレベルの研究の同級生が、一生懸命考えなくてもすべての詳細を記入できる-彼らは詳細を記入することに同意するだろう)面倒ですが、単純明快です)。


まず、貴重なアドバイスをありがとうございました。MITが提供するアルゴリズムに関するコースがありますが、アルゴリズムのテキストのほとんどは、並べ替えや配列に関するアルゴリズムを扱っているようです。これは、後でプログラミングのデータ構造に関連するものではなく、データ構造に役立ちます。数学または計算の複雑さ(たとえば、線形計画法やシンプレックスについての言及がない場合など)このようなコースは依然として重要だと思いますか?たとえば、MITのこのオンラインコースを確認して、受講することが有用かどうか教えてください
Fawzy Hegab

ここではもちろんの講義のリンクは次のとおりです。 youtube.com/playlist?list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb .Isがどの教科書を使用すると、アルゴリズムを勉強することをお勧めしますということ?MITコースでは、コーメンのテキストを使用しています。どう思いますか?
Fawzy Hegab 16

複雑さの理論に関するコースをいくつか見つけました。たとえば、ティモスガワーズによるウェブ上の複雑さと量子計算に関する講義は約10ありますが、複雑さの理論における彼の目標は回路の下限に向かっているようですが、初心者向けのトピックではなく、アローラとバラクのテキストの最初のいくつかの章をすでに読んだので、複雑さに関するこれらの講義を理解できると思います。
Fawzy Hegab 16

4

私が反対の立場にあることを考えると(コンピューターサイエンス/エンジニアリング、自己学習数学)、いくつかのトピックに光を当てることができると思います。

私は最近、アルゴリズム、形式言語、複雑性理論をカバーするアルゴリズムと複雑性理論のコースを受講しました。自分が何をしているかを本当に理解したいのであれば、3つすべてが非常に重要になると思います。たとえば、big-Oの影響とランタイムの分析方法を理解していない場合、PとNPが何を表しているのか実際には理解できず、他の複雑なクラスに移行することが難しくなります。TM、オートマトンなどを理解していない場合、通常の言語、CFG、および決定可能で再帰的に列挙可能な言語が何を表しているのかを理解できません。したがって、私の提案は、コンピュータサイエンスの数学に結びついたところから生じます。

  1. セット理論と実際の分析を行いました。ほとんどのコースからの帰納法(多くのクラスメートにとってアルゴリズム分析の最も困難な部分であったツール)に精通している必要があり、再帰は自然に起こります。直接的な関係はありませんが、より抽象的なオブジェクトに関して言えば、抽象代数(およびそれ以上のもの)の強力な基盤が、あなたにとって大きなアドバンテージになることが証明されると思います。グループ、リングなどは、何らかの構造を含む代数オブジェクトであり、それらの間にマップと射があります。チューリングマシンとオートマトンは、いくつかの構造とルールを含み、それらの間で変換を行う計算構造です(ThompsonによるNFAへの正規表現、マルチテープTMからシングルテープTMへの構築)。

  2. 具体的に何を求めているのかはわかりませんが、厳密にできる場合はそれを行ってください。数学で使用されるいくつかの技法があり、多くの構造で使用されます(単純な概念から微積分に構築されるイプシロンデルタ証明を使用した実際の分析)。また、複雑さの理論で使用される技法(問題から別のものへの簡約、単射写像について考える)地図が単射であることを証明するのではなく、地図を提供する必要がある場合)。

  3. このコース(https://courses.engr.illinois.edu/cs374/lectures.html)は、講義ノートとスライドを提供し、優れた入門用参考資料​​があります。これですべてがカバーされるわけではありませんが、あなたにとって素晴らしいスタートになるでしょう。ラボでの作業は、理解度を確認してテストするのに非常に適していますが、必要な知識よりも難しい場合もあります。

最後に、あなたの離散的な数学は、このすべてを通して大きな助けになります。アルゴリズムの分析と設計、およびデータ構造分析の組み合わせ論においてグラフ理論がいかに重要であるかがわかります。幸運を祈ります。あなたが探しているものを見つけていただければ幸いです。


素晴らしいアドバイスありがとうございます。カテゴリ理論はどのように私をさらに助けますか?
Fawzy Hegab 16

私も興味があるので、見つけたらお知らせします!
m1cky22

1

(a)必要な前提条件の数学を決定し、(b)各章で最初の3〜4の問題などを本当に理解して進むことに固執する。時間がかかる場合でも信頼してください。その後、将来の問題が発生した場合はすぐに対応できます。

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