2012-06-14 11 views
8

夏のために、学校が始まる前にアルゴリズムの学習を始めることもできると決めました。私はクラスがかなりペースが速いと言われています。そのアルゴリズムは軽く取るべきものではありません(私は学期中のすべてのコースの作業でこれを行う傾向があります)。特定の言語を使用した学習アルゴリズムへのアプローチ

私たちが使用する本はAlgorithms (4th Edition)です。とにかく、これは私の問題です。

私は本の3番目の方法ですが、私は自分がしていたことを理解しました。たとえば、私はあまり理解していないセクションを読み、再読み込みします。それで十分自信が持てば、私は同じアルゴリズムをJavaの頭から再現しようとします。しかし、これを行うことで、私のコードは、本の中のものとほぼ同じように見えます。

私は、コードの後に​​コードを記憶しているとは言えません - これらのアルゴリズムを理解するのに役立ちますが、これらのアルゴリズムはJavaでしか実装できないような気がします。私は現時点でJavaだけしか知っていないことに注意してください。

tldr:私はギターの繰り返しを繰り返しているかのようにアルゴリズムを学習しています。しかし、そうすることによって、私はより固執しているように感じるが、私はこれらをjavaでしか実装できないだろう。使用している本が言語固有のものであれば、アルゴリズムをどのくらい正確に知ることができますか?

ありがとうございます。

+0

私は本の使用言語にかかわらずそれらを書きます。それから私はそれらを何かに書き込むかもしれない。またはその逆。 –

+1

近い将来、HaskellやPerlを書く予定がない限り、私は心配しません。ほとんどのプログラミング言語はそれほど違いはなく、基本的なユニバーサル機能セットを共有しています(構文や世界観は変わる傾向があります)。経験があれば、lintのような新しい言語を手に入れることができます。今はアルゴリズムの実際のコンセプトに焦点を当てます。 – Miguel

+0

6月25日までは利用できませんが、[アルゴリズムに関するこのUdacityコース](http://www.udacity.com/overview/Course/cs215)が役立つことがわかります。 – Moses

答えて

9

あなたは、Javaを勉強しているユアセルフ

を混同するので、Javaでそれらを記述しないでください。特にJavaが母国語である場合。一度に2つのことをすぐに学びたいので、今は自分を混乱させないでください。Javaでプログラミングする方法およびをプログラムする方法。 あなたは新しい言語と考え方の両方を学んでいます。あまりにも多くのことをしてはいけませんが、今は別の言語をソースに追加してください。

多様化

後で、またはあなたが同時に別の言語に取ることができることを十分に自信があれば、それは明らかに別のものを学び、本を見ずにアルゴリズムを複製しようとすることは有益であろう。

再現し、我々はあなたがアルゴリズムの派生物を探すことですお勧めできるもの

を拡張します。文書化されている既知の亜種、およびその本を読む必要なしに "基本"バージョンから実装することができるように、バリアントの説明を読むことができる場所。

例えば、あなたの本がリンクリストにあなたを紹介した場合、二重リンクリストまたは循環リンクリストのアルゴリズムを思い付くことができます。または、あなたが明らかに誤解していたオリジナルの概念については何かがあります。

は実際にも、が、彼らはあなたにそれらを表示する前にあなたの本で説明したアルゴリズムを実装しようと読んオン後

私はあなたをお勧めします、まず試してみてください。 Sedgewickのアルゴリズムは標準的な実装と見なされ、標準的な青写真とみなされています。実装に至るまでのセクションを読んだだけの場合(うまくいけば最初に表示されます)、その本に座って、それをどうやって行うことができるかを調べてみてください。まったくそのことができないなら、あなたはあなたの本をあまりにも先に進んでいるので、最初からやり直してやり直すべきです。

+0

ありがとう、私は本の例を見る前に実装しようと思っています。 – user1164937

+0

@ user1164937:私が学んだとき、私たちは基本的に実装を見せていませんでした。私たちはいつもコーディングしていました。ブロックされたら、アシスタントに尋ねるでしょう(99%の時間が来て、コードを読んで、笑って、間違っていたり、わからなかったりして、私たちに "RTFM"と言ってしまったのですが、それは厳しいですが、それはかなり良いアプローチです)実装を見た唯一の時間はグループ講義をして、プログラムをライブで入力している間、オンスクリーンのエディタを起動します。メモを取ることは禁じられていませんでしたが、しないように勧めました。最初は本が眉をひそめていた。 – haylem

+0

@ user1164937:それはあなたを助けてくれることを嬉しく思います。後であなたがそれを基にしたいと思ったところで私たちにメモを残してください:) – haylem

