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

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

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

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

10回答

5935閲覧

アルゴリズム等を記述するのに適した言語、文法について

damalnylpo

総合スコア53

アルゴリズム

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

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

1グッド

1クリップ

投稿2016/08/17 13:23

編集2016/08/17 13:25

###質問したいこと
プログラミング言語によって文法というのはもちろん異なりますが
言語に関係なく、処理の流れ、アルゴリズムを記述ないし説明したい時に適した言語はなんでしょうか?

###候補?
0. C言語
大本命です。
何より普及してますし
文法も主流言語の多くがCの派生なので
これが一番無難だと思いますが
末尾のセミコロンなどはやや解析用の字句でもあり、
if文等の括弧の有無は未だに言語によって分かれているので
少し思うところもあります。

  1. VisualBasic

入門用言語なのでアルゴリズムの学習でも
可能性があるのではというダークホースです
ただ、最近は入門でVBから始めるという話もあまり聞かず
文法も独特でやや古めなところもあり
個人的にはこれだとあまりうれしくないです。

  1. JAVA

使用率や人の多さという観点でJAVAはどうかと思ったんですが
少ししか触ったことないので偏見ですが
JAVAはクラス縛りが強すぎて
純粋なアルゴリズムだけを記述するには冗長に感じます。

  1. まさかの関数型言語

関数型言語は噂によると科学研究系の用途で強く
複雑で数学的なアルゴリズムに関しては有用かもしれません。
とはいってもやはり主流なパラダイムではなく
私自身分かってないので見つけてもまずブラウザバックすると思います。

  1. 細かいところは日本語で誤魔化す

最低限のif文等にとどめて
何々と何々は等しい、などで誤魔化します。
プログラム初心者でもわかりやすいと思います。

constやnewなど、アルゴリズムにあまり必要のないキーワードも少なくなく
ジェネリクスやトレートという機能の有無もアルゴリズムとはまた別の次元の話で
実際にアルゴリズムを書いてみるとどの言語を使っても似たり寄ったりになるものなので
単にアルゴリズムを知りたいのにわざわざ言語を指定する必要はないと思います。
根本的な処理の流れはどの言語でも同じなら最も違和感の無い記述を使いたいです。

もちろん全く要らないというわけでなく
言語を学ぶためにアルゴリズムを利用するという場面もあると思いますし
あくまでアルゴリズムを学ぶ上で無視して良いものという意味です。

takotakot👍を押しています

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

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

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

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

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

raccy

2016/08/17 13:31

VBってVB.NETの事ですよね?懐かしのVB6じゃないですよね?
damalnylpo

2016/08/17 13:58 編集

VBは使ったことないので見当違いだったかもしれないですね。 そもそもGUIアプリケーション向けということすら知らずコンソールもできるよという認識でした。 そうなるとなおさら向いていない気がしてきましたが とりあえずVB.NETでお願いします。 VB6は書きやすい代わりにメンテナンス性が犠牲になってるイメージでいいんでしょうか?
Panzer_vor

2016/08/17 18:27

横から失礼します。 VB6についてはメンテナンス性が犠牲になってるというより、 作り手が勢いで作るとメンテナンス出来る代物でなくなるというのが正解です。 VB6でもしっかり作ればある程度の保守性は担保できます。 そういう意味だとVB.NETでも、 VB6との互換性を完全には切り捨てていないので、 VB6でできたようなコーディングも普通に出来ます。 むしろオブジェクト指向としても書ける分、下手に混在させるとご覧の有様となりますね^^;
raccy

2016/08/17 21:42

VB6はもう発売していない(MSDNサブスクリプションを結べば入手は可能なようですが)、IDEの動作は32bit版Vistaでしかサポートしていない(いちおうWin7以降でも動くようですが)、作成したアプリの動作についてWin10もサポートしているがいつまで続くは不透明、など新規に学んだり作成することには推奨できかねます。CはCでもANSIになる前のCで書くような感じでしょうか。
guest

回答10

0

言語によらない純粋なアルゴリズムを書くのであれば「フローチャート」やUMLの「アクティビティ図」が良いのでは無いでしょうか?UMLの「状態遷移図」もあわせて書いておくと、理解もしやすくなるような気がします。

