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

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

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

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

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Q&A

解決済

6回答

1873閲覧

アルゴリズムについて

Mayotama106

総合スコア13

アルゴリズム

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

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

0グッド

0クリップ

投稿2018/03/13 13:28

javaを始めたばかりの初心者です。
探索やソートといった有名なアルゴリズムはプログラミングしていくなかでよく使われるものなのでしょうか。
また、それらはどのようなときに使うのでしょうか。
教えていただけると幸いです。

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

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

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

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

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

guest

回答6

0

ベストアンサー

元の回答がミスリーディングなので、斜線消しして、コメントの一部を転記しました。

「データの並び替え」も「要素の探索」もよく行われることです。

ただ「ソート」や「探索」の典型的なアルゴリズムはまさにそのものを使うというのではなく、もっと総合的に判断して使用されます。

競技プログラミングなどでなければ、ピンポイントかつライブラリ使用不可で組むことを要求されることはないと思われます。

ただ、例えば安定ソートかどうかなど、ライブラリの力を借りるにしても知っておかないといけない情報もあります。

また、探索やソートは比較的容易に理解できるので、言語になれるための頭の体操と考えて学んでみたり、組んでみたりするとよいと思われます。

基礎的なアルゴリズムが難しすぎて理解できないと感じるのであれば、今後プログラミングしていくのは茨の道です…

コメントから転記:


ソート:
前処理としてよく使われます。ソートはO(nlogn)なので、先にソートしてからだとその後効率よく処理できることが多々あります。
ソートしておくとその後の探索が2分木になるなど。
ソートされていることを前提にしている量というものもあります。(http://www.randpy.tokyo/entry/roc_auc)

探索:
木構造の探索アルゴリズムでしょうか。深さ優先探索、幅優先探索?
応用先で有名なMinMax法でしょうか。ゲームAIでよく見かけます。
目的関数の最大化・最小化に使えます。

人が見やすい・理解しやすいように「ソート」して、人が欲しいものを「探索」するアルゴリズムなので、プログラミングしていく限り、到るところで出てきますね。

追記して、アルゴリズムはデータ構造とセットです。

例えば、
「探索」という目的に対して、リストであれば一回でO(n)。
複数回やるのなら「ソート」してから次からO(logn)。
それに対して、辞書・ハッシュならO(1)です。

投稿2018/03/13 13:53

編集2018/03/13 14:52
mkgrei

総合スコア8560

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

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

Mayotama106

2018/03/13 13:59

回答ありがとうございます。アルゴリズム自体の理解はしているのですが、はたしてこれはどのようなときに役に立つのか疑問だったので質問させていただきました。安定という観点はわたしにとって目からうろこでした。ありがとうごさいます。
mkgrei

2018/03/13 14:18

そのような経緯だったのですね。 ソート: 前処理としてよく使われます。ソートはO(nlogn)なので、先にソートしてからだとその後効率よく処理できることが多々あります。 ソートしておくとその後の探索が2分木になるなど。 ソートされていることを前提にしている量というものもあります。(http://www.randpy.tokyo/entry/roc_auc) 探索: 木構造の探索アルゴリズムでしょうか。深さ優先探索、幅優先探索? 応用先で有名なMinMax法でしょうか。ゲームAIでよく見かけます。 目的関数の最大化・最小化に使えます。 人が見やすい・理解しやすいように「ソート」して、人が欲しいものを「探索」するアルゴリズムなので、プログラミングしていく限り、到るところで出てきますね。
mkgrei

2018/03/13 14:26

追記して、アルゴリズムはデータ構造とセットです。 例えば、 「探索」という目的に対して、リストであれば一回でO(n)。 複数回やるのなら「ソート」してから次からO(logn)。 それに対して、辞書・ハッシュならO(1)です。
Mayotama106

2018/03/14 00:52

細かい説明ありがとうございます。 質問が具体的でなかったにもかかわらず。付き合っていただきありがとうございます。
guest

0

WEBサービスを開発するくらいであれば、各プログラミング言語のライブラリとして探索やソートの関数が提供されているので、細かい技法は知らなくても大きな支障は無いのではと個人的に考えています。

しかし、探索やソートをいかに高速に行うのかという思想は、意外と普段の仕事の中で活きたりするので、勉強しておいて損は無いでしょう。

投稿2018/03/13 14:22

bassbone

総合スコア767

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

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

Mayotama106

2018/03/14 00:57

いざという時のために勉強しておくといいのですね。回答ありがとうございました。
guest

0

どのようなときに使うのでしょうか。

ぱっと思いつく範囲だと

■ソート
・ランキングを作成したい時。
・検索対象範囲を絞りたい時。

■探索
要素が含まれているか判定したい時。

投稿2018/03/13 14:07

編集2018/03/13 15:19
umyu

総合スコア5846

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

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

Mayotama106

2018/03/14 00:58

わかりやすい例で理解がはかどりました。回答ありがとうございました。
guest

0

探索 は search の方が一般的でしょうか?SQLですと SELECT 。
ソートはある順序で並べることです。アルファベット順とか。

ググるといろいろ発見があるでしょう。
初心者さんなら自分で調べてここまでわかったけど、ここから先の理解が難しい、などの質問されると適切なコメントが付くでしょう。

投稿2018/03/13 13:38

Orlofsky

総合スコア16415

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

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

Mayotama106

2018/03/13 13:48

回答ありがとうございます。なるほどわかりやすいアドバイスありがとうございます。
guest

0

探索やソートといった有名なアルゴリズムはプログラミングしていくなかでよく使われるものなのでしょうか。

思った以上に使わないですね。
使う場合でもおそらくデータベースからデータを抽出することになると思います。
そうするとSQLの操作になるので、プログラム側でどうこうということはあまりないと思います。

また、それらはどのようなときに使うのでしょうか。

例えば商品を画面に出力する処理ですと、商品ID順に並べたいとか、商品名順に並べたいとか、特定のジャンルの商品を抽出したい、とかですかね。

投稿2018/03/14 00:13

ttyp03

総合スコア16996

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

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

Mayotama106

2018/03/14 00:54

基本的にデータベースを利用する際に使われるのですね。回答ありがとうございました。
guest

0

使うことはないです。いや、使う人もいるかもしれませんがほとんどの人は使いません。

ただし、アルゴリズムの違いが実行速度やメモリの使用量にどう影響するのかを知り、自分が書いたブログラムがどのような理由で遅いのかを理解するにはアルゴリズムを学ばない手はないと思います。

直接使う場面が多くなくても、ちゃんと役に立つ「ちゃんと野菜も食べるんだよ」的なものです。

ググってみたら良い文章が見つかったのでリンク張ります。
コンピュータサイエンティストはソートアルゴリズムの中身を知るべきか

投稿2018/03/13 14:37

iwamoto_takaaki

総合スコア2883

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

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

Mayotama106

2018/03/14 00:55

なるほど実務的にではなく知識として持っているべきなんですね。回答ありがとうございました。
Mayotama106

2018/03/14 01:05

リンクのぞいてみました。私が疑問に思っていたことがしっかりと説明されていてためになりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問