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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

アルゴリズム

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

12回答

11247閲覧

アルゴリズム問題が苦手です。0から学ぶいい方法を教えてください。

dongw

総合スコア119

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

アルゴリズム

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1グッド

8クリップ

投稿2017/02/09 09:05

題名のとおりです。
プログラミングをRubyで初めて楽しく学んでいる段階です。
しかしどうにもこうにもアルゴリズム系問題が苦手です。
思えばSPIや中学数学、小学校受験算数的な問題も苦手でした。

paizaなどの問題をやろうにもDランクレベルの問題で全く解き方が思いつかない、ということばかりです。

そこでなのですが、アルゴリズム系の問題を解く能力を付けたいと思っています。
0からの状態でも学べるようなおすすめのwebサイト、または書籍、また助言など頂けるとありがたいです。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答12

0

paizaのDランクが解けないって、それアルゴリズム以前に「書き方がわからない」レベルなのでは…

まあ書き方がわかるにしても、paizaのDランクの問題は、アルゴリズムなんていう大層なものではないです。人がやることをそのままコンピュータにやらせればいいだけの場合がほとんどです。
それが出来ないのは、そもそも「そのプログラミング言語でなにが出来るかがわからない」のではないでしょうか?

投稿2017/02/09 15:58

編集2017/02/11 01:26
swordone

総合スコア20649

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

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

matobaa

2017/02/10 00:14

回答にもアドバイスにもなってないのでさげますね
moke

2017/02/10 02:56

むしろシニカルで完璧な回答だと思います
dongw

2017/02/12 23:02

コメントありがとうございます。 「書き方がわからない」レベル、と言われると確かにそうかもしれません。 for文、if文の使い方などそういった面であやふやだから解けない問題だらけということですよね paizaのDランクの問題のレベルというのは 問題を見て どうやって解くんだろう? から考えるレベルではなく、書き方ですべて解けるレベルの問題なのでしょうか?
swordone

2017/02/12 23:59

少なくとも「どうやって解くんだろう」で考えることはほとんどありません。 たいてい、問題を解く(つまり与えられた入力を処理する)にあたって人が普通にやることを、そのままコンピュータにやらせるコードを書けば解決します。 ソートアルゴリズムのように、「この部分はどういう作業の組み合わせなのだろう」というのはほぼないです。
dongw

2017/02/15 10:42

コメントありがとうございます。 なるほど、Dランク問題はつまりアルゴリズム問題以前の簡単な問題、ということでしょうか? まだ自分が思っているより言語の使い方が不慣れということかもしれません。勉強を続けてみます。
swordone

2017/02/15 12:15

iwamoto_takaakiさんの言うように、文字列処理、パースなどの使い方が主眼なので、その辺りを重点的に調べればDランクは解けると思います。
dongw

2017/02/16 11:01

コメントありがとうございます。 paizaの問題についてはそういうことだったんですね! そこの辺りはもう一度勉強して再チャレンジしてみようと思います。
guest

0

算数が苦手な方はアルゴリズムを身に着けるのに時間がかかるかもしれません。
逆に時間をかければ身につくので、楽しく学べているのであれば問題はないと思います。

さて、PaizaのDレベルであればアルゴリズムより文字列処理・パース・演算子・論理式の”使い方”に関する技術を求められていると思います。

まずは、Rubyの言語の本を一冊読みましょう。サンプルコードを一通り読めるようになる必要があるからです。

あと、判らないことをTeratail経由で質問してもらえばよいと思いますが、Paizaの問題を公開するのは問題があります。AtCoderのBeginnerContestの終了したものを開くと他の方の回答がみれますので、それを見て学ぶとよいかもしれません。

投稿2017/02/10 00:51

iwamoto_takaaki

総合スコア2883

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

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

dongw

2017/02/12 23:13

コメントありがとうございます。 算数は繰り返しになりますが苦手です。 実際にRubyを楽しく学べている、とは言ったもののそれは自分がRailsを使ってWebサイトを作っているから楽しく思っているだけのような気もしてはいます。 RaisではほとんどRubyの記述、というよりRailsがほとんどやってくれていて、あとは自分が作ったビューを調整していくという結構誰でも楽しめるようなことからRubyをやっていっているというのが現状です。 つまりは 初心者の私から言う プログラミング(Ruby)楽しい!(Webアプリ作り楽しい!)というのと プログラミングに精通している人から言う プログラミング(Ruby)楽しい! という違いが結構あるかもしれません。
iwamoto_takaaki

