アプリ版:「スタンプのみでお礼する」機能のリリースについて

学校でアルゴリズムを習っているのですが、
アルゴリズムとは何なのでしょうか?

教科書として、
「新・明解 C言語によるアルゴリズムとデータ構造」という本を買ったのですが、
内容的には以前C言語を勉強するために読んだC言語の勉強本とあまり変わらないような気がします。

スタックやキュー、ソートに検索など確かにC言語を教わる本には書いてないことはありましたが、
要するにC言語の別の面ということだと思いました。

意味的にはアルゴリズムは数学でいう計算方法、
つまり答えを求めるための色々な方法というように考えたのですが、
実際アルゴリズムとはどのようなものと理解すればいいのでしょうか?

A 回答 (6件)

あなたがプログラマとして社会に出た場合に色々な問題をプログラミングを通じて解決する場合が出てくるでしょう。

例えばQRコードが写っているカラーのビットマップ画像をたくさん渡されて、それぞれの写真の中のQRコードの位置を特定しなさいと言われた場合にあなたはどのように解決しますか。
QRコードの外側の白枠を探すという方法で解決する人がいるかも知れません。またはQRコードの3隅の三重の四角い枠を検出するという人もいるでしょう。QRコードの多くが白黒で印刷されているということに注目する人もいるでしょう。このような場合それぞれの解決方法がアルゴリズムになります(三者三様のアルゴリズム)。
そしてそれらの多くは学校で教わったことだけでは解決できません。先輩が手取り足とり教えてくれるものではありません。多くは自分の頭でアルゴリズムを考える必要が出てきます。
ソートだとか二分検索だとかの本に記載されている手順だけがアルゴリズムではありません。それらはあなたが社会にでて問題を解決する際のベースにはなるでしょうけど、それだけで万能な訳ではありません。むしろあなたがプログラマとして社会に出てプログラマとして解決すべき問題の解決方法がすべてアルゴリズムのようなものです。
そしてその解決方法はC言語だから可能だとかFortranでは無理だというような言語に特有なものではなく色々な言語で共通に利用可能な解決手段ですから、C言語の別の面という訳ではありません。
    • good
    • 1
この回答へのお礼

なるほど、よくりかいすることができました。
他の回答者様もとても分かりやすかったです。
ありがとうございました。

お礼日時:2012/05/11 18:00

5W1HのHow(どうやって)です。

ソートがWhatなら、その手順がアルゴリズムです。プログラム言語とアルゴリズムは別の概念です。

いつかあなたがプログラマになったとして、技術的難題にぶつかり、頭を悩ませ、プログラムで実現できる斬新かつ高性能の解法を思いついたとしましょう。それは特許になるアルゴリズムかもしれません(お金はかかりますが)。それにはプログラムの書き方ではなく、新しいアルゴリズムを考え出すための十分な知識と応用力が必要です。

特許の話は別にしても、アルゴリズムとデータ構造はプログラミングする上で重要なので、学んでおけばきっと役に立つでしょう。
    • good
    • 0

問題を解くための解決方法、効率的手順をまとめたものと言った感じでしょうか。


賢い人が考えたアルゴリズムを使えば効率的に処理できるものが世の中にはたくさんあるので、ありがたく使わせたいただきましょう。

「新・明解 C言語によるアルゴリズムとデータ構造」の載っているのは基本的なアルゴリズムで非常に応用が効く基本的なものばかりです。アルゴリズムはC言語という言語に限定されるものではありませんが、プログラムの組み方のコツはありますからC言語においての実装の参考にもなる本です。
    • good
    • 0

「ある目的を達成するための手段や手順」でしょうか。


計算方法に近いと思います。

計算は数字や演算子などを組み合わせて記述します。
アルゴリズムは変数や制御文を組み合わせて記述します。

ただ、人によって最短の計算方法で答えを出す人もいれば、遠回りして答えを出す人もいます。
これはアルゴリズムも一緒です。
論理的に正しい導出が出来てればどれも正解です。
そうすれば自ずと計算時間(プログラミング時間)も変わります。

その違いは、知識や技術(とセンス)にあるのも同じです。

ただし、たまたま正解だったというのは認められません。
    • good
    • 0

「処理手順」でもいいかも知れません。



バブルソートのやり方を手順として書き出せれば、
C言語以外のプログラミング言語でも同じような手順になるようにプログラミングすることでバブルソートが実装できるでしょう。
# まぁ、そのプログラミング環境にライブラリで用意されている。なんてこともあったりしますが。

そんなわけで…
>要するにC言語の別の面ということだと思いました。
とは違いますね。
    • good
    • 0

「計算方法」と思っていいです.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!