Michael0x2a/cse-143-16au-study-guide.md
How to study
Programming, is about applied problem-solving, and is not about memorization.This means the best way to prep for programming exams is not sit down and read through theslides — it is by solving many problems.It is a lot of problems.
そのため、次のような準備をすることを強くお勧めします:
-
今から、1日に最低3~4問のプログラミング問題を解いてみてください。 1日4問ずつやれば、試験までに30~50問くらいは解けていることになり、直前勉強する人より圧倒的に有利になります。
これは、直前の詰め込みをする人よりも問題を解いた経験が豊富であることと、期末の練習問題で問題を再利用することがあるためです。
この方法では、つまずいた問題に遭遇したときに質問する時間もあります。
カレンダーに毎日1時間、座って問題に取り組むブロックをスケジュールしてみてください。 (
-
ミステリートピックの問題集を解く日を設ける。 ある日座って、一度にたくさんの問題を解いて、訓練する方が生産的かもしれません。 (例えば、今週末、ポリモーフィズムの問題をたくさんやってみるとか)
-
練習問題を一発で解いてみてください。
本番ではコンパイラでチェックすることはできませんので、「編集して再コンパイル」しないようにしましょう。 初見で解けるように頑張りましょう。
Practice-it の問題を一回で確実に正解できないなら、もっと練習が必要だということです。
(つまり、最初は問題を正解することに集中し、トピックに比較的慣れてきたら、一回で問題を正解することを優先してください)。
-
「改善すべき点」を常にリストアップしておく。
間違えたとき、見落としたとき、混乱していることに気づいたとき、それを書き留めること。
あるいは、2つのリンクされたリストを操作する必要があるリンクされたリストの問題で困難があることに気づくかもしれません。
-
Productive struggle is good; unproductive struggle is bad.
問題に取り組むときに悩むのは普通のことです。 しかし、「非生産的」な闘争ではなく、「生産的」な闘争をするように心がけましょう。 もしあなたが問題に取り組んでいて、(たとえ遅くとも)着実に進歩していると感じているなら、それは「生産的」な闘いです。
しかし、もしあなたが行き詰まっていて、うまくいくかどうかを確かめるために無作為の変更を行うことに頼っているなら、それは「非生産的」な闘いです。 もし「非生産的」な段階になったら、問題を脇に置いて、一休みして、別の問題に取り組んでみたり、誰かに助けを求めたりすべきです。
コレクション問題
二分木探索と挿入問題
ここでいくつかの練習問題を見つけることができます。 http://practiceit.cs.washington.edu/problem/search?keyword=tree+traversals
すべての模擬試験の問題5にもこれらの問題があります。
最終試験では、これらの問題にそれぞれ最大5分(つまり合計10分)しかかけないで、「0%」の精度で取り組むようにしてください。
Collections mystery
Practice-it で地図を含むコレクションミステリーの問題を2つだけ見つけることができました:
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final8/collectionMystery
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final7/collectionMystery
このテーマについて、次のデータ構造が正確にどう動作するか、それぞれの方法がどれほど効率的か、互いにどう異なるかを理解しておくことを提案します。
- ArrayList
- LinkedList
- Stack
- Queue
- TreeSet
- HashSet
- TreeMap
- HashMap
Polymorphism mystery
練習問題はこちらで紹介しています。 http://practiceit.cs.washington.edu/problem/search?keyword=polymorphism&language=
これらの問題に取り組む際には、くだらないミスをしないように、じっくりと時間をかけて取り組む必要があります。 このような問題に取り組むときは、何が起こっているのかをしっかりと概念的に理解してください。
プログラミング問題
二分木とリンクリストの問題については、問題を大まかに難易度で分類しました。
比較級プログラミング
この問題は、クラス全体を実装する必要があります。 http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final8/Office
以下の問題では、compareToメソッドのみを実装する必要があります。
注:practice-it にはこのトピックに関するいくつかの問題がありますが、私はもう少し複雑そうなものを選びました。 practice-itにあるいくつかのComparableの問題はComparableの実装に加えてクラスを拡張することを求めています — あなたはこの四半期のファイナルでそれを要求されることはありません。
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm1/BankAccount
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm3/Food
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm4/MovieRating
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm5/Pokemon
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/comparable/Location
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/midterms/midterm2/Rational
Binary Tree Programming (traversal)
Note: 練習問題にはもっと多くの問題がありますが、良さそうなもの/難しそうなものを厳選しています。 練習用ファイナルも、practice-itと重複する部分もありますが、良い問題があると思います。 上記のように、難しいものを優先的にやっていきましょう。
易~中:
- http://practiceit.cs.washington.edu/problem/view/bjp3/chapter17/e18%2DinOrderList
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/countLeaves
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/height
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/isFull
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/printLevel
中~難。
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/depthSum
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/numEmpty
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/printLeaves
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/evenBranches
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final2/countMultiples
- http://practiceit.cs.washington.edu/problem/view/bjp4/chapter17/e9%2Dequals
2項構成(修正)
上に同じ–練習すると問題が多くなる。 面白いものを選んだ、期末テストの練習は良い問題が重なる、難問を優先して取り組む。
このトピックでは、x = change(x)
パターンをよく理解していることが絶対に必要です。 スタイルガイドにはx = change(x)
に関する注意事項がいくつかあり (主に、やってはいけないことの束をリストアップしたり、いくつかの例を挙げています)、参考になるかもしれません。
免責事項: 「中」「難」問題の区別は、私にとってここでちょっと曖昧になったので、それらが本当に正しく分類されているかどうかはわかりません。
簡単〜中:
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/removeLeaves
- http://practiceit.cs.washington.edu/problem/view/bjp4/chapter17/e20%2DmakePerfect
- この問題は「高」方法を提供します。 ここで “height “メソッドを自分で書いてみてください。 http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/height
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final5/flip
- http://practiceit.cs.washington.edu/problem/view/bjp4/chapter17/e17%2DcombineWith
- http://practiceit.cs.washington.edu/problem/view/bjp3/chapter17/e19%2DevenLevels
中〜難易度。
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/tighten
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/completeToLevel
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/construct
- http://practiceit.cs.washington.edu/problem/view/cs2/sections/binarytrees/limitPathSum
- http://practiceit.cs.washington.edu/problem/view/bjp4/chapter17/e15%2Dtrim
- http://practiceit.cs.washington.edu/problem/view/cs2/exams/finals/final6/removeMatchingLeaves
Linked List programming
Same as a above.
また、リンクリストの問題に取り組んでいるときに、「おや、補助スタックが使えたらいいのに」と思うことがあれば、それはリンクリストの問題を再帰的に解くと楽になることを示すことが多いようです。
再帰的に問題を解くとき、各レベル/各スタックフレームに変数や情報を「格納」することができます。
(暗黙の)スタックを持つことは、必ずしもすべてのリンクされたリストの問題で役に立つとは限らないので、自然に見えない場所に再帰を強制しようとしないこと。 (問題は、実際にそれを行うのが良いアイデアなのかどうかです。)
Easy to Medium:
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/min
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/lastIndexOf
Try this recursively do you want !
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/countDuplicates
リストがどのようにソートされているかを利用する
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/transferFrom
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/equals
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/doubleList
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/switchPairs
中〜ハードです。
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/split
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/removeRange
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/reverse
再帰的に、あるいは反復的にやってみてください!
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/removeRange
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/removeRange
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/takeSmallerFrom
-
http://practiceit.cs.washington.edu/problem/view/cs2/sections/linkedlists/removeAll
Leave a Reply