- ベストアンサー
アルゴリズムが全くわからない
「Javaによるはじめてのアルゴリズム」や、「Cプログラマのためのアルゴリズムとデータ構造」という本を買ったのですが、 数式や図表が難しくて理解できません。 (中学並の数学の知識しかないので・・) 私のような初心者でもアルゴリズムが理解できるようになるような、 数学やアルゴリズムの、本やウェブサイトなどがあれば教えてください。 方法論とかでも構いません。 よろしくお願いします。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
私が昔アルゴリズムの存在を知ったのは、高一に独学でプログラムを覚えて2年後ぐらいでした。 なので、有名なアルゴリズムを知らなくてもプログラムを組むことは出来ます。他の人のプログラムを見たり触ったりしている間に自然と基本的なアルゴリズムを知らずに知らずに理解していた様で、アルゴリズムの本を見ると基本的なものは既に身に付いていました。 >(中学並の数学の知識しかないので・・) とありますが、アルゴリズムは考え方なので難しい数学を必要とするものはごく一部です。中学生並みの知識で十分出来ますよ。 ちなみにアルゴリズムのどのあたりでつまずいてますか? >数式や図表が難しくて理解できません。 ってあるのですが、基本的アルゴリズムに難しい数式って出てきます? つまずいてるポイントを学ぶべきか、後でいいよ~ってレベルなのか判断するのに教えてください。
その他の回答 (10)
- zwi
- ベストアンサー率56% (730/1282)
なんどもすいません。 主にC言語系ですがいろんな種類のアルゴリズムのサイトを紹介しておきます。 http://www5c.biglobe.ne.jp/~ecb/algorithm/algorithm00.html http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258278/?ST=develop http://www.ic-net.or.jp/home/takaken/pz/index.html http://www.codereading.com/algo_and_ds/ http://www.geocities.jp/ky_webid/algorithm/index.html http://www2.starcat.ne.jp/~fussy/algo/index.htm とりあえず興味の持てるものと使いそうな物だけを理解するだけで良いです。例のごとく難しいのはスルーで。
お礼
ありがとうございます。助かります でも今のレベルでは使いこなせないかもしれないです^^;
- zwi
- ベストアンサー率56% (730/1282)
あっ忘れてた。 ソースを見るですが、昔はプログラミングの雑誌が溢れていたんですが、今では「日経ソフトウェア」程度ですね。 >「14歳からはじめるC言語わくわくプログラミング」 これは違う気が・・・。 プログラミングのソースが載っているサイトを紹介しておきます。 http://codezine.jp/ http://itpro.nikkeibp.co.jp/develop/index.html あとはオープンソースで公開されているソースで興味のあるのを探してみると良いですよ。
お礼
おお、サイト教えてくださってありがとうございます。 どちらも行ったことあるけど忘れてました^^; オープンソースは中級プログラマくらいにならないと理解できなそうなので まずは本読んで頑張ります。 それではこの辺で質問を締め切らせてください。 皆さん、たくさんのお返事ありがとうございました。 とても参考になりました♪
- zwi
- ベストアンサー率56% (730/1282)
うーん。nCr(漸化式)や、モンテカルロ法なんてプログラム組む一部の人しか使わないしなぁ。もっと一般的なアルゴリズムを理解するだけで良いです。もし必要になったら覚えれば良い事なのですから。 本に書かれているアルゴリズムは、物事を合理的に処理するための定番テクニックを集めた物ですので、必要ない人にはまったく無用なものが混じっています。よく使うもの意外はどんな場合に使うものかだけを知っていれば良い程度ですので、適当にスルーしちゃってください。
- koko_u_u
- ベストアンサー率18% (216/1139)
>アルゴリズムの理解を抜きにして、実践的なプログラムを組むのは難しいと思われますが 利用するだけなら、その実装を理解していなくてもプログラムを組むことはできます。 プログラミングをしていく中で、どうしてもパフォーマンスが出ない、などの問題に直面してから、 その問題に対処するためにアルゴリズムを勉強しはじめれば十分です。
お礼
そういえばプログラミング診断室にも「ライブラリを使って楽をしまくれ!」と書いてあったような気がします。 koko_u_uさんのおっしゃる通り、まずはアルゴリズムよりも、 成果物を作ることから始めていきたいと思います。 お返事ありがとうございました。
- yyr446
- ベストアンサー率65% (870/1330)
No5のyyr446です。 確かに、nCrやlog、やln、sin、cos、tanやΣや微分・積分とかは、中学校で習いませんね、一方アルゴリズムの本を見ると上記はもちろん行列や行列式、ベクトルに関数の級数展開にいたるまで、理科系の大学生でないと理解困難な数学記号のオンパレードです。 それらは、数学的なアルゴリズムの解析に沿ってプログラムのアルゴリズムを解説しようとしているのか、電子計算機的に数学的な課題を解くためのアルゴリズムの解説です。よって、数学を知らない人は解らなくて当然です。 プログラムを作ろうとしている初心者が学ぶべきアルゴリズムは、もっと基本的な流れの記述についてだと思います。 選んだ本が×だったと思いましょう。
お礼
そうですよね。 基本的な流れを理解するために、何か作ってみようと思います。 私はどちらかというとモノを作るよりも、理論から入っていくタイプです。(囲碁でも詰碁ばかりやってました@@) しかし、皆さんのアドバイスを読んで、何か具体的なモノを作っていくほうが、プログラミングを理解できるのではないかな、という気がしてきました。 とりあえず以下のような実践的な本を中心に買いたいと思います。 実践的な本がゲームしか見つからなかったので少し偏ってしまいましたが。以下の本を買うことに決めました。 (というか和書で仕事や実務に使えそうなソフトの作り方が載ってる本って無いような。洋書探せばあるのかな?) 「14歳からはじめるC言語わくわくプログラミング」 「改定ゲーム作りで学ぶJavaプログラミング」 「Java将棋のアルゴリズム」 「リバーシのアルゴリズム」 「日経ソフトウェア」(試しに買ってみます) 以下の本は、今の私のレベルでは理解できなそう、もしくは実践的でない、などの理由で購入を見送ろうと思います。 「ゲームプログラマになる前に覚える技術」 「アクションゲームマニアックス(類書含む)」 「実践Cプログラミング」 「プログラミング言語C 第2版 ANSI規格準拠」 「Cプログラミング専門課程」 「プロダクティブ・プログラマ -プログラマのための生産性向上術」 「C言語ポインタ完全制覇 」 「実例で学ぶゲーム3D数学」 数学はNHK高校講座やウェブサイトでも見て頑張ります。 駄目だったら本でも買います。
- yyr446
- ベストアンサー率65% (870/1330)
例えば、ソートのアルゴリズムと言った場合、 2分枝方とかクイックソートとかバブルソートとか、コンピューター古代 より様々なアルゴリズムが考えられ、いろいろな言語向きにサンプルされた 書籍やWebサイトが多数あります。 プログラムを作るとき、これらのアルゴリズムを完全に知らなければならないわけではありません。(資格試験を受けるときは別にして..) 一方、全くアルゴリズムとか処理の概念とかの知識や経験がないと、効率、メンテナンス容易性、汎用性の高いプログラムは作れません。 アルゴリズムの学習というより、むしろ将棋や囲碁の定石を覚えるような感覚で、簡単な処理の流れを覚えてしまいましょう。その際言語はあまり関係ありません。
お礼
アルゴリズムの全体像・流れを理解できるように頑張ります。 あと、前レスのnda23さんの言うように、 図表や言葉で表現できるようになることも大切ですね。 ちなみに囲碁は一応得意です@@ お返事ありがとうございました。
- nekonoke99
- ベストアンサー率29% (5/17)
偶然にも『日経ソフトウェア』7月号がアルゴリズムの別冊付録つきででているようです。 http://itpro.nikkeibp.co.jp/NSW/index.html ただ8月号が6月23日に出ると思いますので(汗
お礼
プログラミングの雑誌なんかもあるんですね。 浅く広く学べそうなので、何をやっていいかわからない 初心者に向いてそうですね。 毎月購読するのはお金かかりそうですが、試しに1冊買ってみます。 お返事ありがとうございました。
- koko_u_u
- ベストアンサー率18% (216/1139)
C はさて置き、最近の Java や C# のようなプログラミング言語なら、 既にひととおりライブラリが揃っているので、例えば文字列探索のアルゴリズムを 自前で実装する必要はありません。 標準ライブラリになくても、ある程度有名なアルゴリズムであれば、 誰がが実装して公開しているものを拝借すれば大抵解決します。 プログラミング初心者であると言うなら、教科書に載っているようなアルゴリズムの話は置いておいて、 まずは Java なりで一通りプログラムが組めるようになるのが先だと思われます。
お礼
おっしゃるとおりですが、私はまだ一通りのプログラムを組めるだけの技術はありませんので、アルゴリズムを勉強しているわけです。 アルゴリズムの理解を抜きにして、実践的なプログラムを組むのは難しいと思われますが、何かいいウェブサイトや書籍など、 ご存知でしたら教えていただけると助かります。 お返事ありがとうございました。
- nda23
- ベストアンサー率54% (777/1415)
私はよく、初心者には「子供に使いを頼むには?」と振ります。 大人だと、「おい、タバコ買って来てくれ」で、命じた人の好み、 何処に売っているか、そこで売り切れなら近くの別の場所、いくらか などは分かっているので、説明をしないのですが、相手が子供だと、 どうなるでしょう。「○○を隣の自動販売機で買って来てくれ。そこが 売り切れの場合は角のコンビにで買って来てくれ。500円渡すので、 おつりを200円貰ってくるように。」という具合でしょうか。これも 立派なアルゴリズムです。目的は「タバコ○○を入手する」ことで、 それ以降は入手するための手段を連続して説明しています。 この「結果を得るため」に「手段の順序と、使い分けを説明する」が アルゴリズムです。数式や、何やらとかの言語、××という図式を 理解しようとするのは本末転倒で、考え方を先ず言葉で表現できる というのが大事なのです。プロでベテランと言われる経験年数を誇る 人でも、これが下手というのがイッパイいます。
お礼
つまり、まず図表や文章などでアルゴリズムの全体のイメージを表現できるようになることが、アルゴリズムを理解する第一歩ということですかね? 図表や文章をアウトプットする能力、私あまり無いですけど、 少しづつ、アウトプット能力が上達するように、努力しようと思います。 お返事ありがとうございました。
- mizutaki
- ベストアンサー率33% (111/333)
一応かなり親切に教えてるのは「アルゴリズムの絵本」でしょうかね。 下手にアルゴリズムと書いてる本は、専門的な部分へ入る為の本が多かったりしますけど、こちらは十分初心者向けです。 アルゴリズムは流れで、処理をする為の構造ですので、中学生の知識でも分かる人は十分分かる。 もしかしたら、アルゴリズムの概念とかプログラミングの感覚というのを理解していないだけかも知れないですよ。 持っている知識量以外に、プログラムの経験や何の言語の知識があるのかが分かるともう少し最適なアドバイスが出来るかもしれないです。
お礼
プログラミングも初心者レベルです。 アルゴリズムを学べばプログラミングが上達するのではないかと思い、 アルゴリズムの本を買って勉強を始めようと思ったのですが、 予想以上に難しくてお手上げ状態です。 「アルゴリズムの絵本」 読む候補に入れておきたいと思います。 お返事ありがとうございました。
お礼
なるほど。それほどアルゴリズムを意識しなくても、 プログラムって組めるものなんですか。 >他の人のプログラムを見たり触ったり 私も見たり触ったりしたいんですけど… たとえば「プログラミング診断室」のウェブ版の1・2章を少し読みましたが、解説を読んでもソースの意図がわかりませんでした。 皆さんこういうの普通に理解できるもんですかね? http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.1.2.html >ちなみにアルゴリズムのどのあたりでつまずいてますか? たとえば、「解きながら学ぶC言語」の8-8の↓のような問題です。 ---------------------------------------------------- 異なるn個の整数からr個の整数を取り出す組み合わせの数。Crを求める関を作成せよ。なお、nCrは以下のように定義される。 nCr = n-1Cr-1 + n-1C (ただし、nC0 = nCn = 1,nC1 = n) ---------------------------------------------------- 問題の意味はわかるんですけど、nCrという記号が突然出てきて、 解説がほとんどないので、よくわかりませんでした。 「定本アルゴリズムとデータ構造」ではlog2とかOとかですね。 「Javaによるはじめてのアルゴリズム」に至っては、 ウォーミングアップという章で、 いきなりnCr(漸化式)や、モンテカルロ法などが出てきて、 本当に初心者向けなのかこの本は…という感じでした。 もっと、わかりやすい説明で、実践的な本があればいいのになあと思います。