0

あなたは、アルゴリズムの背後にある数学をどれだけ知っているかは言いません。それはコードであなたの施設を決定する上で重要です。

セジウィックの本は非常に良いです。私は自由にいくつかを選んで、 "数値的なレシピ"や "数値的な方法が働いている"のような他の本もチェックします。別の視点があなたのために明確にできるかどうかを見てください。

もしあなたがJavaのコピーを十分に使い果たしていないと感じたら、Pythonや純粋に機能的な別の言語に翻訳できるかどうかを見てください。あなたがそれを行うことができれば、あなたはそれを持っていることを知っているでしょう。

0

私は実際に別の言語に移植できることを検証するために別の言語を習得しようとします(JavaScriptは正面とバックエンドでシンプルで便利なのでJavaScriptになります)より多くの言語にとらわれない。ほとんどの言語では、コードはかなり似ています。非常に注意する唯一のことは、言語の一部(ジェネリックやJavaのイテレータなど)に依存している場合で、別の言語では使用できず、理解にギャップが生じることがあります。

実際にアルゴリズムを理解しているかどうかを確認するもう1つの方法は、問題をわずかに変更し、アルゴリズムを調整して動作させることです。たとえば、ソートアルゴリズムの場合は、グラフアルゴリズムであれば、グラフを有向グラフにして変更する方法を確認してください。

2

アルゴリズムに関しては、基本的に言語に依存しません。 C、Python、その他の言語でSedgewickの例題をやってしまうことを止めるものはありません。

本当に他の言語が分からない場合は、Javaに集中してください。確かに、少し繰り返すが、それらのビットは良い方法であなたの頭の中に固執し、テスト時間来る、あなたは情報に喜んでいるでしょう。

プログラムの作成に必要な考え方は、通常の考え方とは大きく異なるため、今は面白い立場にあります。それに、文法や句読点などを変えて全く新しい言語を学んでいるという事実を加えてください。覚えておくべきたくさんのビットとピースがあるので、練習は本当に完璧です。

ああ、アルゴリズムで練習したい場合は、project eulercode kataと他のチャレンジサイトを試してみてください。これらの小さな課題は、言語に慣れ、必要な考え方に慣れ親しむのに役立ちます。

1

最初に、コード作成の方法を学ぶための最初のステップを踏みとどめています。私はあなたがすでに夏の間に先を見始めることによってあなたの同輩より先にいると言います。