2017/02/13 08:15

Railsだけでは、色々なことをするには足りませんが、Railsから初めるのは悪くない選択肢だと思います。 Rubyの勉強が後になっても問題ありません。 継続は力なりなので、楽しみ続けて下さい。
dongw

2017/02/15 10:46

コメントありがとうございます。 頑張って勉強続けてみようと思います!ありがとうございます!
guest

0

アルゴリズム系の問題が解けるようになるには、
サイトや書籍で勉強することも大事だとは思いますが、普段の取り組み方が一番大事だと思いますよ。

  • プログラミングをする前に何をプログラミングするのか「フローチャート」などを書いて、処理の流れなどを理解した上でプログラミングしていますか?
  • 実際に書いたプログラムとフローチャートを比較して確認したりしていますか?
  • 何かわからないことがあった場合に、何がわからないか他の人にきちんと説明できますか?

私の周りにもアルゴリズムを考えられない人や生産性の低い人がいますが、そういう人は大体、上記の作業をやっていません。
ソースコードしか見ずにプログラミングをして大体失敗しますし、ノートもほとんど意味がない内容ばかりメモを取っています。

アルゴリズムを考えられるか否かは、物によっては数学的な素養がないと難しいかもしれませんが、それ以外のものは「論理的に物事を考える」「自分が考えていることを整理整頓する」「物事を順序立てて考える」「自分がやったことをきちんと振り返る」と言ったことが日常的にできてる人であれば、ある程度経験を積むことで能力は向上すると思いますよ。

投稿2017/02/09 09:47

koichi-ezato

総合スコア237

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

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

dongw

2017/02/12 22:46

コメントありがとうございます。 普段の取り組み方、そうですね、そう考えるとおっしゃるような作業は全然やっていませんでした。 そういう習慣がないまま、いきなりアルゴリズムの問題を解こう!となっても出来ないというのは当たり前でしたね・・・ とりあえず 問題がある→答えはなんだろう?→解き方がなかなか分からない→答えを早く知りたい!→答えをすぐみる(答えがあったら) という習慣をなんとか取り除くべきために普段の取り組み方から何かアクセントを加えないといけないですね・・・
koichi-ezato

2017/02/13 06:29

あとは自分がやってる作業をブレークダウン(細分化)することも意識すると良いと思いますよ。 「XXX機能を実装する」という作業があった場合に、 「XXX機能を実装」するまでにやらないといけないことだけでもこれだけ細分化できます。 「設計書を確認する」 「仕様の不明点をまとめる」 「不明点を確認する」 「仕様の不明点を確認した上で設計書を確認した際に、設計書に修正が必要な所がないか」 「コーディング規約を確認する」 「実装する上で流用できそうな機能などがないか確認する」 今、簡単に思いつくだけでもこのくらいの作業は実装前にやっておきたい作業になると思います。 これらの作業を思いつくまま、場当たり的にこなしていると行き当たりばったりの実装になったり、作業効率が上がらなかったりすると思います。 作業をブレークダウンすることは日々の作業の中でも実施できるので、自分の持っている作業を「順序立てて」「細分化」することができるようになると、アルゴリズムの処理の流れなどを把握するためのスキルが身に付くようになると思いますよ。
dongw

2017/02/15 10:34

コメントありがとうございます。 作業の細分化、という話ですね。 今はエンジニアを目指している身なので実務的な面の話になると理解が乏しいですが、問題の本質的にはそういう細分化して考えるということですよね。 自分は結構思いつくままに総当りして調べる、というのが習慣化しているのがよくないのかも、と思ったりします。 順序立て、細分化をうまく身につけたいです。 これもアルゴリズム系の問題を毎日解いていって身体に染み込ませるべきでしょうか?
koichi-ezato

2017/02/16 03:13

アルゴリズム系の問題を毎日解いてとりあえず慣れるというのはアリだと思いますよ。 あとは何かしら問題などを解くときに、どこが「ゴール」なのかをしっかり意識することも大事だと思います。色々考えたりしていると、いつの間にか本題と関係ないことをやってしまっているということもよくあるので・・・。今、自分はきちんと「ゴール」に向かっているかを都度確認しながら問題を解いていくようにしてみてください。
dongw

