• ベストアンサー

アルゴリズムが全くわからない

「Javaによるはじめてのアルゴリズム」や、「Cプログラマのためのアルゴリズムとデータ構造」という本を買ったのですが、 数式や図表が難しくて理解できません。 (中学並の数学の知識しかないので・・) 私のような初心者でもアルゴリズムが理解できるようになるような、 数学やアルゴリズムの、本やウェブサイトなどがあれば教えてください。 方法論とかでも構いません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

私が昔アルゴリズムの存在を知ったのは、高一に独学でプログラムを覚えて2年後ぐらいでした。 なので、有名なアルゴリズムを知らなくてもプログラムを組むことは出来ます。他の人のプログラムを見たり触ったりしている間に自然と基本的なアルゴリズムを知らずに知らずに理解していた様で、アルゴリズムの本を見ると基本的なものは既に身に付いていました。 >(中学並の数学の知識しかないので・・) とありますが、アルゴリズムは考え方なので難しい数学を必要とするものはごく一部です。中学生並みの知識で十分出来ますよ。 ちなみにアルゴリズムのどのあたりでつまずいてますか? >数式や図表が難しくて理解できません。 ってあるのですが、基本的アルゴリズムに難しい数式って出てきます? つまずいてるポイントを学ぶべきか、後でいいよ~ってレベルなのか判断するのに教えてください。

hiyokko7
質問者

お礼

なるほど。それほどアルゴリズムを意識しなくても、 プログラムって組めるものなんですか。 >他の人のプログラムを見たり触ったり 私も見たり触ったりしたいんですけど… たとえば「プログラミング診断室」のウェブ版の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(漸化式)や、モンテカルロ法などが出てきて、 本当に初心者向けなのかこの本は…という感じでした。 もっと、わかりやすい説明で、実践的な本があればいいのになあと思います。

その他の回答 (10)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.11

なんどもすいません。 主に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 とりあえず興味の持てるものと使いそうな物だけを理解するだけで良いです。例のごとく難しいのはスルーで。

hiyokko7
質問者

お礼

ありがとうございます。助かります でも今のレベルでは使いこなせないかもしれないです^^;

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.10

あっ忘れてた。 ソースを見るですが、昔はプログラミングの雑誌が溢れていたんですが、今では「日経ソフトウェア」程度ですね。 >「14歳からはじめるC言語わくわくプログラミング」 これは違う気が・・・。 プログラミングのソースが載っているサイトを紹介しておきます。 http://codezine.jp/ http://itpro.nikkeibp.co.jp/develop/index.html あとはオープンソースで公開されているソースで興味のあるのを探してみると良いですよ。

hiyokko7
質問者

お礼

おお、サイト教えてくださってありがとうございます。 どちらも行ったことあるけど忘れてました^^; オープンソースは中級プログラマくらいにならないと理解できなそうなので まずは本読んで頑張ります。 それではこの辺で質問を締め切らせてください。 皆さん、たくさんのお返事ありがとうございました。 とても参考になりました♪

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.9

うーん。nCr(漸化式)や、モンテカルロ法なんてプログラム組む一部の人しか使わないしなぁ。もっと一般的なアルゴリズムを理解するだけで良いです。もし必要になったら覚えれば良い事なのですから。 本に書かれているアルゴリズムは、物事を合理的に処理するための定番テクニックを集めた物ですので、必要ない人にはまったく無用なものが混じっています。よく使うもの意外はどんな場合に使うものかだけを知っていれば良い程度ですので、適当にスルーしちゃってください。

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.8

>アルゴリズムの理解を抜きにして、実践的なプログラムを組むのは難しいと思われますが 利用するだけなら、その実装を理解していなくてもプログラムを組むことはできます。 プログラミングをしていく中で、どうしてもパフォーマンスが出ない、などの問題に直面してから、 その問題に対処するためにアルゴリズムを勉強しはじめれば十分です。

hiyokko7
質問者

お礼

そういえばプログラミング診断室にも「ライブラリを使って楽をしまくれ!」と書いてあったような気がします。 koko_u_uさんのおっしゃる通り、まずはアルゴリズムよりも、 成果物を作ることから始めていきたいと思います。 お返事ありがとうございました。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.7

