コースの開始直前に、すべての開発ジョブの伝統的な項目であるOdnoklassnikiでのインタビューで、「自信/良い/アルゴリズムの優れた知識」について自分自身をあまりよく見せなかったと言わなければなりません。これはこのコースを勉強する追加のインセンティブでした。 その前に、研究所で「データ構造」という主題のフレームワークでアルゴリズムを研究し、その後の4年間の仕事の一部として時々研究したことに注意します。 一般的に、知識の断片:面接のための綿密な準備をしていても、どこかに良いところがあり、どこかにギャップがある。
まず、初心者向けに、コースの作成方法について少し説明します。 コースは6週間続きます。 毎週、2つのトピックに関する講義が開かれます(各トピックについて、4〜6講義、10〜20分間)。 講義を聞いた後、統合するために、各トピックでテストが実行されます。また、1つの実践的な演習-アプリケーションを実装するJavaプログラムも実行されます。 これらの検証作業のそれぞれについて、ポイントが設定されます(それらがまだどこに行くのかわかりません。コースの終わりに何らかの形で最終グレードに処理されると思います)。 さらに、インタビューで質問できるトピックに関する質問があります(一般的な開発のためだけに評価はありません)。
コースの最初の3週間でどのトピックが考慮されるかについて少し説明します(コース全体は英語で行われ、一部のトピックについては適切なロシア語名を知っているかどうかわかりません)。
週1
- Union-Find:要素が特定の要素セットに属しているかどうかを判断する問題、および要素を結合する操作が考慮されます。 実際、ツリーについて話し、指定されたサブツリーの要素を見つけて、指定されたサブツリーに要素を追加しています。 配列とリンクリストを使用して、この問題を実際に解決することの長所と短所を検討します。
- アルゴリズムの分析:アルゴリズムの複雑さ、アルゴリズムの最良、最悪、平均の場合、アルゴリズムの時間を推定する方法、およびJavaのデータ構造で使用されるメモリ量を計算する方法の概念を検討します。
- 実際的なタスクとして、パーコレーションタスクソリューションを実装することが提案されています。 残念ながら、このタスクをロシア語に正しく翻訳する方法がわかりません(このタスクは「Seepage」と呼ばれることを示唆しているコメントで)、その指で本質を説明します。行列の上下の行を結ぶパスがあるかどうかを判断します。
週2
- スタックとキュー(スタックとキュー):名前が示すように、これらのデータ構造と、配列とリストに基づく実際の実装、およびこれらのデータ構造に実装されたときに基本操作を実行する時間の複雑さの評価が考慮されます。 Javaのイテレーターやジェネリックなどには、別の時間が費やされます。
- 基本ソート(単純なソート):選択によるソート、シェルによるソート、挿入によるソート、時間の複雑さの評価が考慮されます。 さらに、要素の「混合」の問題も考慮されます。 平面上の一連の点を覆う凸閉多角形を構築する問題(凸包)を検討します。
- 実際には、デッキと「バッグ」(バッグ)のデータ構造を実装することが提案されています。
週3
- Mergesort(マージソート):ソートをマージするために多くの時間が費やされます。むしろ、ソートを実装して時間の複雑さを評価する2つの方法があります。 おまけとして、「ソートの安定性」の概念が考慮され、Javaのコンパレータも個別に考慮されます。
- クイックソート(クイックソート):すべてはここでのクイックソートから始まります。 実用的な実装、その時間の複雑さの評価。 さらに、要素のセットから要素を選択する問題(たとえば、最大の要素)が考慮され、Javaでの組み込みソートの実装方法に注意が払われます。
- 実際には、平面上の同一直線上の点を見つける問題を解決するように求められます。
これが、トレーニングの最初の3週間の様子です。 私はすべてのトピックが球形の真空ではないと見なされるのが好きでしたが、Javaで実装すると、アルゴリズムコースがさらに楽しくなり、式から気が散ります(あまり負荷がかかりません)。 私は、Javaのいくつかの機能について「散在する」小さな断片が好きでした(Javaでの開発経験にもかかわらず、私はまだいくつかの新しいニュアンスを学んでいます)。 もう1つの優れた点は、講義に定期的に座る必要があることです。実際のタスクの締め切りであり、コース全体としては、後で資料の学習を延期しないようにします。
最後に、講義は英語で行われますが、字幕付きです(ロシア語の字幕は最初の講義にしかないと思います)ので、耳で英語をよく理解する必要はありませんが、技術的な英語が必要です。
そして最後に、講義のトピックの「不器用な」翻訳をもう一度許してください。一般的に受け入れられているロシア語の類似語が存在する一部の用語については、かなりの可能性があります。 コメントをお待ちしております。
参照:
ourseraウェブサイト-www.coursera.org
コース「アルゴリズム。 パート1」 -www.coursera.org/course/algs4partI