2017/02/16 10:59

コメント返信ありがとうございます。 自分はエンジニアとしてお金を稼ぎたい、と考えている身(転職希望)です。 そういった意味ではアルゴリズムすらまともに考えられないエンジニアなんてものはまともにお金が稼ぐことが出来ない、と考えからアルゴリズムの勉強を始めようと思っています。 どこがゴール、というよりどこまで身体に思考を染み込ませるまでやるか、という点になってくるのでしょうか。 決して得意ではない、また最初から別に好きでやっているわけではないので、過程でどうやって楽しめるようにするかということが重要なのかな、と考えています。
guest

0

同じような質問をした人もいます。
Rubyでアルゴリズムを学ぶのに適した書籍やサイトを教えてください

プログラマやSEは誰にでもできる仕事ではありません。適性があるか、

プログラマ 適性

などのキーワードでググってみては?

投稿2017/02/09 09:23

Orlofsky

総合スコア16415

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

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

dongw

2017/02/12 22:42

コメントありがとうございます。 類似質問をピックアップしていただきありがとうございます。 参考URLの質問も参考に見させていただきます。 プログラマやSEの適性という面では自分は確実に適正がないタイプだと思います。 過去に適性検査など色々受けましたが、全く向いてませんでした。 ただ、それでもプログラマをやりたい、と思う理由はあります。 Webサービスが好きで、自分の作りたいと思っているWebサービスを作りたい、そういう場所で働きたいと思っているから、という往生際の悪さです。 その為に何とか足掻いている最中です。 色々な意見を参考にさせてもらいます。
guest

0

例えばこういう本はどうでしょう?
いかにして問題をとくか

投稿2017/02/09 09:10

PineMatsu

総合スコア3579

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

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

can110

2017/02/09 09:17

名著ですね。私は流し読みで挫折しました^^;
PineMatsu

2017/02/09 09:21

私も全ては制覇してないです(笑)。 実践活用編というのも有りますね。
moke

2017/02/10 02:58

私もこの本、大好きです
dongw

2017/02/12 22:34

コメントありがとうございます。 推薦していただいた本、買ってみようと思います。 レビューを読むとどちらかというと数学要素が高い本なのでしょうか? 現時点で少し読み進められるかが不安ですね・・・
cateye

2017/02/13 09:15 編集

私の持っているのは第13刷(30年前)なので今は違うかもですが、B6サイズのソフトカバーなので、持っていても苦になりません。ゆっくり読めばいいと思います。・・・私自身、読んで身に着けたか?・・・と言われると・・・・・・orz
PineMatsu

2017/02/13 09:13

数学の問題が基本になってますが、数学的な考え方は科学や工学全般に適用できる考え方なので、見つけておいて損なことはないです。
dongw

2017/02/15 10:29

一気に読んで理解出来る、という本ではないんですね 数学的思考は苦手ですが、じっくりゆっくり読んで身につけようと思います。 amazonでポチりました
guest

0

ベストアンサー

アルゴリズムをどう定義するか、どのようなものをアルゴリズムと考えているかによる部分はありますが、teratai には、初級編の質問に溢れていますw

最近盛り上がったのは、以下です。
「-3, -2, -1, 1, 2, 3」の6つの整数をランダムで得る「いい」方法

私は早々に見切りをつけ、配列最強説を唱えましたが、結果から見ると言語機能の使い方で、よりシンプルな方法が提示されました。

補足

シンプルな方法ということで、乱数の元は組み込まれた関数を使用するものとします。
すると乱数は連続する数値の範囲を指定することになります。
その前提で考えると、「-3, -2, -1, 1, 2, 3」を連続した数値に直すか、連続した順番で捉えるかの2択になるかと。
前者は多段な処理を行わなければならないのであまりシンプルな発想ではないと思います。
シンプルさで言えば、後者の配列として捉える方法が適解かと。

連続した数値に直す方法として、多くのシンプルな方法が提示されてしまいました^^;

アルゴリズム問題にあたって必要なのは
・問題を理解する能力(数学的理解)
・使用する言語の特性(プログラム的解釈)
の双方からのアプローチです。

どちらの能力も、件数をこなすことで、地味に伸びるものだと思います。