No5のyyr446です。 確かに、nCrやlog、やln、sin、cos、tanやΣや微分・積分とかは、中学校で習いませんね、一方アルゴリズムの本を見ると上記はもちろん行列や行列式、ベクトルに関数の級数展開にいたるまで、理科系の大学生でないと理解困難な数学記号のオンパレードです。 それらは、数学的なアルゴリズムの解析に沿ってプログラムのアルゴリズムを解説しようとしているのか、電子計算機的に数学的な課題を解くためのアルゴリズムの解説です。よって、数学を知らない人は解らなくて当然です。 プログラムを作ろうとしている初心者が学ぶべきアルゴリズムは、もっと基本的な流れの記述についてだと思います。 選んだ本が×だったと思いましょう。

hiyokko7
質問者

お礼

そうですよね。 基本的な流れを理解するために、何か作ってみようと思います。 私はどちらかというとモノを作るよりも、理論から入っていくタイプです。(囲碁でも詰碁ばかりやってました@@) しかし、皆さんのアドバイスを読んで、何か具体的なモノを作っていくほうが、プログラミングを理解できるのではないかな、という気がしてきました。 とりあえず以下のような実践的な本を中心に買いたいと思います。 実践的な本がゲームしか見つからなかったので少し偏ってしまいましたが。以下の本を買うことに決めました。 (というか和書で仕事や実務に使えそうなソフトの作り方が載ってる本って無いような。洋書探せばあるのかな?) 「14歳からはじめるC言語わくわくプログラミング」 「改定ゲーム作りで学ぶJavaプログラミング」 「Java将棋のアルゴリズム」 「リバーシのアルゴリズム」 「日経ソフトウェア」(試しに買ってみます) 以下の本は、今の私のレベルでは理解できなそう、もしくは実践的でない、などの理由で購入を見送ろうと思います。 「ゲームプログラマになる前に覚える技術」 「アクションゲームマニアックス(類書含む)」 「実践Cプログラミング」 「プログラミング言語C 第2版 ANSI規格準拠」 「Cプログラミング専門課程」 「プロダクティブ・プログラマ -プログラマのための生産性向上術」 「C言語ポインタ完全制覇 」 「実例で学ぶゲーム3D数学」 数学はNHK高校講座やウェブサイトでも見て頑張ります。 駄目だったら本でも買います。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.5

例えば、ソートのアルゴリズムと言った場合、 2分枝方とかクイックソートとかバブルソートとか、コンピューター古代 より様々なアルゴリズムが考えられ、いろいろな言語向きにサンプルされた 書籍やWebサイトが多数あります。 プログラムを作るとき、これらのアルゴリズムを完全に知らなければならないわけではありません。(資格試験を受けるときは別にして..) 一方、全くアルゴリズムとか処理の概念とかの知識や経験がないと、効率、メンテナンス容易性、汎用性の高いプログラムは作れません。 アルゴリズムの学習というより、むしろ将棋や囲碁の定石を覚えるような感覚で、簡単な処理の流れを覚えてしまいましょう。その際言語はあまり関係ありません。

hiyokko7
質問者

お礼

アルゴリズムの全体像・流れを理解できるように頑張ります。 あと、前レスのnda23さんの言うように、 図表や言葉で表現できるようになることも大切ですね。 ちなみに囲碁は一応得意です@@ お返事ありがとうございました。

回答No.4

偶然にも『日経ソフトウェア』7月号がアルゴリズムの別冊付録つきででているようです。 http://itpro.nikkeibp.co.jp/NSW/index.html ただ8月号が6月23日に出ると思いますので(汗

hiyokko7
質問者

お礼

プログラミングの雑誌なんかもあるんですね。 浅く広く学べそうなので、何をやっていいかわからない 初心者に向いてそうですね。 毎月購読するのはお金かかりそうですが、試しに1冊買ってみます。 お返事ありがとうございました。

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.3

C はさて置き、最近の Java や C# のようなプログラミング言語なら、 既にひととおりライブラリが揃っているので、例えば文字列探索のアルゴリズムを 自前で実装する必要はありません。 標準ライブラリになくても、ある程度有名なアルゴリズムであれば、 誰がが実装して公開しているものを拝借すれば大抵解決します。 プログラミング初心者であると言うなら、教科書に載っているようなアルゴリズムの話は置いておいて、 まずは Java なりで一通りプログラムが組めるようになるのが先だと思われます。

hiyokko7
質問者

お礼

おっしゃるとおりですが、私はまだ一通りのプログラムを組めるだけの技術はありませんので、アルゴリズムを勉強しているわけです。 アルゴリズムの理解を抜きにして、実践的なプログラムを組むのは難しいと思われますが、何かいいウェブサイトや書籍など、 ご存知でしたら教えていただけると助かります。 お返事ありがとうございました。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

