• ベストアンサー

アルゴリズムについて

あるプログラミングのテストでソートのアルゴリズムを書けというお題が出ました。 残念ながらアルゴリズムをいちいち覚えていなかったので回答を書けなかったんですが、皆さんは例えばクイックソートのアルゴリズムを書けと言われたら書けますか? やっぱり覚えておくべきなんでしょうか?

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

  • ベストアンサー
  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.1

アルゴリズムという言葉は意味は分かりますが これといった記法が存在するものではないですね。 プログラムもアルゴリズムを示すためのひとつの記法と言うこともできますし。 質問はフローチャートのことをおっしゃっているのかと思います。 いまいち質問の意図が見えにくいですが、質問に答えますと >皆さんは例えばクイックソートのアルゴリズムを書けと言われたら書けますか? はい、私は書けます。 >やっぱり覚えておくべきなんでしょうか? 覚えておくにこしたことはないと思いますが 暗記という意味だとすればフローチャートをわざわざ丸暗記する必要はないと思います。 要件だけ覚えて、後は自分の頭だけで考えながら書けるようになればそれで十分です。 要件というのは、例えばクイックソートで言えば 「軸要素をひとつ決め、軸要素を中心に残り左右に振り分ける。  後はこれを同様に繰り返す」 といったような内容のことです。 この要件だけを頭に思い描いてフローチャートが書けるようになる必要はあると思います。 当たり前のことですが、プログラムは提出された仕様通り動くように作らねばなりません。 クイックソートは非常に有名な並べ替えのアルゴリズムなのですでに解答はこの世に存在しますが 仕事では大抵の場合、答えは存在しません。 要求された仕様から、どうやって実現するのか、自分自身で考え アルゴリズムを考え出さなければなりません。 ましてや、クイックソートを書けるプログラマーはこの世にごまんといますし、 クイックソートひとつできたところで一銭にもなりません。 先は長いですね、がんばってください。

ran0441
質問者

お礼

回答が遅れてしまい申し訳ありません。 なるほど、要件だけ覚えて応用できるようにすれば良さそうですね。 実務でも調べれば済みそうですし。 ありがとうございました。

その他の回答 (5)

回答No.6

>やっぱり覚えておくべきなんでしょうか? テストで出る範囲ということで、点数を取りたいなら、少なくともこういうものがあって、大まかにこういうことをするものだという程度は覚えておくべきでしょう。 実務でどうかというと、○○ソートというものがあるということだけ覚えていればどういうアルゴリズムなのかということは調べればすぐ分かることですから、あえて”前向きに覚える”ほどのことはない事だと思いますけどね。

ran0441
質問者

お礼

回答が遅れてしまい申し訳ありません。 論理は覚えつつ、必要時にはその論理を元に作れる程度の力が要るなぁと思いました。 実務では結果が全てだから、調べて作ってテストが通ればOKってな感じですかね。 すっきりしました。 ありがとうございました。

回答No.5

職業プログラマー、趣味もプログラミングですが、 >クイックソートのアルゴリズムを書けと言われたら書けますか? 書けません。 書けなくても調べる力があればまったく問題ないでしょう。 車輪の再発明、ということわざもあります。 もしかして、出題の意図は、いくつかあるソートのアルゴリズムの 名前を書け、ってことだったりしませんか?

ran0441
質問者

お礼

回答が遅れてしまい申し訳ありません。 意外にも職業プログラマの方が書けなかったりするんですね? 確かに調べれば分かる範囲であれば、覚える必要はなさそうですね。 でも、書けないと自分のプログラミング力がつかないような気もします。 いずれにせよ回答ありがとうございました。

  • sgwjn
  • ベストアンサー率70% (47/67)
回答No.4

どのようなアルゴリズムでも覚えておくのに越したことはないですが、必ずしもそらで書ける必要はないと思います。 重要なのは、アルゴリズムを細部まで丸暗記することではなく、特性・特徴を把握し、直面した問題を解決するためのアルゴリズムを適切に選択できることではないでしょうか。 実際にアルゴリズムを書く(プログラミングする)際には、書籍を見るなりネットで調べるなりして書ければ問題ないと思います。 テストなどの場合は覚えておかないといけないでしょうけど…。 ただ、クイックソート程度であれば、何も見ずに書けても良いレベルだとは思います。

ran0441
質問者

お礼

回答が遅れてしまい申し訳ありません。 アルゴリズムの論理内容は理解しつつ、書けと言われたらその論理を元に作ればよいって考えると気が楽になりました。 ありがとうございました。

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.3

トランプカードを使って実際にやってみるのが良いかと。 忘年会でやると受けるかも・・

ran0441
質問者

お礼

回答が遅れてしまい申し訳ありません。 ソートのことなど考えたことがない人には目から鱗かもしれないですね。 この場合、いくつかのソートタイプを使ってどれが一番速くソートできるかってやるといいのかな。 ありがとうございました。

回答No.2

>クイックソートのアルゴリズムを書けと言われたら書けますか? 書けますが、使う言語にもよるでしょうね。 Pascalで書け、なんて言われたら「出来ない」って言うかも(笑)。 配列が扱い易い言語だったらそれ程難しくないかもな、とは思います。 >覚えておくべきなんでしょうか? 分かりません(笑)。プロの人はどう言うだろ? ただ、ちょっとした問題で「マトモに考えると詰まりそう」なんて場合は、アルゴリズムが必要かもな、とは思います。 大体のケースでは「著名なアルゴリズム」って数学由来なんじゃないのかな、とは思いますよ。もう「数学的定理」として定式化されている、と。 ですから、個人的には「言語の特徴」ってのは凄く大事で、「定理をそのまま置き換えられる」言語の方がラク、ではありますね。一々「プログラミング言語の不自由な様式」であるとか、「繰り返しを書くのがメンド臭い」とか、配列弄るのがメンド臭い、とかそう言うのは嫌です(笑)。単純に「何も考えずに」数式をただ置き換えていけるだけの言語だったら楽ちん、です。

ran0441
質問者

お礼

回答が遅れてしまい申し訳ありません。 そうですね、アルゴリズムって数学の範囲ですよね。 数学は嫌いなので覚えたくなかったんですが、論理自体は覚えておこうと思いました。 ありがとうございました。