アルゴリズムを勉強するメリットとは。
- 評価
- クリップ 2
- VIEW 358
質問でなくて申し訳ありません。
C言語における基礎勉強は大変重要です。
そこで質問なのですが、アルゴリズムを勉強するメリットはあるのでしょうか?
何を行う時にアルゴリズムを勉強するのでしょうか?
以前、本に載っていたのは、「機械学習、画像処理を行う上で数学的なアルゴリズムを勉強する必要がある」と書いてありました。しかし具体的な例題が書いていなかったため書いてあることが本当かどうかわかりませんでした。
私としては、例えば素因数分解のアルゴリズムを勉強したのですが、このような数学的なアルゴリズムが機械学習や画像処理にどのように使われているのか具体的に知りたいです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+10
便宜上、アルゴリズムを「基本的なもの」(素因数分解でいえば、「ひたすら割れるか試していく」ようなもの)と、「専門的なもの」(数論的に議論を深めた素因数分解)に分けて考えます。
基本的なアルゴリズムは、多くの問題に対して共通して使える枠組みとなるので、プログラマーにとっての基礎トレーニングのようなものになります。
専門的なアルゴリズムは、確かにその問題にしか役に立たないように見えます。しかし、世界はどこで何がつながっているかわかりません。たとえば、純粋に数学的な問題だと思われていた素数論の世界も、RSA暗号の発明によって、一気に実用性のある研究が行われる分野となりました。
teratail.com
に使われている証明書もRSAなので、これを素因数分解できればteratail.com
のフリをすることができる、そういう物となっています。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+9
これから先、動かすものを誰かに提供してもらう、誰かが作ったものを、その言うとおりに動かしてそれで満足するなら、アルゴリズムなんか勉強する必要はありませぬ。
まー、楽でいいですな。自分ではなにも苦労する必要はないんだから。
しかし、自分でなにかを作る、自分の手でなにかを産み出そうとするなら、アルゴリズムの知識がないとどうしようもなくなりますな。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+7
こんにちは。
そこで質問なのですが、アルゴリズムを勉強するメリットはあるのでしょうか?
何を行う時にアルゴリズムを勉強するのでしょうか?
アルゴリズムを知っていれば、そのアルゴリズムを使うのが適切なプログラムを短期間で開発できます。
ウロウロ試行錯誤せずに1発で良いものを作れますから。
しかし、当たり前ですが対象分野に適用できないようなアルゴリズムは知っていても役には立ちません。
更に、世の中にアルゴリズムは星の数ほどあります。それらを全て把握するのは現実的ではないと思います。
従って、興味のある分野に絞ってどのような有用なアルゴリズムがあるのかを把握し、それを使えるようにすることが重要です。そして、例えば既に誰かがライブラリを用意しているアルゴリズムなら使い方だけ把握すれば十分でしょう。しかし、そのアルゴリズムを微調整することで目の前の問題向けに最適化したいなら、中身も理解しておく必要があります。
私としては、例えば素因数分解のアルゴリズムを勉強したのですが、このような数学的なアルゴリズムが機械学習や画像処理にどのように使われているのか具体的に知りたいです。
機械学習の技術文書や画像処理の技術文書を読めば、それらにどのようなアルゴリズムが使われることが多いのか把握できると思います。
機械学習ならパーセプトロンから始まってバックプロパゲーション、ディープラーニングが有名でしょうか。
画像処理の場合は、ソーベルフィルタ等のフィルタ群、各種コーナー検出・ハフ変換・SIFT/SURF等様々な特徴抽出アルゴリズムなどが本当に多数あります。
素因数分解が機械学習や画像処理に使われるケースがあるのかどうか私は把握していませんが、毛色が異なるのでこれらの分野に使われることは多くはないだろうと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+6
アルゴリズムは、広義に何かを実現するための手続きです。
狭義に、クイックソートやユークリッドの互除法などがあります。
特別にある側面で考えたときに優れていて、淘汰の中、生き残っているものが狭義的なアルゴリズムです。
結局プログラミングでやろうとしていることは、数多くの狭義的なアルゴリズムを組み合わせることで広義的なアルゴリズムを作り上げて、やりたいことを実現することです。
ソートをするのに、クイックソートを使えば良い、ということを知っていればクイックソートのアルゴリズムを知る必要はありません。
ですので、新しい狭義的なアルゴリズムを作りたいのでなければ、特にアルゴリズムを勉強する必要はありません。
と極論を言っても構いません。
もっと簡単な例で考えてみればいかがでしょうか。
数学を理解するのに、足し算を知る必要はありません。
足し算は電卓を使えば、人ができなくても構いません。
であれば数学を理解するための道具の仕組みは知らなくても良さそうです。
どうですか、足し算ができない人が数学を理解できそうですか。
勉強は退屈だから、あまり意味を見いだせないことが珍しくありません。
ただ、多くのケースは、簡単すぎるから退屈なわけではありません。
難しくて理解できないから退屈なのです。
そのものが難しくて理解出来ないケースもあれば、それが必要とされる文脈を知らないから理解出来ないケースもあります。
でも逆に考えてみてほしいのは、教えられて難しいことを自力で見出すことができるか、ということです。
勉強して習得していかないと、おそらく一生理解できないことを積み上げていくことになるのです。
言語も勉強してきました。
この言葉は使わないから勉強する必要がないと考えたことはありません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+4
素因数分解が例にあがっていますが
数学的な話だけではありませんよ。
プログラムを通じて、問題・課題に対して解決する手立てを得るというのが私の認識です。
そのため、様々な解決手法が誕生、磨かれてきています。
私をはじめ、エンジニア、デザイナーなどは、手法、パターン化されたデザインなどを駆使して
解決に向けて最適解を得ようとします。それがアルゴリズムだと思います。
それでは、carnage0216さんに改めて伺います、なぜC言語やCUDAを選択しプログラムを学ぶこと選択したのでしょうか。
FPGAを使ってアプローチするのはなぜでしょうか、何かしらの問題に対して解決する手法、最適解、最善解を得るためではないでしょうか。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+4
素因数分解だと機械学習や画像処理とはほとんど関係ありません。しかし、暗号との関連性が高いです。
画像だと、重要なのは信号処理系の技術ですし(FFT, ウェーブレット変換あたり)、機械学習は線形代数、確率論、最適化問題あたりの様々なアルゴリズムが絡んできます。これらのアルゴリズムはその分野の知識がないととても理解はできません。ですから、C言語の入門書に登場することはまずありません。
一般論として「数学的アルゴリズムが画像処理や機械学習に応用されている」と主張することに問題はありませんが、「この本に載っているようなアルゴリズムがそのような分野に応用されている」というニュアンスで書いてあったのなら、著者の方の勇み足だったのかもしれません。
何を行う時にアルゴリズムを勉強するのでしょうか?
エンジニア的な立場から、答えの候補を考えてみましょう。なお、何を以てアルゴリズムとするかによって答えが変わりますが(すべてのプログラムはアルゴリズムである、と極論することもできなくはないかもしれない)、今回は一般的にアルゴリズムとして見なされる範疇のものを相手にします。
候補としては、
- 自分でアルゴリズム自体を新規開発するとき
- 自分以外が開発したアルゴリズムを実装するとき
- 自分以外が開発・実装したアルゴリズムを利用するとき
がありますが、1,2を仕事にしている人は実際にはごく一部です。よって消去法で3が現実的な答えです。
便利なアルゴリズムは大抵、容易に利用できるような形で実装が配布されています。画像処理や機械学習までは考えないにしても(特定分野の話なので)、hashやソートは汎用的によく使われるアルゴリズムの良い例ですし、そもそもC言語で書いた簡単な四則演算すら、半導体チップの中のMOS-FETからC言語のソースコードの間までには無数のレイヤがあって、その中に無数のアルゴリズムがあって利用できるようになっている、と考えるべきです。それが一行、数文字で書けるのがアルゴリズムの威力と言ってもそんなに間違いではありません。
だから私達は否応無しにアルゴリズムは使っているのですが、思い通り動かない、動くんだけど遅い、ということがままあると思います。こういうとき、アルゴリズムの性質を理解しているかどうかで打てる手がまったく変わってきます。
既存のものに不満を一切持たず使うだけ、ならアルゴリズムの知識は不要かもしれませんが、不満があって改善したい、というモチベーションが生じてくるようであれば、知識がないといじりようがありません。ブラックボックス扱いしていたら何も出来ないということです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+4
アルゴリズムを勉強するメリットはあるのでしょうか?
考えたこともないなー。
「大工さん、ノコギリとカナヅチが使えるといいことあるんですか?」
...使えないとメシが食えねぇよ。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+3
アルゴリズムを勉強するメリットはあるのでしょうか?
何を行う時にアルゴリズムを勉強するのでしょうか?
アルゴリズムというのは、要するに問題を解くための方法です。アルゴリズムをたくさん知っていれば、それだけ多くの問題に対処できるということです。つまり、プログラムを作る際にいちいち人に聞くまでもなく自力で作れるというわけです。なんかよく判んないからネットで見つけたソースをコピペしてみたけど思った通りに動かない、などと悩んだりすることもありません。
ものすごいメリットだと思いませんか? それに勝るメリットなど私には思いつきません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+2
そこで質問なのですが、アルゴリズムを勉強するメリットはあるのでしょうか?
他の方が書かれていますが、個人的にはYomogiKOBOさんの書かれていることが刺さりました。
最適とまではいかなくてもより良い方法を求めるのであれば、いろいろな手段を知っていなければいけません。C言語やアセンブラ、GPUにばかりと気を取られて視野を狭めているように思います。リアルタイムでの画像処理をするという目標に対してそれが最適なのでしょうか?画像処理を学ぶ必要はないのでしょうか?
例えば素因数分解のアルゴリズムを勉強したのですが、このような数学的なアルゴリズムが機械学習や画像処理にどのように使われているのか具体的に知りたいです
このような?どのような?具体的に?質問が曖昧なのに具体的には答えらません。
連想ゲームのような難しさというか、アルゴリズムがなぜ重要かみたいな一般的な話しか出てこないでしょう。
以前、本に載っていたのは、「機械学習、画像処理を行う上で数学的なアルゴリズムを勉強する必要がある」と書いてありました。
何の本でしょう。機械学習、画像処理の本ってそもそも数式だらけのような気がしますが・・・。プログラミングの入門書?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
-1
さすが、パソコンオタク御用達のteratailだけあって、相変わらず的外れな回答ヴァッカだな。ロボだらけじゃん。
聞かれたことをそのまま答えてるだけ。そういうのは一介の作業工がやる事。エンジニアなら客からの要求の奥にある本当の問題を見つけてその解決策を提供しないとな。
そういう観点で、満を持してするluckerお兄さんの回答は、これだ。
Q: そこで質問なのですが、アルゴリズムを勉強するメリットはあるのでしょうか?
A: 今のレヴェルだと、アルゴリズムについて考える事は君にとってなんのメリットもないです。スケベ心出してよそ見なんかしてないで、まず、プログラミングの基本的な作法を学ぶ事だけに注力しなさい。
って事。
episteme お父さんが、
「大工さん、ノコギリとカナヅチが使えるといいことあるんですか?」
...使えないとメシが食えねぇよ。
って言ってるけど、そういうのは「家を建てるには、木を切って組み立てなきゃいけないんだよな」って事が認識できて「こんなふうに切ってこことここを繋ぎたいけどいい道具ねぇかな?」って段階になって初めて『ノコギリって物があって木が切りやすいらしい』『カナヅチってのを使うと木をつなぎ合わせる楔打ち込むのに楽らしい』って事がわかり始める。で、『Aの時は場所狭いからもっと小ぶりのノコギリねぇか?』『Bの時は足場不安定だから軽くて取り回しやすいカナヅチねぇか?』ってなる。
知識というのはそうなって初めて、意味を成してくる。
質問者がその段階にあるかどうかくらい理解できないとダメだろ、いい加減みんな。
だからお前らはいつまで経っても下っ端のコーダと大して変わらないんだよ。回答した奴の中で、マネジメントしてプロジェクト回してる奴、ちょっと手を上げてみろ。居ねぇだろ。だからダメなんだよ、おまえらは。
…って書いておくと、来週の月曜日あたりに運営からお怒りのメールが届くんだけどな。
前回はさすがにかなりお怒りだったので、今度という今度はアカバン来てもおかしくないから、この土日が最後の回答になるかも。
まぁ、なかなか楽しかった。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 90.84%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/06/23 03:30
想像がいまいちできませんでしたが、なんだか凄いですね。興味深いです。