teratail で例に挙げたような課題は、「注目」タブに上がってきます。
祭りに参加すれば、楽しく能力アップにつながると思いますよ^^

投稿2017/02/12 22:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

dongw

2017/02/12 23:23

コメントありがとうございます。 「-3, -2, -1, 1, 2, 3」問題の記事、見させてもらいました。 自分としても配列にもたせてRubyのsampleメソッドでランダムに取り出せばそれでいいやーと思ってしまいました。 また、残念ながらそれ以外の回答が高度すぎて自分にはとても理解できるものではなかったです。 やはりこういう問題が好きな人は数学的レベルがもともと高い人、という印象を受けました。 アルゴリズム問題にあたって必要な 問題を理解する能力 という点は一番痛感している部分です。 SPIの非言語問題などでも、全然分からない問題の解答を見ると、この問題は言い換えると〜〜であって〜 みたいな記述だらけですよね。 自分はそういうのに全く気付かなくて延々と総当たりなど掛け算割り算レベルの小学算数レベルで無理やりやっていて解けなかったりしたので完全に苦手意識が付きました。 問題を理解する能力、言い換える能力、というのが今自分の一番欲しい能力だと思っています。 これも件数を地道にこなすしかないのでしょうね。 ただ、自分みたいに割と低レベルみたいな所から始めるにはどういったものから始めるべきか、というのが悩みどころです。
退会済みユーザー

退会済みユーザー

2017/02/12 23:58

すでに自己分析をされているようなので、多少失礼かもしれませんが、コメントから受けた印象を書きますね。 dongw さんの問題点は、「問題への苦手意識」と「回答への興味の欠如」だと思われます。 苦手意識に関してはすでに認識されているようですが、こちらは楽しむことが必要だと思います。私は「祭り」に参加されることをオススメします。 問題なのは「回答への興味の欠如」です。 今回提示したリンク先の回答は、一部難解な言い方をしているものもありますが、関数群を理解すると発想そのものはそれほど難しいものはありません。 多分ですが、関数群の挙動を調べていないのではないかと思います。 また、少し変わった挙動でも、使用する数が6個しか無いので、試してみることは容易です。(まぁ、一般化している回答もありましたが、そちらは例外ということで^^;) この短時間でコメントしているということは、多分試してませんね?今回のリンク先の例は「JavaScript」だったので実行環境を整えることは簡単です。私は全ての回答を試しました。 多分ですが、このあたりがアルゴリズム理解に対しての深度に関係してくると思います。 他者の回答に興味を持って試してみることからはじめてみるのもイイかもしれません。興味を持つ事が重要だと思います。
退会済みユーザー

退会済みユーザー

2017/02/13 00:16

あと、こちらも感覚的なモノでの感想ですが、文章の構築や流れの作り方から、本来フローを追うことに問題のある方ではないと思います。 算数の苦手な人の文章はもっと順序立てがなっておらず、意味を理解するのが難しいです。 算数の苦手な人の書く文章ではないように思います。 算数的な要素が入ることで、一気に整理がうまくいかなくなっているようですが、苦手意識以外にもなにか原因があるかもしれません。
dongw

2017/02/13 03:18

コメントありがとうございます。 フィードバックを頂けてとても励みになります。 「回答への興味の欠如」の話、とても心にズバズバと刺さってきます。 仰る通り、リンク先の回答コードは試していません。ぱっと眺めて「うわ、難しいなあ」という判断を下してコメントしました。 つまり実際の「自分が解決したい問題」ではないからこういった浅い興味になってしまうということですよね 結局は自分が本当に「本当に困っているから」、「やりたいから」と思ったことだけをやってきたからこういった習慣がついてしまったのかもしれません。 「問題」という「作られた問題」にあまり関心が湧かないというのが原因かもしれないということで、仰る通り他人の質問や回答がどういうものなのか興味を持つ、ということから始めるべきかもしれません・・・
guest

0

アルゴリズムとは「何かを行うときの手法」であり、手順そのものです。
何かをしようとしたときに、その「こと」をどんどん細分化して(逆にそれぞれのステージごとにやることは単純化される)いくことになります。

他の方が書かれている

  • 流れ図を書いてみる
  • 細かく分類する

というのは、そうすることで細分化の助けになるからです。
※流れ図を書いて大まかな動きを把握し、それをさらに細かくしていく感じです