他にも視覚的にわかりやすくすると言うところではScratchが良い選択になると思います。

遅延評価がある純粋関数型言語(Haskellとか)はアルゴリズムのアプローチが異なるときがあります。通常のアルゴリズム(各ソートとかエラトステネスの篩とか)はデータがミュータブルであり、それぞれの処理が副作用を伴うことを前提にしている場合があります。しかし、Haskellはデータがイミュータブルであるため、そのまま同じように書くことはできません。

なお、私はCはあまりお勧めしません。Cはラムダ式が無い(一応関数ポインタを使うという手段はありますけど、冗長)、大きさ不明の配列が書きにくい(何度もreallocが必要)、並列処理(マルチスレッド)のライブラリが環境依存(C11には標準でthreads.hがあるけど、動作する環境が皆無)、などできることに限界があったり書き方が冗長化してしまうと思っています。C系にこだわるのであれば、C++11/14をBetter C(クラスやテンプレートなどは積極的に使わない)として使う方がいいと思っています。

私は競技プログラミングなどでアルゴリズムを考えるときは、始めにRubyで書いて、Rubyが遅すぎて速度がぎりぎり間に合わない場合だけ、C++に書き換えるようにしています。

投稿2016/08/17 22:30

raccy

総合スコア21733

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

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

0

ベストアンサー

処理の流れ、アルゴリズムを記述ないし説明したい時に適した言語はなんでしょうか?

学術よりの論文だと、Pascal風の疑似コード+数学的な演算+自然言語(英語など) でアルゴリズム記述される例が多いと思います。

人間に対するアルゴリズムそのものの説明が主目的の場合、挙げられているような具体的なプログラミング言語ではいずれも不向きと思います。プログラミング言語はコンピュータに対してアルゴリズムを正しく記述するためのものですが、どうしてもアルゴリズムの本質ではない処理記述が必要のため人間にとってはノイズが増えてしまいます(例:動的メモリ確保や文法上のルールなど)。

少なくともC言語やJavaは上記観点でのノイズが多く、アルゴリズム説明用には不向きと思います。Basic系の方がいくぶんマシでしょうか。対象によっては関数型言語(風)が適したケースもありますが、手続き的にアルゴリズムを説明する場合にはやはり不向きです。PythonやRuby等のスクリプト言語で、凝った機能を使わないのが最も素直な説明手段かもしれません。

投稿2016/08/18 00:49

編集2016/08/18 00:54
yohhoy

総合スコア6189

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

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

0

私は、アルゴリズムと書いてある文章には処理の流れを分かりやすくしようという意図で書かれているものは知りません。どちらかというと、メモリを効率的に使うこと、計算量を抑えること、その結果として素早く正確に解を求めることを意図しています。

コードの読みやすさであれば、オブジェクト指向言語ですが、例えばJavaはメモリ管理を自前で行えません。そのため、メモリの効率的な使用ができているか、はっきりしません。(とはいえ、変数をを最初に定義し、基本型のみで解くといったJavaらしかなぬコードの書き方もありますが・・・)VBも同様です。

関数型言語は、データ構造の表現が豊かなのでアルゴリズムを記述するには悪くない選択かなと思います。

日本語や、疑似言語を使うのはやめましょう。ことアルゴリズムに関しては、定義があいまいなものを使うとあまりよくない結果になる気がします。(余分な誤解が生まれる可能性が大きい。)

基本的には、Cをお勧めします。自分たちだけでなく、ネットや書籍にあるほかの人の知恵が得られやすいからです。ただし、質問者はVBや関数言語に対しての記述を見るに、言語への好みが見られます。この傾向は、説明する相手にもあるはずです。そのことから、その時々で相手が得意とする言語で説明するのがベターな選択だと思います。

なにより、相手が理解することが大事かなと・・・

投稿2016/08/17 19:09

iwamoto_takaaki

総合スコア2883

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

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

0

擬似コード(pseudocode)がいいと思いますよ。説明するために特定の言語を使うよりも自分で定義したほうが自然に書けると思います。

擬似コード:Wikipedia

擬似コード (ぎじコード、英: pseudocode)とは、アルゴリズムなどを、架空の非常に高水準なプログラミング言語(擬似言語)で記述したものである。

擬似コードを書いてから実装を始めることもよくあります。