Javaでアルゴリズムを実装することしかできないという懸念がある限り、すでに問題はないことが実証されています。あなたが早く始めるために情熱を持っているように聞こえるので、多言語でソリューションを実装するのに問題はありません。さらに、C/C++(JavaとC#のような)のような構文のような言語のほとんどは、知識をシームレスに翻訳できるほど類似しています。

私が与えることができる最良のアドバイスは、コード、コード、コードです!実際にそれらを実装するアルゴリズムについて読むだけではありません。

0

私は、繰り返しの後に のギター反復をすることを学んでいるかのようにアルゴリズムを学習しています。

あなたはアルゴリズムを学習していません。あなたは繰り返しを学んでいます。 2つの異なること。アルゴリズムブックによるプログラミング言語の使用は第2の要因である。それは指示の手段であり、実装の詳細です。あなたが集中しなければならない何

は、構造、ロジックやアルゴリズムの数学的特性理解の上で(そしておそらくそれに関連するデータ構造体(複数可)。)あなたの焦点がどうあるべきかだ

しかし、そうすることで、私はもっと固定されているように感じることができます。 これをjavaで実装することができます。

しかし、これは、アルゴリズムがどのようにコード化されているか(この特定のケースではJava)に焦点を当てているからです。実装の詳細に焦点を当てています。

あなたが運転を学ぶとき、あなたはHonda CivicまたはNissan Maximaを運転する方法を学ぶことに集中しません。あなたは、運転の本質、親指のルール、必要な予防措置、車の運転を支配する法律を学びます。

学習アルゴリズムと同じです。あなたは "Algorithms in Java"を学ぶだけではありません。まずアルゴリズムを学びます。車両は非常に特殊なケースはありませんが、二次的なものです。

あなたは、アルゴリズムが何、どのよう理由に注力する必要があります。 のような質問 "どのように/それはなぜ機能するのですか?"であり、最も重要なのは「パフォーマンスの特性は何ですか?」ということです。これは注目すべきものです。

すべての良いアルゴリズムの本(Sedgewickの付属)はそのメッセージを運びます。それはあなたが集中すべきものです。あなたがその再焦点に到達する方法は、個人の学習戦略の機能です。

使用している本が言語固有の場合、どのくらい正確にアルゴリズムを学習しますか?

言語に焦点を当てない。構造に焦点を当て、関連するデータ構造、不変条件、事前条件および事後条件に焦点を当てる。 Big-O(またはBig-Omicron)、Little-O/Little-OmicronおよびOmega表記で説明されている漸近的な振る舞いを理解する。

コーディングアルゴリズムを使用してJavaでプログラミングするのではなく、アルゴリズムを学習しています。

この精神的な飛躍ができない場合は、十分な練習または抽象解析がないことを意味します。それは侮辱ではなく、観察とアドバイスです。コーディングでは、プログラミング言語の使用は、コンピュータ科学の焦点である計算の数学的分析(アルゴリズムの一部である)に典型的には二次的です。)

NOTE私は10年以上にわたってのJavaをやった、と私は仕事のためにそれが好きなのに、私は強くそれはプログラミングやCSのトピックを学習するための貧弱なツールであると考えています。

A)CやAdaのような手続き型システムレベルのプログラミング言語、または高水準の疑似アセンブラシミュレータ、またはB)LispやHaskellのような関数型言語のいずれかでアルゴリズムを学ぶ方が良い。

純粋な/疑似純粋なオブジェクト指向言語のオブジェクト指向の機能は、単に途中で取得します。

アルゴリズムは、how(操作上)および/またはwhat(数学的)を記述する性質を持つ数学的構造です。前者は手続き型プログラミング、後者は関数型プログラミングに完全に適しています。

+0

私は類推が私のところでは貧弱だと思いますが、私が意味したのは、私が概念を把握しようとしていたことです。私がする必要があれば再読み込み(私はいくつかのセクションを何度もクリックするまで何度も読み返しました)。私が知っている唯一の言語なので、私がjavaで実装することによって行う "自分の知識をテストする"と同様に。私が最初に正しく実装することになっても、私は本当に長期的なものにしたいので、もう一度やります。 – user1164937

+0

また、私はハスケルに興味があります。私が第二言語を考えていた時はとてもそうでした。私はそれがまったく違うボールパークだと聞いてから機能的な言語が傷ついてはいけないという考えがあるので、私はJavaと混乱しないだろう(私は学期の価値がある)。どう思いますか? – user1164937

+0

"あなたはどう思いますか?"フォーカス。 IMO、あなたが1つの言語(Java)を知っていれば、他の言語に多様化することなく自分でアルゴリズムを学習することに自信を持っていると思います。自然に才能のある学習アルゴリズム(実際には実際にはそれらを実際に学習すること)を除いて、学生はある程度のプログラミング実践(理想的には複数の言語で)を必要とします。学習アルゴリズムに従事する前に、例えば、Java、C、Pythonなどで半ば複雑なプログラムを書くことができるはずです。 IMO、それは代数のない微積分を習うようなものです。 –

関連する問題