質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

4回答

856閲覧

アルゴリズムはどれくらいのレベルまで把握すべきなのか

mofu_mofu

総合スコア73

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

1グッド

0クリップ

投稿2019/02/01 08:57

お世話になっております。

今、『プログラムコンテスト攻略のためのアルゴリズムとデータ構造(螺旋本)』でアルゴリズムの勉強をしていて、「どの程度基本的なアルゴリズムを把握しているべきなのか」ということに疑問を持ちました。

「どの程度把握すべきなのか」の意味ってなんだ???
という話なのですが、今のところ以下の切り口が考えられました。

①学習範囲の話
②理解度の話


①学習範囲の話
基本的なレベルってなんだ?と疑問に思うのですが、一旦ここでは上記の螺旋本で扱っているアルゴリズムを基本的な学習範囲とします。

②理解度の話

ではその螺旋本をどのレベルまで把握していればいいの?となります。

  • 理解していればいいの?覚えていなくていいの?
  • 「理解している」ってどのレベルのことを指すの?
  • 何も見ずにスラスラ書けるレベルになっていればいいの?

ここは「なぜアルゴリズムを勉強するのか」という目的の話に関連してくると思うのですが、自分でプログラミングを組む時に

  • 「これは再帰でできるな、だけど再帰は余分な計算をする可能性があるから動的計画法がいいかな」
  • 「モバイルアプリで作るからメモリのリソースがないから◯◯のアルゴリズムは避けるかー(マージソートとか)」とか
  • 「ここのアルゴリズムのオーダーが多いから、あのアルゴリズムでオーダー数削減できるなー」とか

を判断できて、螺旋本に書いてあったなーと思い出せる程度になっていればいいのかな?とぼんやり思っています。
でも、一気に書くことを基礎練習としている人がいたなあ...とも思ってしまいます。

皆さんは「基本的なアルゴリズムはどの程度把握すべきなのか」という文言をどう解釈されますでしょうか。

よろしくお願いいたします。

oppeke👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

「基本的なアルゴリズムはどの程度把握すべきなのか」
目指すところにも寄ります。

ゲームとITのジャンルでも求められるものは違います。
ゲームでは主にプログラムの知識 + 物理
ITでは主にプログラムの知識 + データベース

貴方の目指す場所の事をすればいい話です。どこに行きたいのかをよく考えて行動すれば良い話です。

投稿2019/02/01 09:04

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

目的によって状況は変わると思います。

プログラミングコンテストのため、ということであれば時間と正確さの勝負になるので
何も見ずにスラスラ書けると調べたり読んだりする時間を削減できます。

勝ちたい、少しでも良い結果を出したいのであれば、何も見ずに完璧にコーディングできるのが
一番の理想ではないでしょうか。


対して普通に開発する状況であれば何も見ずにかけるレベルではなくても、
調べて書ける程度であればコーディングに問題はないはずです。

むしろ理解どころかそういうアルゴリズムを知らなくても、
必要になれば調べて知ることにはなりますし、
仕事であれば先輩や上司から指摘されて知ることになるので、
把握することが必須というわけでもないと思います。


「基本的なアルゴリズムはどの程度把握すべきなのか」

という質問については状況によって変わるとしか言えないです。
中にはよく使うアルゴリズムもあれば、全く使わないものもあるかもしれません。

せっかく学ぶ機会をお持ちのようですので、それぞれのアルゴリズムの特徴や
メリット・デメリットを頭に入れておくと良いと思います。

使わないかもしれないなら学ばなくていいのではなく、
使うかもしれないから学んでおこうという姿勢を持ち続けられれば良いですね。

投稿2019/02/01 09:34

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず、よく使う道具には慣れ親しんで、使いこなせるようになっておくと良いと思います。その過程で中身を知っていた方が使いこなせるのであれば、知っておけば良いと思います。

でもアルゴリズムの中身までわかっていないと使いこなせない、というのはよほどの極限状態で、普通の目的で普通にプログラミングしている人ならあまりないシチュエーションだと思います。便利なアルゴリズムは、ブラックボックスとして使えるから便利なアルゴリズムとして残っている訳です。

もちろん「こいつは時間計算量を空間計算量に変換してるからメモリ食うなぁ」とか「こいつの計算量は多いから気をつけないとなぁ」くらいのことは知っておいた方が良いシチュエーションは割と多々あるかもしれませんが、そんなのは「ブラックボックスの特性」として理解しておけば済む話です。

「操縦桿を引きすぎると失速する」ということを知らないと航空機パイロットは務まりませんが、それを理解するために流体力学や制御工学をマスターする必要まではありません。単に「操縦桿を引っ張りすぎちゃ駄目。万が一失速したら操縦桿を押して機種下げする」と知っておけば良いのです。


ただし、競プロをやるならまったく別。あれは極限状態を作り出してそれに挑むものですから(だから「競技」)。

逆に言うと、競プロができる→良いプログラムが書けるという因果関係はありません。競プロやるくらいプログラミングに入り浸った人なら大抵の場合は良いプログラムが書けるというだけですね。

投稿2019/02/01 11:22

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

アルゴリズムとの関わりについて、以下のような場面があると思います。

  1. アルゴリズムを実装したライブラリを使ってアプリ等を開発する

使い方や「処理量に対するメモリやCPU消費の増え方や絶対値等の特性」、及び、それを実現したライブラリについて把握しておけば十分かと。

  1. アルゴリズム自身をプログラムとして書き下す

アルゴリズムについて細かい部分まで含めて理解が必要ですね。

  1. アルゴリズムそのものの開発や性能改善

アルゴリズムについて細かい部分だけでなく欠点が何か、どこに改善の可能性があるのかも含めて深い深い理解とアイデアが必要。

1.のレベルでなるべく多くのアルゴリズムを把握すると好ましいと思います。もちろん世の中に存在する全てのアルゴリズムとそれを実装した全てのライブラリを把握することは事実上不可能ですから、何を把握するのか決める部分は難しいかも知れません。個人的には行き当たりばったりでも良いように思いますが。

2.については必要が生じた時だけで良いと感じます。車輪の再発明は避けることができる場合は避けた方が自分も含めて皆が幸せになれますから。

3.にチャレンジする必要に迫られることは結構レアと思いますが、必要が生じた時に頑張ればよいと感じます。このレベルは「ライフ・ワーク」になりそうですので、数多くのアルゴリズムについて到達することは困難と思います。

投稿2019/02/01 10:13

編集2019/02/01 10:15
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問