アルゴリズムの設計と複雑さ-その「方法」でどう考えるか?


15

私の質問は一般的なものです:アルゴリズムの設計と複雑さの観点から考え始めるにはどうすればよいですか?アルゴリズム設計の大学院課程を受講します。私は以前に登録していましたが、それに追いつくことができなかったため、後で削除しました。このコースを必須条件として受講する必要があります。

このように考える「トリック」はありますか?私はこれが非常に大雑把に言っていることを知っていますが、時々新鮮な視点は主題について異なって考えるのに役立ちます。

このコース(および同様の理論的コース)で私が抱えている主な問題は、私が思いついた解決策が正しいことをどのようにして知ることができるかということです。特定のアルゴリズムが特定の方法で動作または動作することを「証明」する場合、特に理論的な部分はarbitrary意的であると思いますか?

コースでは、標準テキスト「CLRSによるアルゴリズムの紹介」を使用します。

教科書/サイト/書籍/などはありますか?それはこの分野に自信を持つ方法を提供するかもしれない?

皆に感謝します、

ジェイソン・デイン


2
この投稿をご覧になることをお勧めします。Udi Manberの本を特にお勧めします。
MS Dousti

1
StackOverflowの上のこの議論は、いくつかの提案を提供しています:stackoverflow.com/questions/2256721/...を
Jeffε

2
2番目にManberの推奨事項です。また、チェックアウトのアルゴリズムについて考える方法:ジェフ・エドモンズでamazon.com/Think-About-Algorithms-Jeff-Edmonds/dp/0521614104
Jeffε

「私が思いついた解決策が正しいことをどうやって知るのですか?」(1)アルゴリズムを思いついたが、それが正しいことを証明する方法がわからない、または(2)証拠はあるが正しいかどうかわからないということですか?
ユッカスオメラ

ステップ1:直接的な回答をやめ、代わりに他のソリューションを参照します。;)
ラファエル

回答:


18

アルゴリズム設計計算の複雑さに関するコースは、ある程度の数学的な成熟度と問題解決スキルを必要とするため、これらの科目に精通していない学生にとって常に挑戦的だと思います。「計算の複雑さ」に関する私の最初の大学院コースで、純粋な数学の学位を持っている私の友人は、そのコースが多くの数学の背景を必要としないにもかかわらず、少なくとも驚いたことを教えてくれました。コースの概要)、実際には、彼が純粋な数学の学部の学位のすべてで得たほぼすべてのスキルが必要でした!

Sipserの本を読んでエクササイズをすることで、「方法」について最もよく知るようになりました(最初に大学院を始めたとき)。問題解決のスキルと数学的成熟度は、単にたくさんの事実や定義ではなく、あなたが学びたいものだからです。

ただし、Sipserの本は複雑さとNPの完全性に適しているだけで、CLRSの本を置き換えるだけでは十分ではありません。CLRSブックの唯一の問題は、包括的なカバーの利点が弱点になる可能性があることです。なぜなら、この本は学生にとって非常に怖いまたは圧倒的に見えるかもしれないからです。だから、私のアドバイスは、あなたは本当に図書館に行ってアルゴリズムに関する本を検索し、一つ一つをスキャンして、あなたの思考パターンに最も合うものを選ぶべきだということです。繰り返しますが、演習を行うことを忘れないでください!

アルゴリズムについては、個人的に次の本をお勧めします(SadeqとJeffEが提案した本に加えて)。

  • S. Dasgupta、CH Papadimitriou、およびUV Vaziraniによる非常に読みやすく美しい本のアルゴリズム
  • ジェフ・エリクソンによるキラー・ノート(または本の下書き)。(JeffEは控えめすぎて自分のメモを提案できないため、自分でやらなければなりません。)

一般に、特定のアルゴリズムまたはデータ構造を学習するときは、教科書の説明が何らかの理由で明確でない場合、Googleでその特定のトピックの講義ノートを検索するのが最善の方法です。場合によっては、同じことについて異なる説明を行うと、最終的に全体像がわかります。少なくとも、それは私のためにどのように機能するかです。


8
ジェフのキラーノートの+1。私はいつもそれらを読んで楽しんでいます。アラビア語のアルゴリズムの単語の書道は非常に美しいです。
モハマッドアルトルコ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.