私はよく、初心者には「子供に使いを頼むには?」と振ります。 大人だと、「おい、タバコ買って来てくれ」で、命じた人の好み、 何処に売っているか、そこで売り切れなら近くの別の場所、いくらか などは分かっているので、説明をしないのですが、相手が子供だと、 どうなるでしょう。「○○を隣の自動販売機で買って来てくれ。そこが 売り切れの場合は角のコンビにで買って来てくれ。500円渡すので、 おつりを200円貰ってくるように。」という具合でしょうか。これも 立派なアルゴリズムです。目的は「タバコ○○を入手する」ことで、 それ以降は入手するための手段を連続して説明しています。 この「結果を得るため」に「手段の順序と、使い分けを説明する」が アルゴリズムです。数式や、何やらとかの言語、××という図式を 理解しようとするのは本末転倒で、考え方を先ず言葉で表現できる というのが大事なのです。プロでベテランと言われる経験年数を誇る 人でも、これが下手というのがイッパイいます。

hiyokko7
質問者

お礼

つまり、まず図表や文章などでアルゴリズムの全体のイメージを表現できるようになることが、アルゴリズムを理解する第一歩ということですかね? 図表や文章をアウトプットする能力、私あまり無いですけど、 少しづつ、アウトプット能力が上達するように、努力しようと思います。 お返事ありがとうございました。

  • mizutaki
  • ベストアンサー率33% (111/333)
回答No.1

一応かなり親切に教えてるのは「アルゴリズムの絵本」でしょうかね。 下手にアルゴリズムと書いてる本は、専門的な部分へ入る為の本が多かったりしますけど、こちらは十分初心者向けです。 アルゴリズムは流れで、処理をする為の構造ですので、中学生の知識でも分かる人は十分分かる。 もしかしたら、アルゴリズムの概念とかプログラミングの感覚というのを理解していないだけかも知れないですよ。 持っている知識量以外に、プログラムの経験や何の言語の知識があるのかが分かるともう少し最適なアドバイスが出来るかもしれないです。

hiyokko7
質問者

お礼

プログラミングも初心者レベルです。 アルゴリズムを学べばプログラミングが上達するのではないかと思い、 アルゴリズムの本を買って勉強を始めようと思ったのですが、 予想以上に難しくてお手上げ状態です。 「アルゴリズムの絵本」 読む候補に入れておきたいと思います。 お返事ありがとうございました。