と、こう書いてしまうといかにも難しそうですが、よく考えてください。
何をするにしてもアルゴリズムと言うか手順は付いて回るのです。
逆にいえば、貴方が普段生活する中で何げなく行っていることであっても、実際には複雑な手順の組み合わせなのです。

簡単なところだと、三目並べ(○×ゲーム)で、手を決めるアルゴリズムも、結構考えさせられます。
※このゲームは先攻・後攻の双方が最善手を打ち続けた場合、絶対に勝敗がつかないことが証明されています。昔を知る人ならば WAR GAMES を思い出すでしょう

投稿2017/02/09 10:45

tacsheaven

総合スコア13703

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

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

dongw

2017/02/12 22:53

コメントありがとうございます。 細分化、確かにそういう作業が苦手ですね そういう作業をやらずに総当りで手当たり次第やっていくのが自分でした。 総当りでも解ける規模の問題ならなんとかなりますが、そうでないと計算の多さに諦めるということが多かったですね。 ◯✕ゲームで言うとマスの多さが増えるに連れて、先の手を読むことを諦めてしまうみたいな感じですね ただ、細分化しても細分化した情報と情報がどう繋がるのか、というのは結構閃き重視な所もあるような気がするんですがこれも慣れなのでしょうか?
guest

0

ちょっと他の人と違うアポローチで

プログラム言語というのは、コンピューターの言葉(01)と人間の言葉
の均衡点というか妥協点なんです。
だからコンピューターも人間も割と理解しやすい
数学というものをベースに作っています。
なので数学が得意な人は、アルゴリズムを考えるのは得意です。

だから、プログラマーは数学が好きでないといけないとは思いませんが、
数学が嫌いだったり苦手だと、苦労すると思います。
特に文章題が、全然解けなかったという人は、別の道を考えるべきかもしれません。

散々なことを書きましたが、数学(算数)が嫌いだったり苦手だという意識は義務教育の時に
植えつけられたコンプレックスのようなものかもしれません。

というわけで、数学が楽しくなるかもしれない本を紹介します。数の悪魔
またこんなアプローチもいいかもしれません算数がメチャとくいになれる本
両方とも小学生向けの本ですが、大人が見ても楽しめます。
基本的なアルゴリズムや数学的思考は、算数、数学をやっていれば自然と身につきます。
質問者様はもしかしたら、数学の苦手意識から、その機会を逃してしまったのではないでしょうか
数学もプログラムも好きになること、楽しむことが一番の上達の早道かもしれません。

投稿2017/02/13 06:10

編集2017/02/13 06:16
moke

総合スコア2241

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

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

dongw

2017/02/15 10:58

コメントありがとうございます。 数学が苦手だったりすると苦労する、その通りだと思っています。現に苦労しています。 ただ、別の道を進むというのは現時点で考えていません。精一杯這いつくばっていこうと思っています。 確かに算数、数学嫌いが植え付けられたコンプレックスというのはすごく納得できる話です。 小学校算数中学校数学の時に、うわあめんどくさいな〜と思ってから嫌いになり、今まで真面目に向き合っていないのかも分かりません。 小学校算数から復讐となると莫大な時間がかかることも行動を億劫にさせてる一つの原因かもしれません。 参考に挙げてくれた本を是非買って見てみようと思います。 ありがとうございます。
moke

2017/02/15 11:29 編集

小学校算数から復讐となると莫大な時間がかかる 心配する必要はありません。小学校(主に中学受験)の復習で十分です。 というか、数学的思考の基礎はそこが全てです。 結局、大学、高校受験は、その時習ったツールを使うだけで。 数学的思考の本質は何ら変わりません。 中学受験レベルでも、やっているうちに、上で出てる「いかにして問題をとくか」 を実践していると思います。
dongw

2017/02/16 11:22

コメント返信ありがとうございます。 数学的思考の基礎ですね。 確かにSPIなどや企業の適性検査などは数学的なレベルとしては中学受験レベルの数学、ということも聞いたことがあります。 アルゴリズム、またその考え方を染み込ませるためにもそこからまず始めてみようと思います。
guest

0

この本がおすすめです。
何か目標がないと上達しないと思いますので、一度基本情報技術者を受験してみてはいかがでしょうか。