投稿2016/08/18 02:01

kodai

総合スコア759

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

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

0

"アルゴリズムの記述"ってことなら、可変長配列/双方向リスト/二進木/ハッシュ表等のデータ構造、および線形検索/二分検索/ソート/集合演算などなどの部品が標準ライブラリで提供されてるC++はいかがすか?

投稿2016/08/18 00:01

episteme

総合スコア16614

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

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

0

たいていの場合はC言語推しだと思いますが、PHPが意外といいんじゃないかと思います。
PHPなら型をあまり意識せずに処理できるので、純粋に処理の流れを追うことができそうな気がします。
関数名もC言語と同名のものが多いですし。
ただし、速度を追求するようなものには当然ながら向いていないと思うので、万能というわけではありません。

投稿2016/08/17 23:56

ttyp03

総合スコア16996

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

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

0

こんにちは。

数値計算用にはALGOLという言語が大昔に開発されたそうです。
昔はPASCALやlispを使っている人がそこそこいました。
PASCALは曖昧さが少ないので向いていると聞きます。
lispってカッコばかりでとても読めないと思うのですが、分野によってはアルゴリズムを記述するのに適しているそうです。今も情報処理系の大学で使われているらしいです。
C言語は文字列処理アルゴリズムを書くのには適していないように感じます。
他に並列処理アルゴリズムを記述するなら、既に挙げられた言語を使うのは厳しいかもしれませんね。

記述するアルゴリズム毎に最適な言語は異なるということではないでしょうか?
逆に、伝えたい相手も知っている言語なら、自分が慣れた言語で書いても良いようにも思います。

投稿2016/08/17 14:09

Chironian

総合スコア23272

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

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

0

アルゴリズムの記述に向いて、そのまま実行も出来る言語というと、Ruby一択では無いかと思います。

もちろん、実際に処理系のある言語じゃなくて、擬似言語を使って書くというのでも良いと思いますが。

投稿2016/08/17 13:39

otn

総合スコア84423

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

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

damalnylpo

2016/08/17 13:49

そのまま実行できるというのは確かに中々良いメリットですね。 しかも記述がシンプルで良さそうですが 比較的独特な文法というところが悩みどころです。
guest

0

みなさん回答ありがとうございました!

図解やCで書く場合の欠点など色々勉強になりました
cでも実行コストを気にせず静的確保で行けば
特に余計なものもないかと思っていましたが
それでも凝った内容だと確かに不要な内容まで出てきそうです。

PASCALはアカデミックな方向だと結構定番なんですね。
古い言語のイメージがありました。

皆さんに提案していただいた他の言語も迷いましたが
yohhoyさんやraccyの言う通り凝った機能、便利で独特な機能は使わない方が良さそうだと思うので
疑似言語と自然言語で行こうと思います。

分かりやすさなら実質図解が一番しっくりきそうですが時間がかかるので今回は敬遠します!!!!!!

参考になりました、ありがとうございました。

投稿2016/08/18 10:43

編集2016/08/18 10:45
damalnylpo

総合スコア53

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

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

0

アルゴリズムの説明ということだと、一番わかりやすいのは動画、次いで図解じゃないでしょうか?
作るのに手間がかかる順とも言えますが。
ということで HTML だと思います。
が、そういうことじゃないですよね?

言語はいろいろありますが、新しい言語だと便利な部分が逆に枷になると思います。
移植しにくくなる恐れがあります。

・チームへの説明なら最終的な成果物を作るのに使う言語
・一般への説明であれば疑似言語あるいは C

が、他の条件を考えなければ比較的無難ではないかと思います。
C を推す理由は、

・多くのアルゴリズムの解説が C で書かれていて、アルゴリズムの学習者は C が読めることを要求される文化が既にある
・多くの言語の模範となった古い言語なので、C で書けるなら新しい言語への移植へも容易なことが多い

逆に C を使うデメリットは

・ポインタを多用するとわかりにくくなる
・文字列が扱いにくい
・メモリの確保、解放などアルゴリズムに直接関係ないコードが増える

ということでしょうか。

まとめると、説明を受ける層、そのアルゴリズムが使われる成果物によってその都度選択していく必要があるだろうと考えます。

投稿2016/08/17 15:00

Zuishin

総合スコア28656

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問