関連するQ&A

  • アルゴリズムについて

    今、c言語のアルゴリズムの勉強をしています。 入門書が3、4冊を読みました。c言語によるアルゴリズム辞典っていう本を見たら、ほんの少ししかならないです。 将来、プログラマになりたいです。アルゴリズムがプログラマにとって非常に重要ですので。そこで今プログラムの仕事をしている方に聞きたいです。アルゴリズムってどの程度勉強したらいいですか?入門書の場合は、精精木構造までですね。

  • アルゴリズムとは何なのでしょうか?

    学校でアルゴリズムを習っているのですが、 アルゴリズムとは何なのでしょうか? 教科書として、 「新・明解 C言語によるアルゴリズムとデータ構造」という本を買ったのですが、 内容的には以前C言語を勉強するために読んだC言語の勉強本とあまり変わらないような気がします。 スタックやキュー、ソートに検索など確かにC言語を教わる本には書いてないことはありましたが、 要するにC言語の別の面ということだと思いました。 意味的にはアルゴリズムは数学でいう計算方法、 つまり答えを求めるための色々な方法というように考えたのですが、 実際アルゴリズムとはどのようなものと理解すればいいのでしょうか?

  • アルゴリズム論の参考書

    アルゴリズム論のよい文献をさがしています。データベース論ではなくてNP困難や貪欲アルゴリズム、最適化論、ヒューリスティック、離散数学に焦点を当てた実用的かつ理論的な参考書を探しています。プログラマをやっているので、コードを書く前に(同じことを実行するが異なったコードスタイルの関数等への)スピードを論理的に比較したり、輸送問題やスケジューリング論が理解できるようになるのが主な目的です。初心者向けと上級者向け、分けて紹介していただければ幸いです。 よろしくお願いします。

  • プログラマにとって「アルゴリズム」や「データ構造」の知識は必須ですか?

    最近の、いわゆるパッケージソフトウェアや、Webアプリケーションの開発においては、 必要なコンポーネントをインポートして部品を組み立てていくイメージで コードを書いていくというのが主流だと思います。 ほとんどのプログラミング言語には、すでに便利な関数やパッケージが用意されており、「アルゴリズム」や「データ構造」といった知識はあまり必要になりません。 例えば、データをソートしたい場合、クイックソートなどで自分で実装しなくても、すでにソート関数が用意されているので、その関数を使用すれば良いわけです。 そのような環境においても、プログラマにとって「アルゴリズム」や「データ構造」の知識はやはり必須ですか? 時々、 ・「優先順位付き待ち行列」くらいは、スラスラ実装できなければ、プログラマとしては半人前 ・「離散数学」をしっかり理解していないと、プログラマとしては致命的 などという話も聞くのですが、皆さんの意見を聞かせてください。

    • ベストアンサー
    • Java
  • プログラミングのための数学

    現在、初級SE(Web系)として仕事をしています。データ構造やアルゴリズムの勉強をしていると、わからない数式がたくさんでてきてしまいます。高校の1年ぐらいの数学の知識しかありません。また、集合知などAIや行動経済学なども自分のキャリアで必要になってきますし、簿記などの会社経営の初歩の初歩などの知識も必要になります。 この際、数学ちゃんと勉強しようと思うのですが、大学入試向けのの参考書をやりつくせば、データ構造やアルゴリズムでの本にでてくるようなこともわかるようになるでしょうか?大学入試向けの勉強では何が足りていて、何が足りないでしょうか? また、物理も勉強した方がいいでしょうか?現在のところ、ゲームプログラマや組み込みシステムのプログラミングまでの知識は必要ありません。 アドバイスをいただければ幸いです。

  • アルゴリズムの本

    「やさしいJAVA」を読んで勉強中ですが。 JAVAのアルゴリズムの本も買って同時進行で勉強したいのですが、素人、入門者でも理解できるような本を紹介していただけないでしょうか、お願いします。

  • データ構造とアルゴリズムの違いについて教えて頂けないでしょうか。

    データ構造とアルゴリズムの違いについて教えて頂けないでしょうか。 データ構造とアルゴリズムについて学習しています。 (質問事項) ・データ構造とアルゴリズムの違いについて教えて頂けないでしょうか。 詳細に教えて頂けると大変助かります。 (私の現状) たとえば、データ構造は、単純なものでは、配列やコレクション、2分木などの構造で、アルゴリズムは2分木探索の実装方法だと思っています。 データ構造とアルゴリズムについては初心者です。 (現在、就職活動中で、これらを学ぶ必要がありご質問させて頂いています) どうか、皆様、教えて頂いた情報を最大限に活用させていただきますので、(皆様にとってはくだらない質問かもしれませんが…)どうぞよろしくお願いいたします。

  • 数学のアルゴリズムについて

    初心者なので恥ずかしいのですが、コンピュータは四則演算から二次方程式、など中高で習う基礎的な数学をどのようにアルゴリズムで処理しているのでしょうか?何かいいサイト・本等もあればご教授頂きたいです。

  • アルゴリズム関連の奨めサイトは?

    理解力が乏しくアルゴリズムが苦手で困っております。 せめて、人並みに理解出来る様になりたいと思います。 下記に詳しい方、教えていただけませんでしょうか? 1、数学の基礎知識が無くても、(中1レベル)理解出来るサイト   てありませんでしょうか? 2、数学が苦手な方でアルゴリズムが苦手では無いと言う方   どのように、学習されましたか? 3、アルゴリズムを考えるとき、大抵頭の中で問題が釣り糸の様に   絡みあってしまいます、アドバイスがあればお願いします。 4、アルゴリズムや数学力をつける訓練法は? 5、記憶力・理解力共に平均以下ですが、一度理解できれば、その応用   は周りからも認められております。   こういった特徴は、プロセスに問題があるのでしょうか? 6、その他、アルゴリズムを理解する為に解かりやすく為になる   情報があれば教えてください。(脳の話などでも結構です) ※1つでもアドバイス頂けると嬉しいです。

  • アルゴリズムの書籍

    こんばんは。 何とか就職出来て、今はSEです。 実は今研修でアルゴリズムをやっていますが、 アルゴリズムの記号は分かっていても、 流れ図が上手く作成できず、テストではいつも破滅的な点数を取っています。 昨日、講師の方から、『秘伝のアルゴリズム』という本が大変詳しいのでおすすめだと教えていただきましたが、その本が絶版らしくいくら歩き回っても手に入れることが出来ませんでした。 そこで質問なのですが、 私ははっきりいって文系出身なので、超がつくほど コンピュータ知識に関しては初心者です。 初心者にでも分かりやすいかつおすすめの参考書があれば教えてください。 希望としては、『秘伝のアルゴリズム』に匹敵する参考書が欲しいです。 よろしくお願いします。

専門家に質問してみよう