基本情報技術者 大滝みや子先生のかんたんアルゴリズム解法 流れ図と擬似言語 第3版 | 大滝 みや子 |本 | 通販 | Amazon
http://www.amazon.co.jp/o/ASIN/4897979668/hotuama-22

投稿2017/02/13 04:10

hotu_ta

総合スコア114

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

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

dongw

2017/02/15 11:09

コメントありがとうございます。 そうですね、何かするために学ばないととてもじゃないと続かないですよね 参考に挙げていただいた本読んでみようと思います。 ありがとうございます。
guest

0

例えば「コーヒーが飲みたい!」と思ったら・・・
・お湯を沸かしてコーヒーを点てる
・コンビニでコーヒーを買ってくる
・茶店(ファミレスw)に行く
・・・という手段(方法)があって・・・
(金欠だし;;、豆はあるから・・・)コーヒーを点てようと思ったら→
1.お湯を沸かす
2.ドリッパーを用意する
3.コーヒー豆を挽く
4.コーヒーを点てる
・・・などなど、飲み方にもいろいろな方法があるのですが・・・
上に書いたのは(コーヒーを飲む)為の手段で、下の番号を振ってあるのがコーヒーを飲むためのアルゴリズム(ちと大げさw)・・・で、どこで詰まっちゃうんでしょう??;

投稿2017/02/12 23:50

cateye

総合スコア6851

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

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

dongw

2017/02/13 02:46

コメントありがとうございます。 このコーヒーの場合で言うと、まずどういう方法で飲むか、という段階で躓いてるかな、と感じています。 別の問題になりますが、以下の有名?な問題とかだとまず何をするか、という段階で躓きます。 人間が1人、モンスターがM匹、ウサギがB匹います。ここから、モンスターか人間がいなくなるまで無作為に2匹(もしくは1人と1匹)を選び出し、以下の行動を繰り返します。 モンスターとモンスターが選ばれると、両方のモンスターが死にます モンスターとモンスター以外が選ばれると、モンスター以外が殺されてしまいます ウサギとウサギが選ばれると、何も起こりません ウサギと人間が選ばれると、人間の生存確率が最も高くなるように、ウサギを殺す、またはそのままにする、のどちらかの選択をします モンスターの数Mとウサギの数Bが与えられたときに、最後に人間が生き残る確率を答えなさい。ただし、M、Bともに1000以下の整数とする。 この場合だとまずモンスターがM匹、ウサギがB匹、という時点で最初にどういう計算から入ろうか、という時点で悩みます。 また、ウサギと人間が選ばれた場合の結果が不透明である、という時点でまた悩みます。 結果、単純な計算というわけではない、という判断を下して完全に躓きます。 要は問題を噛み砕く能力が絶望的に足りないのかなあ、と感じています。
tacsheaven

2017/02/13 08:34

これ、この条件からどう計算式をかみ砕くか、ですが… まず人間が生き残る、というのは、「モンスターが全滅する」しかありえません。モンスターが2匹、ウサギがX匹いる状態で、モンスターが2連続で引かれた場合、モンスターは全滅し、ウサギと人間は生き残ります。モンスターが一匹だけになったら絶対に人間は死亡します。(モンスターが1匹だけだと、このモンスターは死ぬことがない) ということは…最初のMが奇数だったら、生き残る確率は 0 ですね、これ(w
tacsheaven

2017/02/13 08:53

ではモンスターが偶数の場合はどうなるか。最小パターンはM=2,B=0 のときで、このとき人間が生き残る確率は、(2/3 * 1/2) = 1/3 となります。(1回目でも2回目でも人間が引かれない確率) ではその最小パターンの一つ手前は、というと、M=4,B=0 となります。この回に人間が生き残る確率は同様に (4/5 * 3/4) = 3/5 です。さらにこのあと最小パターンのときの生き残り確率が加わりますから、3/5 * 1/3 = 1/5 となります。 後ははしょりますが、結果的にモンスターが M 匹のとき、人間が最後まで生き残る確率は 1/(M+1) です。(※ただしMは0以上の偶数に限る) ウサギは実のところ何ら確率には影響しません。ウサギがいたところで、モンスターの数は変化しないのですから、「最後まで人間が生き残る確率」には影響しません。(ある回数生き延びられるか?なら影響する)。これ、ウサギが影響しないことを見極められるかどうかも評価対象ですねたぶん。
cateye

2017/02/13 08:57

ポリアの本の一読をお勧めしますd^^・・・以下、「いかにして問題を解くか」ですが・・・1.問題を理解すること、2.計画を立てること、3.計画を実行すること、4.ふり返ってみること・・・どちらかというと数学よりの本ですが、どうしたら好いのか?の手助けになると思います。
dongw

2017/02/16 11:19

tacsheavenさん 問題の解説ありがとうございます。 最初の仮定で、 モンスターが奇数だったら生き残る確率0 ウサギは生き残る確率に影響しない という所で既に「ああ、よく考えたらそうだな」、という思考の至らなさで恥ずかしいです。 また、この仮定後の確率の計算も全く考えが及びませんでした。 そもそもこういった確率の計算式を文章問題において用いる習慣ということがなかったのでなかなかこういう綺麗な解説通りの思考にならないのが現状です。 思考回路的には 「えーっと人間がもし一人でモンスターもウサギも一匹だと組み合わせ的にはどうなるんだ〜?」 「人間がもし一人でモンスターは一匹、ウサギは0匹だと今度は・・・?」 というのを確率の式が浮かんでこないんで延々と地道に脳内で組み合わせパターンを描いているというような感じです。 結局これも文章問題から式に起こすという反復練習が必要なのですよね? 早めに数学に苦手意識を持ってから義務教育の中でもそういった問題を解くことをしてこなかったもので・・・
dongw

2017/02/16 11:20

cateyeさん ポリアの本、買ったので読んでみようと思います。 そういった本の存在など知らなかったので皆様に教えていただき感謝しています。
guest

0

遊んで学べる、基礎構文のアルゴリズムの組み立て方としておすすめなのがLightBotです。
http://jp.techcrunch.com/2013/06/27/20130626light-bot-teaches-computer-science-with-a-cute-little-robot-and-some-symbol-based-programming/

ただ、言語ですらないおもちゃのようなプログラミングですので、本当に「アルゴリズム」の組み立て方の力だけを鍛えるものです。それをRubyに落とし込むのはあなたの独力です。

投稿2017/02/10 00:18

編集2017/02/10 00:20
masaya_ohashi

総合スコア9206

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

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

dongw

2017/02/12 23:04

コメントありがとうございます。 LightBot、ちょっとあとでやってみたいと思います。 自分に足りないのは基礎的なアルゴリズムの組み立て方、というのが的確だと思っています。 自分みたいに苦手な人はこのようなもので最初は地道にやっていくのが最善ということですよね 頑張ってみます。
guest

0

中々、机に向かって勉強!というのは、心理的な抵抗や疲労感もあり大変かもしれませんね。
まずは、気負わずに考え方の訓練をしてみては如何でしょうか?

①まずは、適当な課題を1つ見つける
(よく研修なんかでやるのは自動販売機の例ですね)

②一つ一つの要素をできる限り、下記の様に細かく分解してみる。
(ざっくり例)
(お金を入れる⇒
入れられたものが通貨かどうかを確認する⇒
お金の種類を分類する⇒
お金を集計する⇒
購入可能な商品を表示する⇒
お釣りを計算する⇒
お釣りの残額で購入可能な商品があれば、再度購入可能な商品を表示する⇒
お釣りを出すように選択されるまたは、お釣りの残額で購入可能な商品が無ければお釣りを出す)

③フローチャート等を使って漏れやダブりがないか(MECEになるか)どうか、チェックしながら想定通りの動きを本当にするのかを検討する

この①~③の流れを日常の中で、考えながら楽しめるといいかもしれません。

投稿2017/02/09 09:21

motuo

総合スコア3027

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

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

dongw

2017/02/12 22:38

コメントありがとうございます。 そうですね、いざアルゴリズムの勉強するぞ!と言ってもなかなかやりづらいというのもあります。 ちょっとした課題でも細かく、時間をかけてやっていった方がいい、ということでしょうか? 自分のよくあるパターンとしては、 問題がある→答えはなんだろう?→解き方がなかなか分からない→答えを早く知りたい!→答えをすぐみる(あったら)という負のループに入ります そういう過程を楽しむ思考回路にうまく切り替える方法はやはり積み重ねしかないのでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問